Pub/Sub mengenkripsi pesan dengan kunci enkripsi yang dikelola Google secara default. Anda tidak perlu melakukan penyiapan atau konfigurasi dan tidak perlu mengubah cara mengakses layanan. Setiap pesan dienkripsi pada status dan lapisan berikut:
-
- Lapisan hardware
- Lapisan infrastruktur
- Lapisan aplikasi
Pada lapisan aplikasi, Pub/Sub mengenkripsi pesan masuk secara terpisah segera setelah pesan diterima. Implementasi ini menambahkan fitur berikut:
- Menjaga pesan tetap terenkripsi di link internal pusat data
- Mengaktifkan kunci enkripsi yang dikelola pelanggan (CMEK)
Menggunakan kunci enkripsi yang dikelola pelanggan
Pub/Sub menggunakan pola enkripsi envelope dengan CMEK. Dalam pendekatan ini, pesan tidak dienkripsi oleh Cloud KMS. Sebaliknya, Cloud KMS digunakan untuk mengenkripsi Kunci Enkripsi Data (DEK) yang dibuat oleh Pub/Sub untuk setiap topik. DEK ini hanya disimpan dalam format terenkripsi, atau digabungkan, yang dibuat oleh Pub/Sub. Sebelum menyimpan DEK, layanan akan mengirimkan DEK ke Cloud KMS untuk dienkripsi dengan kunci enkripsi kunci (KEK) yang ditentukan pada topik. DEK baru akan dibuat untuk setiap topik kira-kira setiap enam jam.
Sebelum memublikasikan pesan ke langganan, Pub/Sub akan mengenkripsi pesan tersebut menggunakan DEK terbaru yang dibuat untuk topik. Pub/Sub mendekripsi pesan sesaat sebelum pesan dikirim kepada pelanggan.
Pub/Sub menggunakan akun layanan Google Cloud untuk mengakses Cloud KMS. Akun layanan dikelola secara internal oleh Pub/Sub untuk setiap project, dan tidak akan terlihat dalam daftar akun layanan Anda. Akun layanan memiliki formulir service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
. Agar fitur CMEK berfungsi, Anda harus memberi akun ini peran Cloud KMS CryptoKey Encrypter/Decrypter dalam Identity and Access Management.
Mengonfigurasi topik
Anda dapat mengonfigurasi CMEK menggunakan Konsol Google Cloud atau alat command line gcloud. Untuk prasyarat, Anda harus memiliki:
- Membuat key ring dan kunci regional atau global di Cloud KMS telah dibuat. Kunci dan key ring tidak dapat dihapus.
- Cloud KMS API telah diaktifkan.
Lihat panduan memulai Cloud KMS untuk mendapatkan petunjuk tentang cara menyelesaikan tugas ini.
Karena resource Pub/Sub bersifat global, kami sangat menyarankan Anda menggunakan 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.
Menggunakan Konsol Google Cloud
Anda dapat menggunakan dialog pembuatan topik konsol Google Cloud untuk menambahkan kunci enkripsi. Lihat panduan memulai konsol Google Cloud untuk mengetahui informasi tentang cara mengakses dialog tersebut.
Konsol Google Cloud:
Menyederhanakan konfigurasi IAM sekaligus memastikan bahwa akun layanan Pub/Sub memiliki izin yang sesuai.
Memungkinkan Anda mengonfigurasi enkripsi dalam dialog pembuatan topik.
Menggunakan command line
Contoh ini menggambarkan cara menggunakan Google Cloud CLI untuk mengonfigurasi CMEK pada suatu topik:
# Grant the Pub/Sub service account the Cloud KMS CryptoKey # Encrypter/Decrypter role. This service account is different # from the service account you are using to authorize requests to Google Cloud. gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=\ "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \ --role='roles/cloudkms.cryptoKeyEncrypterDecrypter' # Create a topic that uses customer-managed encryption, using the # --topic-encryption-key argument to specify the Cloud KMS key to use # for protecting message data. KEY_ID=projects/${PROJECT_ID}/locations/global/keyRings/my-key-ring/cryptoKeys/my-crypto-key alias pubsub="gcloud pubsub" pubsub topics create $TOPIC_NAME --topic-encryption-key=$KEY_ID # Confirm that the topic is configured for customer-managed encryption, # indicated by the presence of the kmsKeyName specified on the topic. pubsub topics describe $TOPIC_NAME
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 pengiriman.
Kunci Cloud KMS dilampirkan ke log audit untuk resource topik Pub/Sub. Pub/Sub tidak menyertakan informasi lainnya terkait Cloud KMS.
Penetapan harga dan biaya
Untuk permintaan Pub/Sub berikut, penggunaan CMEK akan dikenai biaya untuk akses ke layanan Cloud KMS berdasarkan pricing Pub/Sub:
Untuk setiap topik yang menggunakan CMEK, DEK baru dienkripsi dan disimpan setiap enam jam.
Kunci tersebut digunakan untuk mendekripsi DEK setiap enam menit. Dekripsi terjadi tiga kali, sekali untuk setiap zona di region tempat layanan Pub/Sub dijalankan.
Misalnya, pertimbangkan topik dengan:
Minimal satu langganan
Klien penayang dan pelanggan di region yang sama
Jumlah operasi kriptografi 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 estimasi.
Memantau dan memecahkan masalah
Masalah terkait akses kunci dapat memiliki efek berikut:
Penundaan pengiriman pesan
Error publikasi
Pantau error publikasi dan permintaan pull menggunakan metrics 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%. Hal ini merupakan 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 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 tidak ada operasi yang menjamin pencabutan akses secara instan, perubahan IAM umumnya diterapkan lebih cepat. Untuk mempelajari lebih lanjut, lihat Konsistensi resource Cloud KMS dan Proagasi 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 berhenti. 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 berselang-seling yang berlangsung kurang dari satu menit untuk Cloud KMS kemungkinan tidak akan mengganggu publikasi dan penayangan secara signifikan, ketidaktersediaan Cloud KMS yang diperpanjang memiliki efek yang sama dengan pencabutan kunci.