Membuat token data pemegang kartu yang sensitif untuk PCI DSS

Last reviewed 2025-04-28 UTC

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.

arsitektur aplikasi tokenisasi

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.

Pengguna baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis. Google Cloud

Sebelum memulai

  1. Pastikan Anda memiliki peran IAM Project Creator (roles/resourcemanager.projectCreator). Pelajari cara memberikan peran.
  2. Di Google Cloud konsol, buka halaman pemilih project.

    Buka pemilih project

  3. Klik Create project.

  4. Beri nama project Anda. Catat project ID yang dibuat.

  5. Edit kolom lain sesuai kebutuhan.

  6. Klik Create.

  7. Pastikan penagihan diaktifkan untuk Google Cloud project Anda.

  8. 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 izin serviceusage.services.enable. Pelajari cara memberikan peran.

    Aktifkan API

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:

  1. Di Google Cloud konsol, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project Anda.

  3. Klik Buat akun layanan.

  4. Di kolom Nama akun layanan, masukkan Tokenization Service User. Konsol akan mengisi kolom ID akun layanan berdasarkan nama ini. Google Cloud

  5. Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi akun layanan.

  6. Klik Buat dan lanjutkan.

  7. Klik Select a role, lalu pilih Cloud KMS Encrypter/Decrypter.

  8. 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

  1. Di Google Cloud konsol, buka Key Management.

    Buka halaman Cryptographic Keys

  2. Klik + Buat key ring. Pada dialog yang muncul, lakukan hal berikut:

    1. Beri nama key ring tokenization-service-kr.
    2. 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.
    3. Periksa kembali pilihan Anda, karena Anda tidak dapat menghapus atau mengganti nama key ring setelah dibuat.
    4. Klik Buat.

    Sistem akan membuat key ring dan meneruskan Anda ke halaman pembuatan kunci.

  3. Pada dialog Create key, lakukan hal berikut:

    1. Beri nama kunci cc-tokenization.
    2. Untuk Tujuan, pilih Symmetric encrypt/decrypt.
    3. Tetapkan Periode rotasi ke nilai yang Anda pilih, lalu klik Buat.

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.

  1. Di Google Cloud konsol, buka Cloud Shell:

    Buka Cloud Shell

  2. 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 file index.js, yang merupakan sumber untuk dua Cloud Run Functions yang berbeda yang akan Anda buat. Class ini juga berisi package.json, yang memberi tahu Cloud Run Functions paket mana yang akan dijalankan.

  3. 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 the Google Cloud project ID:

    "project_id":              "YOUR_PROJECT_ID"
  4. Temukan konfigurasi KMS dan terapkan nilai KMS yang Anda buat di bagian sebelumnya:

    "location":                "global",
    "key_ring":                "tokenization-service-kr",
    "key_name":                "cc-tokenization"
    
  5. 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.

  6. Cari nilai URL di bagian httpsTrigger dalam output perintah gcloud functions deploy. Simpan nilai URL dalam variabel lingkungan TOK_URL:

    TOK_URL="TOK_URL"

    Anda akan menggunakan variabel lingkungan TOK_URL untuk memanggil fungsi tokenize.

  7. 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.

  8. Cari nilai URL di bagian httpsTrigger dalam output perintah gcloud functions deploy. Simpan nilai URL dalam variabel lingkungan DETOK_URL:

    DETOK_URL="DETOK_URL"

    Anda akan menggunakan variabel lingkungan DETOK_URL untuk 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.

  9. Setelah fungsi di-deploy, buka konsol Cloud Run Functions.

    Buka konsol Cloud Run Functions

  10. 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

  1. Buat beberapa contoh data untuk diteruskan ke tokenizer:

    export TOK_CC=4000300020001000
    export TOK_MM=11
    export TOK_YYYY=2028
    export TOK_UID=543210
    
  2. 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.

  3. 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

  1. Di Google Cloud konsol, buka halaman Kelola resource.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah berikutnya