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 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 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 empat akun layanan berbeda yang mungkin memerlukan akses ke kunci CMEK:

  • agent_robot: 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 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 ke cmek_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

  1. Di Konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Klik Grant access.

  3. Di kolom New principals, masukkan alamat email akun layanan.

  4. Dari daftar Pilih peran, pilih peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS.

  5. Klik Simpan.

gcloud

  1. 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

  1. 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

  1. Di konsol Google Cloud, buka halaman Key management.

    Buka Key management

  2. Klik nama key ring.

  3. Klik nama kunci.

  4. Klik tab Izin.

  5. Klik Grant access.

  6. Di kolom New principals, masukkan alamat email akun layanan.

  7. Dari daftar Pilih peran, pilih peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS.

  8. Klik Simpan.

gcloud

  1. 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

  1. 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.