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 oleh 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 oleh 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 dengan 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 empat akun layanan berbeda yang mungkin memerlukan akses ke kunci CMEK:
agent_robot
: 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 ditetapkan untuk disk, Anda harus melakukan langkah-langkah berikut sebelum membuat cadangan:
Nonaktifkan kebijakan organisasi
iam.disableCrossProjectServiceAccountUsage
untuk mengaktifkan peniruan akun layanan di seluruh project:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage --project=PROJECT_ID
Berikan peran
roles/iam.serviceAccountTokenCreator
kecmek_service_agent
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 |
---|---|---|
cluster cadangan konfigurasi | 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, yang memberikan akses ke semua kunci dalam project tersebut, atau ke kunci individual.
Memberikan akses level project
Anda dapat memberikan akses ke kunci pada tingkat project, yang memberikan akses ke semua kunci dalam project tersebut.
Gunakan petunjuk berikut untuk memberikan akses di tingkat project.
Konsol
Di Konsol Google Cloud, buka halaman IAM.
Klik Grant access.
Di kolom New principals, masukkan alamat email akun layanan.
Dari daftar Pilih peran, pilih peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS.
Klik Simpan.
gcloud
Berikan akses di tingkat project.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Ganti kode berikut:
PROJECT_ID
: ID project yang aksesnya ingin Anda berikan.PROJECT_NUMBER
: nomor project yang aksesnya ingin Anda berikan.
Terraform
Berikan akses di tingkat project.
resource "google_project_iam_member" "example_iam_member" { project = "PROJECT_ID" role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" member = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" }
Ganti kode berikut:
PROJECT_ID
: ID project yang aksesnya ingin Anda berikan.PROJECT_NUMBER
: nomor project yang aksesnya ingin Anda berikan.
Memberikan akses di tingkat kunci
Gunakan petunjuk berikut untuk memberikan akses di tingkat kunci individual.
Konsol
Di konsol Google Cloud, buka halaman Key management.
Klik nama key ring.
Klik nama kunci.
Klik tab Izin.
Klik Grant access.
Di kolom New principals, masukkan alamat email akun layanan.
Dari daftar Pilih peran, pilih peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS.
Klik Simpan.
gcloud
Memberikan akses di tingkat kunci individual.
gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Ganti kode berikut:
KEY_NAME
: nama kunci.KEY_RING
: nama key ring yang berisi kunci.LOCATION
: lokasi Cloud KMS key ring.PROJECT_NUMBER
: nomor project yang aksesnya ingin Anda berikan.
Terraform
Memberikan akses di tingkat kunci individual.
resource "google_kms_crypto_key_iam_member" "crypto_key_iam_member" { crypto_key_id = "projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME" role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" member = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" }
Ganti kode berikut:
PROJECT_ID
: ID project yang aksesnya ingin Anda berikan.LOCATION
: lokasi Cloud KMS key ring.KEY_RING
: nama key ring yang berisi kunci.KEY_NAME
: nama kunci.PROJECT_NUMBER
: nomor project yang aksesnya ingin Anda berikan.
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.
Menggunakan dan mengelola kunci eksternal
Anda dapat menggunakan Cloud External Key Manager (Cloud EKM) untuk membuat dan mengelola kunci eksternal. Kunci eksternal adalah pointer ke kunci yang berada di luar Google Cloud. Kunci ini berada di partner pengelolaan kunci enkripsi eksternal yang didukung. Untuk informasi selengkapnya, lihat Cloud External Key Manager.
Setelah membuat kunci eksternal dengan Cloud EKM, Anda dapat menerapkannya ke rencana cadangan baru dengan memberikan ID kunci tersebut saat membuat rencana cadangan baru. Prosedur ini sama dengan menerapkan kunci Cloud KMS ke rencana pencadangan baru.
Anda dapat menggunakan Key Access Justifications sebagai bagian dari Cloud EKM. Key Access Justifications memungkinkan Anda melihat alasan setiap permintaan Cloud EKM. Selain itu, berdasarkan justifikasi yang diberikan, Anda dapat otomatis menyetujui atau menolak permintaan. Untuk mengetahui informasi selengkapnya, lihat Ringkasan.