Dokumen ini membahas cara mengonfigurasi kunci enkripsi yang dikelola pelanggan (CMEK) untuk Pub/Sub.
Pub/Sub mengenkripsi pesan dengan Google-owned and Google-managed encryption keys secara default. Tidak diperlukan penyiapan tambahan untuk menggunakan Google-owned and Google-managed encryption keys.
Tentang CMEK
CMEK adalah kunci enkripsi yang Anda miliki serta dikelola dan disimpan di Cloud Key Management Service (Cloud KMS). Jika memerlukan kontrol lebih besar atas kunci enkripsi yang digunakan untuk melindungi data Pub/Sub, Anda dapat menggunakan CMEK. Beberapa organisasi juga mewajibkan penggunaan CMEK.
CMEK memberi Anda kontrol penuh atas kunci enkripsi, sehingga Anda dapat mengelola siklus proses, rotasi, dan kebijakan aksesnya. Saat Anda mengonfigurasi Pub/Sub dengan CMEK, layanan akan otomatis mengenkripsi semua data menggunakan kunci yang ditentukan. Penggunaan Cloud KMS untuk CMEK dapat menimbulkan biaya tambahan, bergantung pada pola penggunaan Anda.
Setiap pesan dienkripsi pada status dan lapisan berikut:
-
- Lapisan hardware
- Lapisan infrastruktur
- Lapisan aplikasi
Di lapisan aplikasi, Pub/Sub mengenkripsi setiap pesan masuk segera setelah pesan diterima. Penerapan ini menambahkan fitur berikut:
- Memastikan pesan tetap terenkripsi di link internal pusat data
- Mengaktifkan kunci enkripsi yang dikelola pelanggan (CMEK)
CMEK untuk Pub/Sub
Pub/Sub menggunakan pola enkripsi amplop dengan CMEK. Dalam pendekatan ini, pesan tidak dienkripsi oleh Cloud KMS. Sebagai gantinya, Cloud KMS digunakan untuk mengenkripsi Kunci Enkripsi Data (DEK) yang dibuat oleh Pub/Sub untuk setiap topik. DEK ini disimpan hanya dalam bentuk terenkripsi atau gabungan oleh Pub/Sub. Sebelum menyimpan DEK, layanan mengirimkan DEK ke Cloud KMS untuk dienkripsi dengan kunci enkripsi kunci (KEK) yang ditentukan di topik. DEK baru dibuat untuk setiap topik kira-kira setiap enam jam.
Sebelum memublikasikan pesan ke langganan, Pub/Sub mengenkripsinya menggunakan DEK terbaru yang dibuat untuk topik tersebut. Pub/Sub mendekripsi pesan sesaat sebelum dikirim ke pelanggan.
Sebelum memulai
Anda dapat mengonfigurasi CMEK untuk Pub/Sub menggunakan konsolGoogle Cloud atau Google Cloud CLI.
Selesaikan tugas-tugas berikut:
Aktifkan Cloud KMS API.
Buat key ring dan kunci di Cloud KMS. Kunci dan key ring tidak dapat dihapus.
Untuk mengetahui petunjuk tentang cara menyelesaikan tugas ini, lihat panduan memulai Cloud KMS.
Karena resource Pub/Sub bersifat global, sebaiknya gunakan kunci Cloud KMS global untuk mengonfigurasi topik yang mendukung CMEK. Bergantung pada lokasi penerbit dan pelanggan topik, penggunaan kunci Cloud KMS regional dapat menimbulkan dependensi yang tidak perlu pada link jaringan lintas region.
Peran dan izin yang diperlukan untuk mengonfigurasi CMEK
Pub/Sub menggunakan Google Cloud agen layanan untuk mengakses Cloud KMS. Agen layanan dikelola secara internal oleh Pub/Sub untuk setiap project, dan tidak terlihat di halaman Service Accounts di konsol Google Cloud secara default.
Agen layanan Pub/Sub memiliki format
service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
.
Pub/Sub memerlukan izin khusus untuk mengenkripsi dan mendekripsi data menggunakan CMEK.
Selesaikan langkah-langkah berikut untuk menyiapkan akses yang diperlukan:
Berikan peran Cloud KMS Crypto Key Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) kepada agen layanan Pub/Sub.gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
Ganti kode berikut:
CLOUD_KMS_KEY_NAME: Nama kunci Cloud KMS.
Kunci memiliki format
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
.Contohnya adalah
projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key
.PROJECT_NUMBER: Nomor project untuk project Pub/Sub.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran IAM, lihat Memberikan peran pada resource.
Mengonfigurasi topik dengan CMEK
Anda dapat mengonfigurasi CMEK untuk topik menggunakan konsol Google Cloud atau gcloud CLI.
Konsol
Untuk membuat topik dengan CMEK, ikuti langkah-langkah berikut:
Di konsol Google Cloud , buka halaman Topics Pub/Sub.
Klik Create topic.
Di kolom Topic ID, masukkan ID untuk topik Anda.
Untuk mengetahui informasi selengkapnya tentang penamaan topik, lihat panduan penamaan.
Untuk Encryption, klik Cloud KMS key.
Pilih jenis kunci. Jika Anda tidak melihat dropdown Pilih kunci yang dikelola pelanggan, pastikan Anda telah mengaktifkan Cloud KMS API untuk project.
Klik Create topic.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
Untuk membuat topik dengan CMEK, jalankan perintah
gcloud pubsub topics create
:gcloud pubsub topics create TOPIC_ID --topic-encryption-key=ENCRYPTION_KEY
Ganti kode berikut:
-
TOPIC_ID: ID atau nama topik.
Untuk mengetahui informasi selengkapnya tentang cara memberi nama topik, lihat Panduan untuk memberi nama topik, langganan, skema, atau snapshot.
-
ENCRYPTION_KEY: ID CMEK yang akan digunakan untuk topik.
Formatnya adalah
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
.
-
Memperbarui CMEK untuk topik
Anda memiliki fleksibilitas untuk mengubah CMEK yang ditautkan ke topik Pub/Sub. Anda dapat menggunakan gcloud CLI untuk mengupdate CMEK. Namun, perubahan ini tidak berlaku surut.
Pesan yang dipublikasikan ke topik sebelum kunci berubah tetap dienkripsi dengan kunci asli. Jika topik dibuat tanpa CMEK, Anda dapat menambahkan CMEK nanti. Pesan yang ada akan terus dilindungi dengan Google-owned and Google-managed encryption keysdefault. Mengubah CMEK topik tidak akan mengenkripsi ulang pesan yang dipublikasikan sebelumnya. Pesan ini akan tetap dilindungi dengan kunci yang digunakan untuk mengenkripsinya.
Pub/Sub memiliki mekanisme penyimpanan cache untuk kunci yang berlangsung sekitar 5 menit. Pub/Sub mungkin memerlukan waktu hingga durasi ini untuk mengenali dan mulai menggunakan versi kunci baru.
Log audit
Cloud KMS menghasilkan log audit saat kunci diaktifkan, dinonaktifkan, atau digunakan oleh Pub/Sub untuk mengenkripsi dan mendekripsi pesan. Hal ini berguna dalam men-debug masalah terkait ketersediaan publikasi atau penayangan.
Kunci Cloud KMS dilampirkan ke log audit untuk resource topik Pub/Sub. Pub/Sub tidak mencakup informasi terkait Cloud KMS lainnya.
Harga dan biaya
Untuk permintaan Pub/Sub berikut, penggunaan CMEK menimbulkan biaya untuk akses ke layanan Cloud KMS berdasarkan harga Pub/Sub:
Untuk setiap topik yang menggunakan CMEK, DEK baru dienkripsi dan disimpan setiap enam jam.
Kunci ini digunakan untuk mendekripsi DEK setiap enam menit. Dekripsi terjadi tiga kali, sekali untuk setiap zona di region tempat layanan Pub/Sub berjalan.
Misalnya, pertimbangkan topik dengan:
Minimal satu langganan
Klien penayang dan pelanggan di region yang sama
Jumlah operasi kriptografis Cloud KMS dapat diperkirakan sebagai:
1 key access for ENCRYPT * (30 days / month * 24 hours / day) / 6 hours + 3 key accesses for DECRYPT * (30 days / month * 24 hours / day * 60 minutes / hour ) / 6 minutes = 21,720 Cloud KMS key access events
Dalam praktiknya, kunci dapat diambil lebih sering atau lebih jarang, bergantung pada pola akses. Gunakan angka ini hanya sebagai perkiraan.
Memantau dan memecahkan masalah
Masalah pada akses kunci dapat menimbulkan efek berikut:
Penundaan pengiriman pesan
Error publikasi
Pantau error permintaan penarikan dan publikasi menggunakan metrik berikut, yang dikelompokkan menurut response_class
dan response_code
:
topic/send_request_count
subscription/pull_request_count
subscription/streaming_pull_response_count
Respons StreamingPull memiliki rasio error 100%. Ini adalah indikasi bahwa streaming telah berakhir, bukan bahwa permintaan
gagal. Untuk memantau StreamingPull, cari kode respons FAILED_PRECONDITION
.
Publikasi dan pengiriman pesan dapat gagal dengan error FAILED_PRECONDITION
karena berbagai alasan.
Kunci Cloud KMS mungkin dinonaktifkan. Untuk mengetahui detailnya, lihat Menonaktifkan dan mengaktifkan kembali kunci di halaman ini.
Jika Anda menggunakan kunci yang dikelola secara eksternal melalui Cloud EKM, lihat referensi error Cloud EKM.
Untuk langganan push, tidak ada cara untuk mendeteksi masalah pengiriman khusus CMEK secara langsung. Sebagai gantinya:
Pantau ukuran dan usia backlog langganan push menggunakan
subscription/num_unacked_messages
.Pantau
subscription/oldest_unacked_message_age
untuk mendeteksi lonjakan yang tidak biasa.Gunakan error publikasi dan log audit CMEK untuk menemukan masalah.
Menonaktifkan dan mengaktifkan kembali kunci
Ada dua cara untuk mencegah Pub/Sub mendekripsi data pesan Anda:
Direkomendasikan: Nonaktifkan kunci Cloud KMS yang telah Anda kaitkan dengan topik menggunakan Pub/Sub. Pendekatan ini hanya memengaruhi topik dan langganan Pub/Sub yang terkait dengan kunci tertentu tersebut.
Cabut peran Pub/Sub CryptoKey Encrypter/Decrypter dari akun layanan Pub/Sub (
service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
) menggunakan IAM. Pendekatan ini memengaruhi semua topik Pub/Sub project dan langganan yang berisi pesan yang dienkripsi menggunakan CMEK.
Meskipun kedua operasi tidak mengonfirmasi pencabutan akses secara instan, perubahan IAM umumnya diterapkan lebih cepat. Untuk mempelajari lebih lanjut, lihat Konsistensi resource Cloud KMS dan Penerapan perubahan akses.
Jika Pub/Sub tidak dapat mengakses kunci Cloud KMS, penerbitan dan pengiriman pesan dengan StreamingPull atau pull akan gagal dengan error FAILED_PRECONDITION
. Pengiriman pesan ke endpoint push akan dihentikan. Untuk
melanjutkan penayangan dan publikasi,
pulihkan akses ke
kunci Cloud KMS.
Setelah kunci Cloud KMS dapat diakses oleh Pub/Sub, publikasi akan tersedia dalam waktu 12 jam dan pengiriman pesan akan dilanjutkan dalam waktu 2 jam.
Meskipun gangguan sesekali yang kurang dari satu menit untuk Cloud KMS tidak mungkin mengganggu publikasi dan pengiriman secara signifikan, ketidaktersediaan Cloud KMS yang berkepanjangan memiliki efek yang sama dengan pencabutan kunci.