Mengonfigurasi enkripsi pesan

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:

Pada lapisan aplikasi, Pub/Sub mengenkripsi pesan masuk secara terpisah segera setelah pesan diterima. Implementasi ini menambahkan fitur berikut:

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:

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.

Jika menu dropdown Pilih kunci yang dikelola pelanggan tidak muncul, pastikan Anda telah mengaktifkan KMS API untuk project 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
Mengingat struktur harga yang operasi kriptografinya memiliki biaya $0,03 per 10.000 operasi, penggunaan di atas akan berharga sekitar $0,07. Lihat Harga Cloud KMS untuk mengetahui informasi harga terbaru.

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.

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.