Dokumen ini membahas cara mengonfigurasi kunci enkripsi yang dikelola pelanggan (CMEK) untuk cluster Google Cloud Managed Service for Apache Kafka.
Managed Service for Apache Kafka mengenkripsi pesan saat tidak digunakan 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 dalam penyimpanan Managed Service for Apache Kafka, Anda dapat menggunakan CMEK.
Saat Anda mengonfigurasi cluster Managed Service for Apache Kafka dengan CMEK, layanan akan otomatis mengenkripsi semua data cluster dalam penyimpanan menggunakan kunci yang ditentukan. Penggunaan Cloud KMS untuk CMEK dapat menimbulkan biaya tambahan, bergantung pada pola penggunaan Anda.
CMEK yang terkait dengan cluster Managed Service for Apache Kafka adalah kunci enkripsi kunci (KEK). KEK digunakan untuk mengenkripsi kunci enkripsi data (DEK). DEK kemudian digunakan untuk membaca dan menulis data dalam penyimpanan tidak aktif di persistent disk yang terpasang ke broker dan data dalam penyimpanan bertingkat di Cloud Storage.
Untuk mengetahui informasi selengkapnya tentang enkripsi disk, lihat Tentang enkripsi disk. Untuk mengetahui informasi selengkapnya tentang enkripsi di Cloud Storage, lihat Kunci enkripsi yang dikelola pelanggan dalam dokumentasi Cloud Storage.
Merotasi kunci
Anda dapat merotasi kunci dengan membuat versi kunci baru dan menetapkannya sebagai versi utama untuk kunci.
Untuk disk yang terpasang ke broker, KEK baru hanya akan berlaku setelah broker dimulai ulang. Anda dapat memaksa memulai ulang broker secara bertahap dengan memperbarui konfigurasi kapasitas cluster. Misalnya, Anda dapat mengubah jumlah RAM cluster.
Semua file segmen partisi baru ditulis ke penyimpanan bertingkat menggunakan versi kunci utama baru. Penundaan selama beberapa menit dapat terjadi setelah versi kunci utama baru dipilih.
Mengonfigurasi cluster Managed Service for Apache Kafka untuk CMEK
Anda dapat mengonfigurasi CMEK untuk cluster Managed Service for Apache Kafka menggunakan KonsolGoogle Cloud atau Google Cloud CLI.
Sebelum memulai
Selesaikan tugas-tugas berikut:
Aktifkan Cloud KMS API.
Buat key ring dan kunci di Cloud KMS. Kunci dan key ring tidak dapat dihapus. Karena resource Managed Service untuk Apache Kafka bersifat regional, sebaiknya buat CMEK di region yang sama dengan lokasi cluster Kafka.
Untuk mengetahui petunjuk cara menyelesaikan tugas ini, lihat panduan memulai Cloud KMS.
Peran dan izin yang diperlukan untuk mengonfigurasi CMEK
Managed Service for Apache Kafka menggunakan Google Cloud agen layanan untuk mengakses Cloud KMS. Agen layanan untuk project Google Cloud Anda akan otomatis dibuat setelah Anda membuat cluster Managed Service for Apache Kafka pertama.
Agen layanan dikelola secara internal oleh Managed Service for Apache Kafka untuk setiap project, dan tidak terlihat di halaman Service Accounts di konsol Google Cloud secara default.
Agen layanan Managed Service for Apache Kafka memiliki bentuk
service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com.
Managed Service untuk Apache Kafka memerlukan izin tertentu untuk mengenkripsi dan mendekripsi data menggunakan CMEK.
Selesaikan langkah-langkah berikut untuk menyiapkan akses yang diperlukan:
Opsional: Buat agen layanan Managed Service for Apache Kafka secara manual menggunakan perintah gcloud beta services identity create.
Jika sebelumnya Anda telah membuat cluster di project, agen layanan Managed Service for Apache Kafka sudah dibuat di project Anda dan Anda dapat melewati langkah ini.
gcloud beta services identity create \ --service=managedkafka.googleapis.com \ --project=PROJECT_IDGanti PROJECT_ID dengan project ID Anda.
Berikan peran Cloud KMS Crypto Key Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter) kepada agen layanan Managed Service for Apache Kafka.gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterGanti kode berikut:
CLOUD_KMS_KEY_NAME: Nama kunci Cloud KMS.
Kuncinya 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 Managed Service for Apache Kafka.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran IAM, lihat Memberikan peran pada resource.
Membuat cluster dengan CMEK
Anda dapat menggunakan konsol Google Cloud atau gcloud CLI untuk menambahkan kunci enkripsi saat membuat cluster Kafka.
Enable the Apache Kafka for BigQuery, Compute Engine, Cloud DNS, and Cloud KMS APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
Sebelum membuat cluster, tinjau dokumentasi properti cluster.
Untuk membuat cluster dengan CMEK, ikuti langkah-langkah berikut:
Konsol
-
Di konsol Google Cloud , buka halaman Clusters.
- Pilih Create.
Halaman Create Kafka cluster akan terbuka.
- Untuk Cluster name, masukkan string.
Untuk mengetahui informasi selengkapnya tentang cara memberi nama cluster, lihat Panduan untuk memberi nama resource Managed Service for Apache Kafka.
- Untuk Location, masukkan lokasi yang didukung.
Untuk mengetahui informasi selengkapnya tentang lokasi yang didukung, lihat Lokasi Managed Service for Apache Kafka yang didukung.
- Untuk Konfigurasi kapasitas, masukkan nilai untuk Memori
dan vCPU.
Rasio vCPU terhadap memori harus antara 1:1 dan 1:8.
Untuk mengetahui informasi selengkapnya tentang cara menentukan ukuran cluster Managed Service for Apache Kafka, lihat Merencanakan ukuran cluster Kafka.
- Untuk Network configuration, masukkan detail berikut:
- Project: Project tempat subnetwork berada. Subnet harus berada di region yang sama dengan cluster, tetapi projectnya mungkin berbeda.
- Network: Jaringan tempat subnet terhubung.
- Subnetwork: Nama subnet.
- Jalur URI subnet: Kolom ini diisi secara
otomatis. Atau, Anda dapat memasukkan jalur subnet di sini. Nama
subnet harus dalam format:
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID. - Klik Done.
- (Opsional) Tambahkan subnet tambahan dengan mengklik Tambahkan subnet
yang terhubung.
Anda dapat menambahkan subnet tambahan, hingga nilai maksimum sepuluh.
- Untuk Encryption, pilih Cloud KMS key.
- Untuk Key type, pilih Cloud KMS dan untuk Select a customer-managed key, masukkan CMEK yang Anda buat.
- Klik Create.
gcloud
Jalankan perintah
gcloud managed-kafka clusters create:gcloud managed-kafka clusters create CLUSTER_ID \ --location=LOCATION \ --cpu=CPU \ --memory=MEMORY \ --subnets=SUBNETS \ --encryption-key=CLOUD_KMS_KEY \
Ganti kode berikut:
-
CLUSTER_ID: ID atau nama cluster.
Untuk mengetahui informasi selengkapnya tentang cara memberi nama cluster, lihat Panduan untuk memberi nama resource Managed Service for Apache Kafka.
-
LOCATION: Lokasi cluster.
Untuk mengetahui informasi selengkapnya tentang lokasi yang didukung, lihat Lokasi Managed Service for Apache Kafka yang didukung.
-
CPU: Jumlah CPU virtual untuk cluster. Rasio vCPU terhadap memori harus antara 1:1 dan 1:8.
Untuk mengetahui informasi selengkapnya tentang cara menentukan ukuran cluster Managed Service for Apache Kafka, lihat Merencanakan ukuran cluster Kafka Anda.
-
MEMORY: Jumlah memori untuk cluster. Gunakan satuan "MB", "MiB", "GB", "GiB", "TB", atau "TiB". Misalnya, "10 GiB".
-
SUBNETS: Daftar subnet yang akan dihubungkan. Gunakan koma untuk memisahkan beberapa nilai subnet.
Format subnet adalah
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID. -
ENCRYPTION_KEY: ID CMEK yang akan digunakan untuk cluster.
Formatnya adalah
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.
-
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.
Konfirmasi pembuatan cluster
Konfirmasi bahwa cluster dikonfigurasi untuk CMEK, dengan menjalankan perintah gcloud managed-kafka clusters describe.
gcloud managed-kafka clusters describe CLUSTER_ID \
--location=LOCATION
Output mencakup CMEK yang dikonfigurasi.
Log audit
Cloud KMS membuat log audit saat kunci diaktifkan, dinonaktifkan, atau digunakan oleh Managed Service for Apache Kafka untuk mengenkripsi dan mendekripsi pesan. Hal ini berguna dalam men-debug masalah terkait ketersediaan publikasi atau penayangan.
ID kunci Cloud KMS dilampirkan ke log audit untuk resource cluster Managed Service for Apache Kafka. Managed Service for Apache Kafka tidak menyertakan informasi terkait Cloud KMS lainnya dalam log audit.
Menonaktifkan dan mengaktifkan kembali CMEK
Ada dua cara untuk menonaktifkan CMEK. Pilih salah satu metode berikut:
Nonaktifkan kunci Cloud KMS yang telah Anda kaitkan dengan cluster. Pendekatan ini memengaruhi semua resource Cloud yang terkait dengan kunci tersebut.
Mencabut peran CryptoKey Encrypter/Decrypter dari agen layanan Managed Service for Apache Kafka (
service-${PROJECT_NUMBER}@gcp-sa-managedkafka.iam.gserviceaccount.com) dengan menggunakan Identity and Access Management (IAM). Pendekatan ini memengaruhi semua cluster Managed Service for Apache Kafka dalam project dan pesan yang dienkripsi menggunakan CMEK.
Meskipun kedua operasi tidak menyebabkan pencabutan akses secara instan, perubahan IAM umumnya diterapkan lebih cepat.
Untuk mengetahui informasi selengkapnya, lihat Konsistensi resource Cloud KMS dan Penerapan perubahan akses.
Jika Managed Service for Apache Kafka tidak dapat mengakses kunci Cloud KMS, penerbitan dan pengiriman pesan akan gagal dengan error. Untuk melanjutkan penayangan dan publikasi, pulihkan akses ke kunci Cloud KMS.
Setelah kunci Cloud KMS dapat diakses oleh Managed Service for Apache Kafka, publikasi akan tersedia dalam waktu 12 jam dan pengiriman pesan akan dilanjutkan dalam waktu 2 jam.
Meskipun gangguan Cloud KMS sesekali yang berlangsung kurang dari satu menit tidak mungkin mengganggu publikasi dan penayangan secara signifikan, ketidaktersediaan Cloud KMS yang berkepanjangan memiliki efek yang sama dengan pencabutan kunci.
Batasan
Asosiasi antara kunci Cloud KMS dan cluster Managed Service for Apache Kafka tidak dapat diubah. Anda tidak dapat mengubah kunci yang terkait dengan cluster. Sebagai gantinya, Anda dapat merotasi kunci dengan membuat versi baru.
Jika Anda menonaktifkan versi kunci non-primer, disk lokal akan terus berfungsi tanpa perubahan. Setiap broker mendownload KEK baru saat dimulai ulang. Namun, Cloud Storage tidak dapat mengakses file segmen topik yang dienkripsi menggunakan versi asli, yang dapat membuat pesan dari file segmen ini tidak dapat digunakan. Artinya, Anda mungkin tidak dapat menggunakan data lama.
Jika Anda menonaktifkan versi utama kunci, broker tidak dapat menulis file segmen baru ke penyimpanan bertingkat, yang meningkatkan penggunaan disk lokal. Selain itu, broker akan gagal dimulai ulang. Mulai ulang dapat dipicu baik secara proaktif oleh Anda atau pembaruan yang dimulai layanan ke cluster kapan saja.
Jika Anda menghapus akses ke kunci dari agen layanan Managed Service for Apache Kafka, perilakunya mirip dengan yang terjadi jika Anda menonaktifkan versi kunci utama dan kunci non-utama.
Jika Anda menghapus kunci, cluster akan dijadwalkan untuk dimatikan dan tidak dapat dipulihkan.
Anda tidak dapat meminta enkripsi ulang data yang disimpan saat tidak digunakan. CMEK digunakan sebagai KEK, tetapi mengenkripsi ulang memerlukan perubahan pada kunci enkripsi data.