Tutorial ini menunjukkan cara menyiapkan layanan tokenisasi kartu kredit dan kartu debit yang dikontrol akses di Cloud Functions. Untuk menyiapkan layanan tersebut, artikel ini menggunakan layanan Google Cloud berikut: Identity and Access Management (IAM) dan Cloud Key Management Service (KMS).
Tokenisasi adalah proses penggantian nilai placeholder atau token yang tidak berbahaya untuk informasi sensitif seperti data kartu kredit. Bagian 3 Standar Keamanan Data Industri Kartu Pembayaran (PCI DSS) mewajibkan sebagian besar data yang disimpan di kartu kredit diperlakukan sebagai informasi sensitif.
Token itu sendiri tidak ada gunanya kecuali sebagai sarana untuk mencari data dengan token dalam konteks tertentu. Namun, Anda tetap harus memastikan bahwa token tidak berisi informasi spesifik per pengguna dan tidak dapat didekripsi secara langsung. Dengan demikian, jika Anda kehilangan kontrol atas token kartu pembayaran pelanggan, tidak ada yang dapat menggunakan token tersebut untuk membahayakan data pemegang kartu.
Layanan untuk menangani informasi sensitif
Anda memiliki banyak pilihan bagi platform atau layanan untuk menghosting lingkungan data pemegang kartu (CDE) Anda. Tutorial ini akan memandu Anda mempelajari contoh deployment menggunakan Cloud Functions dan membantu Anda mengambil langkah selanjutnya untuk mendapatkan solusi siap produksi.
Cloud Functions adalah platform serverless yang menghosting dan mengeksekusi kode, serta merupakan tempat yang nyaman untuk meluncurkan aplikasi yang diskalakan dengan cepat tanpa intervensi. Perlu diingat bahwa dalam CDE yang sesuai dengan PCI DSS, Anda harus membatasi semua traffic masuk dan keluar ke koneksi yang diizinkan. Kontrol terperinci tersebut saat ini tidak tersedia untuk Cloud Functions. Oleh karena itu, Anda harus mengimplementasikan kontrol kompensasi di tempat lain (seperti di aplikasi Anda) atau memilih platform yang berbeda. Layanan Tokenization yang sama dapat dijalankan dalam container seperti penskalaan otomatis grup instance terkelola atau cluster Kubernetes. Ini akan menjadi lingkungan produksi yang lebih baik dengan kontrol jaringan VPC yang lengkap.
Cloud KMS adalah layanan pengelolaan kunci Google Cloud. Cloud KMS menghosting kunci enkripsi Anda, merotasinya secara teratur, dan mengenkripsi atau mendekripsi data akun yang tersimpan.
IAM digunakan dalam tutorial ini untuk memberikan kontrol yang ketat pada semua resource yang digunakan dalam layanan tokenisasi. Anda memerlukan akun layanan khusus yang memiliki token yang sering habis masa berlakunya untuk memberikan akses ke Cloud KMS dan untuk menjalankan tokenizer.
Gambar berikut mengilustrasikan arsitektur aplikasi tokenisasi yang Anda buat dalam tutorial ini.
Tujuan
- Buat akun layanan.
- Menyiapkan Cloud KMS.
- Membuat dua Cloud Functions.
- Membuat token autentikasi.
- Memanggil tokenizer.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
-
Di konsol Google Cloud, buka halaman Pemilih project.
-
Untuk mulai membuat project Google Cloud, klik Buat project.
-
Beri nama project Anda. Catat project ID yang dibuat.
-
Edit kolom lain sesuai kebutuhan.
-
Untuk membuat project, klik Buat.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Cloud Build, Cloud Functions, and Cloud KMS APIs.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Membuat akun layanan
Akun layanan runtime default untuk Cloud Functions memiliki peran Editor, yang memungkinkan akses luas ke banyak layanan Google Cloud. Meskipun ini adalah cara tercepat untuk mengembangkan fungsi, Google merekomendasikan penggunaan akun layanan default hanya untuk pengujian dan pengembangan. Anda membuat akun layanan untuk membatasi API yang dapat digunakan fungsi tersebut sesuai dengan prinsip hak istimewa terendah. Untuk membuat akun layanan, lakukan langkah berikut:
Di konsol Google Cloud, buka halaman Akun Layanan.
Pilih project Anda.
Klik
Buat akun layanan.Di kolom Nama akun layanan, masukkan
Tokenization Service User
. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi akun layanan.
Klik Buat dan lanjutkan.
Klik Select a role, lalu pilih Cloud KMS Encrypter/Decrypter.
Untuk menyelesaikan pembuatan akun layanan, klik Selesai.
Anda sekarang memiliki pengguna akun layanan dengan alamat email berikut:
tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com
Menyiapkan Cloud KMS
Di konsol Google Cloud, buka Key Management.
Klik **+ Create key ring **. Pada dialog yang muncul, lakukan hal berikut:
- Beri nama key ring
tokenization-service-kr
. - Untuk Lokasi key ring, pilih global. Ini adalah pilihan umum yang sudah cukup untuk tutorial ini. Namun, sebelum membuat keputusan arsitektur produksi, pastikan Anda memahami perbedaan antara berbagai lokasi Cloud KMS.
- Periksa kembali pilihan Anda, karena Anda tidak dapat menghapus atau mengganti nama key ring setelah dibuat.
Klik Create.
Sistem akan membuat key ring dan meneruskan Anda ke halaman pembuatan kunci.
- Beri nama key ring
Pada dialog Create key, lakukan hal berikut:
- Beri nama kunci
cc-tokenization
. - Untuk Tujuan, pilih
Symmetric encrypt/decrypt
. Tetapkan Periode rotasi ke nilai yang Anda pilih, lalu klik Buat.
- Beri nama kunci
Membuat Cloud Functions
Tutorial ini mengasumsikan bahwa Anda akan menggunakan Cloud Shell. Jika menggunakan terminal yang berbeda, pastikan Anda memiliki Google Cloud CLI versi terbaru.
Di konsol Google Cloud, buka Cloud Shell:
Clone repositori project GitHub dan pindahkan ke folder kerja:
git clone https://github.com/GoogleCloudPlatform/community gcp-community cd gcp-community/tutorials/pci-tokenizer/
Folder
gcs-cf-tokenizer
berisi fileindex.js
, yang merupakan sumber untuk dua Cloud Functions yang berbeda yang akan Anda buat. Class ini juga berisipackage.json
, yang memberi tahu Cloud Functions paket mana yang akan dijalankan.Terapkan konfigurasi KMS. Salin file template konfigurasi dan buka untuk diedit:
cp config/default.json config/local.json nano config/local.json
Runtime Node.js mengharuskan Anda untuk secara eksplisit menentukan ID project Google Cloud:
"project_id": "YOUR_PROJECT_ID"
Temukan konfigurasi KMS dan terapkan nilai KMS yang Anda buat di bagian sebelumnya:
"location": "global", "key_ring": "tokenization-service-kr", "key_name": "cc-tokenization"
Deploy fungsi tokenize.
gcloud functions deploy tokenize --runtime=nodejs18 --trigger-http \ --entry-point=kms_crypto_tokenize --memory=256MB \ --service-account=tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com \ --no-allow-unauthenticated --source=.
Fungsi ini mengubah informasi kartu kredit menjadi token.
Cari nilai URL di bagian
httpsTrigger
dalam output perintahgcloud functions deploy
. Simpan nilai URL dalamTOK_URL
variabel lingkungan:TOK_URL="TOK_URL"
Anda akan menggunakan variabel lingkungan
TOK_URL
untuk memanggil fungsitokenize
.Deploy fungsi detokenisasi dalam mode KMS.
gcloud functions deploy detokenize --runtime=nodejs18 --trigger-http \ --entry-point=kms_crypto_detokenize --memory=256MB \ --service-account=tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com \ --no-allow-unauthenticated --source=.
Fungsi ini membalikkan proses tokenisasi.
Cari nilai URL di bagian
httpsTrigger
dalam output perintahgcloud functions deploy
. Simpan nilai URL dalam variabel lingkunganDETOK_URL
:DETOK_URL="DETOK_URL"
Anda akan menggunakan variabel lingkungan
DETOK_URL
untuk memanggil fungsi detokenize.Anda telah membuat dua Cloud Functions yang terpisah: satu untuk mengubah nomor kartu menjadi token, dan satu lagi untuk membalikkan prosesnya. Titik entri yang berbeda akan mengarahkan eksekusi ke fungsi awal yang tepat dalam file
index.js
.Setelah fungsi di-deploy, buka konsol Cloud Functions.
Verifikasi bahwa fungsi telah dibuat. Jika semuanya berjalan lancar, Anda akan melihat dua {i>function<i} Anda dengan tanda centang di sebelahnya.
Membuat token autentikasi
Opsi no-allow-unauthenticated
dalam perintah gcloud functions deploy
berarti pemanggil yang memanggil fungsi harus menampilkan token autentikasi untuk menyatakan identitas pemanggil. Pemanggil harus memiliki cloudfunctions.functions.invoke
izin. Peran yang telah ditetapkan berikut memiliki izin ini: Invoker Cloud Functions, Admin Cloud Functions, dan Developer Cloud Functions.
Buat token autentikasi:
AUTH_TOKEN=$(gcloud auth print-identity-token) echo $AUTH_TOKEN
Perintah ini menghasilkan string token autentikasi, menyimpannya di variabel lingkungan $AUTH_TOKEN
, lalu menampilkan tokennya. Kemudian, Anda akan memanggil Cloud Functions yang telah di-deploy dengan token.
Memanggil tokenizer
Buat beberapa contoh data untuk diteruskan ke tokenizer:
export TOK_CC=4000300020001000 export TOK_MM=11 export TOK_YYYY=2028 export TOK_UID=543210
Buat token autentikasi seperti yang dijelaskan di bagian sebelumnya, lalu panggil tokenizer:
CC_TOKEN=$(curl -s \ -X POST "$TOK_URL" \ -H "Content-Type:application/json" \ -H "Authorization: Bearer $AUTH_TOKEN" \ --data '{"cc": "'$TOK_CC'", "mm": "'$TOK_MM'", "yyyy": "'$TOK_YYYY'", "user_id": "'$TOK_UID'"}' \ ) echo $CC_TOKEN
String tokenisasi yang mewakili data kartu kredit akan ditampilkan. String ini telah disimpan dalam variabel lingkungan
CC_TOK
. Anda dapat mengambil informasi kartu dengan memanggil detokenizer.Balik tokenisasi dengan perintah berikut.
DETOK_DATA=$(curl -s \ -X POST "$DETOK_URL" \ -H "Content-Type:application/json" \ -H "Authorization: Bearer $AUTH_TOKEN" \ --data '{"user_id": "'$TOK_UID'", "token": "'$CC_TOKEN'"}' \ ) echo -e "$DETOK_DATA\n"
Outputnya akan terlihat seperti berikut:
{"cc":"4000300020001000","mm":"11","yyyy":"2028","userid":"543210"}
Data ini adalah data yang awalnya dikirim ke tokenizer, didekripsi, dan diambil oleh aplikasi Anda.
Perluas tutorial ini
Kode contoh di GitHub adalah awal yang sangat baik, tetapi ada hal-hal lain yang harus dipertimbangkan sebelum beralih ke produksi.
Jika memilih menggunakan Cloud Functions untuk tokenisasi kartu pembayaran, Anda mungkin perlu melakukan lebih banyak hal untuk memenuhi Penilai Keamanan yang Memenuhi Syarat atau Kuesioner Penilaian Mandiri. Secara khusus, bagian 1.2 dan 1.3 PCI DSS memerlukan kontrol yang ketat pada traffic masuk dan keluar. Cloud Functions dan App Engine tidak menawarkan firewall dua arah yang dapat dikonfigurasi, sehingga Anda harus membuat kontrol kompensasi atau men-deploy layanan tokenisasi di Compute Engine atau Google Kubernetes Engine. Jika Anda ingin mempelajari containerization, kode GitHub harus kompatibel dengan Docker dan berisi dokumentasi pendukung.
Kode contoh ini juga menarik dependensi npm (pengelola paket Node.js) saat deployment. Di lingkungan produksi Anda, selalu sematkan dependensi ke versi yang telah diperiksa tertentu. Kemudian, paketkan versi tersebut dengan aplikasi itu sendiri atau tayangkan dari lokasi pribadi dan tepercaya. Salah satu pendekatan tersebut membantu Anda menghindari periode nonaktif yang disebabkan oleh pemadaman layanan di repositori npm publik atau dari serangan supply-chain yang menginfeksi paket yang Anda anggap aman. Jika Anda melakukan pra-build dan memaketkan aplikasi yang sudah selesai, waktu deployment Anda biasanya akan berkurang, yang berarti peluncuran lebih cepat dan penskalaan yang lebih lancar.
Pembersihan
Untuk membersihkan setiap resource yang digunakan dalam tutorial ini, Anda dapat menghapus project.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Kepatuhan Standar Keamanan Data PCI.
- Menggunakan OAuth 2.0 untuk mengakses Google API
- Persyaratan PCI DSS.
- Tambahan Info Tokenization PCI DSS.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.