Dokumen ini membahas cara mengonfigurasi kunci enkripsi yang dikelola pelanggan (CMEK) untuk Pub/Sub.
Pub/Sub mengenkripsi pesan dengan kunci milik dan dikelola Google secara default. Tidak diperlukan penyiapan tambahan untuk menggunakan kunci enkripsi yang dikelola Google.
Tentang CMEK
CMEK adalah kunci enkripsi yang Anda miliki dan dikelola serta 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 untukCMEK 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 pesan masuk satu per satu begitu pesan diterima. Penerapan ini menambahkan fitur berikut:
- Menjaga pesan tetap dienkripsi 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 hanya disimpan dalam bentuk terenkripsi atau digabungkan oleh Pub/Sub. Sebelum menyimpan DEK, layanan akan mengirimkan DEK ke Cloud KMS untuk dienkripsi dengan kunci enkripsi kunci (KEK) yang ditentukan dalam topik. DEK baru dibuat untuk setiap topik kira-kira setiap enam jam.
Sebelum memublikasikan pesan ke langganan, Pub/Sub akan mengenkripsinya menggunakan DEK terbaru yang dihasilkan untuk topik. Pub/Sub mendekripsi pesan sesaat sebelum dikirim ke pelanggan.
Sebelum memulai
Anda dapat mengonfigurasi CMEK untuk Pub/Sub menggunakan Konsol Google Cloud atau Google Cloud CLI.
Selesaikan tugas berikut:
Aktifkan Cloud KMS API.
Buat key ring dan kunci di Cloud KMS. Kunci dan key ring tidak dapat dihapus.
Untuk petunjuk tentang cara menyelesaikan tugas ini, lihat panduan memulai cepat Cloud KMS.
Karena resource Pub/Sub bersifat global, sebaiknya Anda menggunakan kunci Cloud KMS global untuk mengonfigurasi topik yang mengaktifkan CMEK. Bergantung pada lokasi penayang dan pelanggan topik, penggunaan kunci Cloud KMS regional dapat menyebabkan dependensi yang tidak perlu pada link jaringan lintas region.
Peran dan izin yang diperlukan untuk mengonfigurasi CMEK
Pub/Sub menggunakan agen layanan Google Cloud untuk mengakses Cloud KMS. Agen layanan dikelola secara internal oleh Pub/Sub untuk setiap project, dan tidak terlihat di halaman Akun Layanan di konsol Google Cloud secara default.
Agen layanan Pub/Sub memiliki bentuk
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 Pengenkripsi/Pendekripsi Kunci Enkripsi Cloud KMS (
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 ID Topik, masukkan ID untuk topik Anda.
Untuk informasi selengkapnya tentang penamaan topik, lihat panduan penamaan.
Untuk Encryption, klik Cloud KMS key.
Pilih jenis kunci. Jika Anda tidak melihat dropdown Select a customer-managed key, 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 menambahkannya nanti. Pesan yang ada akan terus dilindungi dengan enkripsi default yang dikelola Google. Mengubah CMEK topik tidak mengenkripsi ulang pesan yang dipublikasikan sebelumnya. Pesan ini akan terus dilindungi dengan kunci yang digunakan untuk mengenkripsinya.
Pub/Sub memiliki mekanisme penyimpanan cache untuk kunci yang berlangsung sekitar 5 menit. Mungkin perlu waktu hingga durasi ini agar Pub/Sub 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 menyertakan informasi terkait Cloud KMS lainnya.
Harga dan biaya
Untuk permintaan Pub/Sub berikut, penggunaan CMEK akan dikenai 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, satu kali 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 mungkin diambil lebih sering atau lebih jarang, bergantung pada pola akses. Gunakan angka ini hanya sebagai perkiraan.
Memantau dan memecahkan masalah
Masalah terkait akses kunci dapat menimbulkan efek berikut:
Penundaan pengiriman pesan
Error publikasi
Pantau error permintaan publikasi dan pull 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
beberapa alasan.
Kunci Cloud KMS dapat 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 menemukan 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 tersebut 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, publikasi dan pengiriman pesan dengan StreamingPull atau pull akan gagal dengan error FAILED_PRECONDITION
. Pengiriman pesan ke endpoint push akan dihentikan. Untuk melanjutkan pengiriman 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 pemadaman layanan yang terputus-putus 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.