Tentang enkripsi CMEK Pencadangan untuk GKE


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 memperbarui BackupPlan. Jika memungkinkan, kunci ini akan digunakan saat mengenkripsi semua artefak cadangan. Kunci ini harus berada di region yang sama dengan BackupPlan 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 dengan BackupPlan.

  • new_disk_key: Ini adalah kunci CMEK yang ingin Anda gunakan untuk mengenkripsi volume yang telah dipulihkan dari cadangan. Ini direferensikan oleh StorageClass 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 ke bplan_key. Akun layanan ini akan memiliki format: PROJECT_ID.svc.id.goog[gkebackup/agent], dengan PROJECT_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 ke bplan_key. Akun layanan ini akan memiliki format: service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com, dengan PROJECT_NUMBER sebagai nomor project Google Cloud Anda.

  • non_cmek_service_agent: Saat mencadangkan volume yang tidak dienkripsi CMEK, akun layanan ini harus diberi akses ke bplan_key. Akun layanan ini akan memiliki format: service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com, dengan PROJECT_NUMBER sebagai nomor project Google Cloud Anda.

  • cmek_service_agent: Saat mencadangkan volume yang dienkripsi CMEK, akun layanan ini harus diberi akses ke orig_disk_key. Akun layanan ini akan memiliki format: service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, dengan TENANT_PROJECT_NUMBER adalah nomor project tenant yang ditetapkan untuk BackupPlan Anda.

  • compute_service_agent: Akun layanan ini digunakan saat membuat volume terenkripsi baru untuk cluster dan harus diberi akses ke new_disk_key. Akun layanan ini akan memiliki format: service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, dengan PROJECT_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 peran roles/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.