Mengonfigurasi enkripsi pesan

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:

Di lapisan aplikasi, Pub/Sub mengenkripsi pesan masuk satu per satu begitu pesan diterima. Penerapan ini menambahkan fitur berikut:

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:

  1. Di konsol Google Cloud, buka halaman Topics Pub/Sub.

    Buka Topik

  2. Klik Create topic.

  3. Di kolom ID Topik, masukkan ID untuk topik Anda.

    Untuk informasi selengkapnya tentang penamaan topik, lihat panduan penamaan.

  4. Untuk Encryption, klik Cloud KMS key.

  5. Pilih jenis kunci. Jika Anda tidak melihat dropdown Select a customer-managed key, pastikan Anda telah mengaktifkan Cloud KMS API untuk project.

  6. Klik Create topic.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 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
Mengingat struktur harga yang menetapkan biaya operasi kriptografis sebesar $0,03 per 10.000 operasi, penggunaan di atas akan dikenai biaya 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 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.

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.