Halaman ini menjelaskan cara kerja dukungan kunci enkripsi yang dikelola pelanggan (CMEK) di Pencadangan untuk GKE.
Ringkasan
Ada dua jenis artefak data pengguna yang dihasilkan dan disimpan melalui Pencadangan untuk GKE:
- Cadangan konfigurasi: sekumpulan deskripsi resource Kubernetes yang diekstrak dari server API cluster yang sedang melakukan pencadangan, yang merekam status cluster.
- Cadangan volume: sekumpulan cadangan volume yang sesuai dengan resource
PersistentVolumeClaim
yang ditemukan dalam cadangan konfigurasi.
Secara default, semua artefak cadangan yang dihasilkan melalui Pencadangan untuk GKE akan dienkripsi saat dalam penyimpanan menggunakan kunci yang disediakan oleh Google.
Namun, Anda dapat memilih untuk mengenkripsi artefak ini menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) yang dikelola melalui Cloud Key Management Service.
Mengaktifkan enkripsi CMEK
Terdapat dua langkah untuk mengaktifkan enkripsi CMEK:
Tentukan kunci untuk mengenkripsi cadangan yang dihasilkan untuk
BackupPlan
.Berikan akses ke kunci yang sesuai berdasarkan akun layanan yang sesuai.
Untuk skenario pencadangan tertentu, kemungkinan terdapat tiga kunci CMEK yang terlibat:
bplan_key
: Ini adalah kunci yang Anda referensikan saat membuat atau memperbaruiBackupPlan
. Jika memungkinkan, kunci ini akan digunakan saat mengenkripsi semua artefak cadangan. Kunci ini harus berada di region yang sama denganBackupPlan
itu sendiri (lihat Tentang lokasi resource).orig_disk_key
: Jika Anda telah mengenkripsi volume persistent disk menggunakan kunci CMEK, cadangan volume yang dihasilkan Pencadangan untuk GKE untuk volume tersebut akan dienkripsi dengan kunci ini, meskipun kunci lain didaftarkan denganBackupPlan
.new_disk_key
: Ini adalah kunci CMEK yang ingin Anda gunakan untuk mengenkripsi volume yang telah dipulihkan dari cadangan. Ini direferensikan olehStorageClass
di cluster target pemulihan.
Ada lima akun layanan berbeda yang mungkin memerlukan akses ke kunci CMEK:
agent_wi
: Jika Anda menjalankan versi Pratinjau agen (cluster GKE yang menjalankan versi 1.23 atau yang lebih rendah), akun layanan ini harus diberi akses kebplan_key
. Akun layanan ini akan memiliki format:PROJECT_ID.svc.id.goog[gkebackup/agent]
, denganPROJECT_ID
sebagai ID project Google Cloud Anda.agent_robot
: Jika (cluster GKE menjalankan versi 1.24 atau yang lebih tinggi, akun layanan ini harus diberi akses kebplan_key
. Akun layanan ini akan memiliki format:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
, denganPROJECT_NUMBER
sebagai nomor project Google Cloud Anda.non_cmek_service_agent
: Saat mencadangkan volume yang tidak dienkripsi CMEK, akun layanan ini harus diberi akses kebplan_key
. Akun layanan ini akan memiliki format:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com
, denganPROJECT_NUMBER
sebagai nomor project Google Cloud Anda.cmek_service_agent
: Saat mencadangkan volume yang dienkripsi CMEK, akun layanan ini harus diberi akses keorig_disk_key
. Akun layanan ini akan memiliki format:service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
, denganTENANT_PROJECT_NUMBER
adalah nomor project tenant yang ditetapkan untukBackupPlan
Anda.compute_service_agent
: Akun layanan ini digunakan saat membuat volume terenkripsi baru untuk cluster dan harus diberi akses kenew_disk_key
. Akun layanan ini akan memiliki format:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
, denganPROJECT_NUMBER
sebagai nomor project Google Cloud Anda.
Jika diskEncryptionKey.kmsKeyServiceAccount disetel untuk disk, Anda harus melakukan langkah-langkah berikut sebelum membuat cadangan:
Nonaktifkan kebijakan organisasi
iam.disableCrossProjectServiceAccountUsage
untuk mengaktifkan peniruan identitas akun layanan di seluruh project:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage --project=PROJECT_ID
Beri
cmek_service_agent
peranroles/iam.serviceAccountTokenCreator
untuk membuat kredensial berumur pendek:gcloud iam service-accounts add-iam-policy-binding \ # Replace the email with the value from # `diskEncryptionKey.kmsKeyServiceAccount` your-kms-key-service-acount@PROJECT_ID.iam.gserviceaccount.com \ --member=service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Tabel berikut merangkum akun layanan mana yang harus diberi akses ke kunci tertentu dalam berbagai skenario:
Artefak | Akun layanan | Kunci |
---|---|---|
cadangan konfigurasi, cluster 1.23- | agent_wi | bplan_key |
cadangan konfigurasi, cluster 1.24+ | agent_robot | bplan_key |
cadangan volume yang dienkripsi CMEK | cmek_service_agent | orig_disk_key |
cadangan volume yang dienkripsi google | non_cmek_service_agent | bplan_key |
volume terenkripsi CMEK baru yang dibuat selama pemulihan | compute_service_agent | new_disk_key |
Anda dapat memilih untuk memberikan akses ke kunci pada level project (memberikan akses ke semua kunci di bawah project tersebut) atau ke kunci individual.
Contoh: Memberikan akses level project
gcloud projects add-iam-policy-binding PROJECT_ID \
--member serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter
Contoh: Memberikan akses tingkat kunci
gcloud kms keys add-iam-policy-binding key \
--keyring key-ring \
--location location \
--member "serviceAccount:PROJECT_ID.svc.id.goog[gkebackup/agent]" \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter
Pertimbangan dan batasan penggunaan
Jika ingin mencadangkan volume yang dienkripsi CMEK, Anda harus memberikan akses ke kunci disk tersebut, meskipun Anda tidak mengaktifkan enkripsi CMEK di
BackupPlan
.Kunci CMEK harus berada di region yang sama dengan
BackupPlan
untuk memastikan pemadaman layanan regional tidak akan menghapus akses ke kunci saat cadangan masih dapat diakses. Namun, batasan ini tidak dapat diterapkan untuk kunci yang dibagikan dengan volume terenkripsi. Ketika volume terenkripsi terlibat, ada kemungkinan pemulihan dapat gagal meskipun cadangan tersedia, karena kunci enkripsi disk mungkin tidak disimpan di region yang sama dengan cadangan.