Dokumen ini menunjukkan cara menyiapkan layanan tokenisasi kartu kredit dan kartu debit yang dikontrol akses di Cloud Run Functions. Untuk menyiapkan layanan tersebut, deployment dalam dokumen ini menggunakan layanan berikut: Google Cloud 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 berarti kecuali sebagai cara untuk mencari data yang di-tokenisasi 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. Dokumen ini akan memandu Anda mempelajari contoh deployment menggunakan Cloud Run Functions dan membantu Anda mengambil langkah selanjutnya untuk mendapatkan solusi siap produksi.
Cloud Run 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 Run 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 dokumen 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 dokumen ini.
Tujuan
- Buat akun layanan.
- Menyiapkan Cloud KMS.
- Membuat dua Cloud Run Functions.
- Membuat token autentikasi.
- Memanggil tokenizer.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih sebagai berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
-
Pastikan Anda memiliki peran IAM Project Creator
(
roles/resourcemanager.projectCreator). Pelajari cara memberikan peran. -
Di Google Cloud konsol, buka halaman pemilih project.
-
Klik Create project.
-
Beri nama project Anda. Catat project ID yang dibuat.
-
Edit kolom lain sesuai kebutuhan.
-
Klik Create.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
Aktifkan Cloud Build, Cloud Run Functions, dan Cloud KMS API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
Membuat akun layanan
Akun layanan runtime default untuk Cloud Run 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 Google Cloud konsol, buka halaman Akun Layanan.
Pilih project Anda.
Klik Buat akun layanan.
Di kolom Nama akun layanan, masukkan
Tokenization Service User. Konsol akan mengisi kolom ID akun layanan berdasarkan nama ini. Google CloudOpsional: 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 Google Cloud konsol, buka Key Management.
Klik + Buat 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 contoh deployment 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 Buat.
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 Run Functions
Dokumen ini mengasumsikan bahwa Anda akan menggunakan Cloud Shell. Jika menggunakan terminal yang berbeda, pastikan Anda memiliki Google Cloud CLI versi terbaru.
Di Google Cloud konsol, 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-tokenizerberisi fileindex.js, yang merupakan sumber untuk dua Cloud Run Functions yang berbeda yang akan Anda buat. Class ini juga berisipackage.json, yang memberi tahu Cloud Run 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.jsonRuntime Node.js mengharuskan Anda untuk secara eksplisit menentukan the Google Cloud project ID:
"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
httpsTriggerdalam output perintahgcloud functions deploy. Simpan nilai URL dalam variabel lingkunganTOK_URL:TOK_URL="TOK_URL"
Anda akan menggunakan variabel lingkungan
TOK_URLuntuk 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
httpsTriggerdalam output perintahgcloud functions deploy. Simpan nilai URL dalam variabel lingkunganDETOK_URL:DETOK_URL="DETOK_URL"
Anda akan menggunakan variabel lingkungan
DETOK_URLuntuk memanggil fungsi detokenize.Anda telah membuat dua Cloud Run 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 Run 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 izin cloudfunctions.functions.invoke. 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 Run 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=543210Buat 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_TOKENString 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.
Memperluas contoh 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 Run 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 Run 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
Agar akun Anda tidak dikenai biaya untuk resource yang digunakan dalam contoh deployment ini, Anda dapat menghapus project yang berisi resource tersebut. Google Cloud
- Di Google Cloud konsol, buka halaman Kelola resource.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah berikutnya
- Kepatuhan Standar Keamanan Data PCI.
- Menggunakan OAuth 2.0 untuk mengakses Google API
- Persyaratan PCI DSS.
- Tambahan Info Tokenization PCI DSS.
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.