Mengenkripsi disk booting etcd dan bidang kontrol


Halaman ini menunjukkan cara mengenkripsi data yang disimpan di bidang kontrol Google Kubernetes Engine (GKE) menggunakan kunci yang Anda kelola di Cloud Key Management Service (Cloud KMS). Anda seharusnya sudah memahami konsep seperti etcd, arsitektur cluster GKE, dan Cloud KMS.

Halaman ini menjelaskan salah satu bagian dari serangkaian fitur platform kontrol opsional di GKE yang memungkinkan Anda melakukan tugas seperti memverifikasi postur keamanan platform kontrol atau mengonfigurasi enkripsi dan penandatanganan kredensial di platform kontrol menggunakan kunci yang Anda kelola. Untuk mengetahui detailnya, lihat Tentang otoritas bidang kontrol GKE.

Secara default, Google Cloud menerapkan berbagai langkah keamanan ke bidang kontrol terkelola. Halaman ini menjelaskan kemampuan opsional yang memberi Anda visibilitas atau kontrol lebih besar atas panel kontrol GKE.

Tentang enkripsi boot disk dan etcd bidang kontrol

Secara default, GKE mengenkripsi disk booting node platform kontrol, disk yang menyimpan data di etcd, dan cadangan operasional internal Google Cloud dari etcd menggunakan kunci enkripsi yang dikelola Google Cloud. Untuk mengetahui detail tentang enkripsi default ini, lihat Enkripsi dalam penyimpanan default. Anda dapat secara opsional menggunakan kunci enkripsi Anda sendiri yang dikelola menggunakan Cloud KMS untuk mengenkripsi resource ini. Untuk mempelajari lebih lanjut, lihat Disk booting panel kontrol dan enkripsi etcd.

Anda membuat kunci di Cloud KMS yang digunakan GKE untuk mengenkripsi resource bidang kontrol Anda. Pertimbangkan hal berikut saat Anda membuat resource ini:

  • Anda dapat menggunakan satu ring kunci untuk semua kunci dalam cluster, terlepas dari tujuan setiap kunci. Jika sudah memiliki key ring yang digunakan untuk tujuan lain, seperti menyiapkan certificate authority Anda sendiri, Anda dapat menggunakan key ring tersebut untuk panduan ini.
  • Anda harus membuat kunci di lokasi Google Cloud yang sama dengan cluster untuk latensi yang lebih baik.
  • Untuk sebagian besar kasus penggunaan, Anda dapat menggunakan tingkat perlindungan kunci Cloud KMS software. Anda juga dapat menggunakan kunci hardware dengan Cloud HSM.
  • Anda harus menentukan flag --purpose dengan nilai encryption karena kunci ini digunakan untuk enkripsi simetris.
  • Anda tidak boleh mengubah durasi default untuk penghancuran kunci.

Penggunaan dengan fitur otoritas bidang kontrol GKE lainnya

Otorisasi bidang kontrol GKE menyediakan fitur berikut yang terkait dengan kunci yang dikelola sendiri yang harus Anda aktifkan secara bersamaan saat membuat cluster:

Anda hanya dapat mengaktifkan fitur ini saat membuat cluster GKE baru. Anda tidak dapat mengupdate cluster yang ada untuk menggunakan fitur ini. Untuk menggunakan kedua fitur ini di cluster yang sama, lakukan semua prosedur konfigurasi kunci dan CA di kedua panduan, lalu jalankan perintah pembuatan cluster yang mengaktifkan kedua kumpulan fitur seperti yang dijelaskan di bagian Membuat cluster.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Pastikan project kunci Anda memiliki key ring Cloud KMS untuk cluster Anda. Anda dapat menggunakan key ring yang ada di lokasi cluster. Untuk membuat key ring baru, lihat Membuat key ring.
  • Enable the Cloud Key Management Service API.

    Enable the API

Mengidentifikasi project

Sebaiknya gunakan project Google Cloud terpisah sebagai berikut:

  • Project kunci: berisi semua kunci.
  • Project cluster: berisi cluster GKE Anda.

Anda dapat menggunakan project yang sama untuk kunci dan cluster GKE secara opsional, tetapi sebaiknya gunakan project terpisah sehingga tim yang mengelola kunci dan operasi kriptografis terpisah dari tim yang mengelola cluster Anda.

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menjalankan kunci enkripsi Anda sendiri, minta administrator untuk memberi Anda peran IAM berikut:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Persyaratan

Cluster Anda harus menjalankan GKE versi 1.31.1-gke.1846000 atau yang lebih baru.

Batasan

  • Anda hanya dapat mengonfigurasi kunci enkripsi boot disk dan etcd selama pembuatan cluster.
  • Untuk cluster mode Standar regional dan untuk cluster Autopilot, region tempat Anda membuat cluster harus memiliki kapasitas untuk Mode rahasia untuk Hyperdisk Balanced di minimal tiga zona di region tersebut.

    Untuk cluster mode Standar zona, zona cluster harus memiliki kapasitas Hyperdisk Balanced. Untuk mendapatkan bantuan terkait kapasitas, hubungi Cloud Customer Care.

    Mode rahasia untuk Hyperdisk Balanced hanya tersedia di region tertentu. Untuk mengetahui detailnya, lihat Region yang didukung untuk volume Hyperdisk Balanced dalam mode Rahasia.

  • GKE hanya mendukung kunci dari Cloud KMS. Anda tidak dapat menggunakan penyedia KMS Kubernetes lain atau penyedia enkripsi lainnya.

  • Kunci Cloud External Key Manager (Cloud EKM) tidak didukung.

  • Anda tidak dapat mengakses atau berinteraksi dengan cadangan operasional internal Google Cloud untuk etcd, yang hanya ditujukan untuk disaster recovery.

  • Keyring multi-regional tidak didukung. Anda harus menggunakan key ring regional.

Membuat kunci

Di bagian ini, Anda akan membuat kunci enkripsi untuk disk booting dan disk etcd di platform kontrol dan kunci enkripsi terpisah untuk pencadangan operasional internal Google Cloud dari etcd. Anda dapat menggunakan satu ring kunci untuk menyimpan semua kunci ini dan kunci lainnya untuk cluster.

  1. Buat kunci enkripsi untuk disk booting dan disk etcd bidang kontrol Anda:

    gcloud kms keys create KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --purpose="encryption" \
        --protection-level=PROTECTION_LEVEL \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • KCP_DISK_KEY_NAME: nama untuk kunci enkripsi untuk disk booting dan disk etcd bidang kontrol Anda.
    • KEYRING_NAME: nama key ring untuk menyimpan kunci enkripsi Anda untuk cluster.
    • LOCATION: lokasi Google Cloud untuk key ring. Lokasi ini harus sama dengan lokasi cluster Anda. Untuk daftar region, filter "Region" di tabel lokasi Cloud KMS.
    • PROTECTION_LEVEL: tingkat perlindungan untuk kunci, seperti software atau hsm.
    • KEY_PROJECT_ID: project ID project kunci Anda.
  2. Buat kunci enkripsi cadangan internal etcd:

    gcloud kms keys create ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --purpose="encryption" \
        --protection-level=PROTECTION_LEVEL \
        --project=KEY_PROJECT_ID
    

    Ganti ETCD_BACKUP_KEY_NAME dengan nama untuk kunci enkripsi cadangan internal etcd.

Memberikan peran IAM ke agen layanan GKE

Di bagian ini, Anda akan memberikan peran IAM pada kunci yang Anda buat ke agen layanan GKE dalam project cluster. Agen layanan GKE memerlukan peran ini untuk menggunakan kunci ini guna mengenkripsi resource bidang kontrol yang sesuai.

  1. Temukan nomor project cluster Anda:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    

    Ganti CLUSTER_PROJECT_ID dengan project ID project cluster GKE Anda.

    Outputnya mirip dengan hal berikut ini:

    1234567890
    
  2. Berikan peran Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) pada kunci enkripsi untuk disk booting dan disk etcd kepada agen layanan GKE di project cluster:

    gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • KCP_DISK_KEY_NAME: nama kunci enkripsi disk.
    • LOCATION: lokasi Google Cloud untuk kunci.
    • KEYRING_NAME: nama key ring yang berisi kunci enkripsi.
    • CLUSTER_PROJECT_NUMBER: nomor project angka dari project cluster, yang Anda temukan di langkah sebelumnya.
    • KEY_PROJECT_ID: project ID project kunci Anda.
  3. Berikan peran Cloud KMS CryptoKey Encrypter/Decrypter Via Delegation (roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation) pada kunci enkripsi untuk disk booting dan disk etcd ke agen layanan GKE di project cluster:

    gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \
        --project=KEY_PROJECT_ID
    
  4. Berikan peran Cloud KMS CryptoKey Encrypter (roles/cloudkms.cryptoKeyEncrypter) pada kunci enkripsi cadangan internal etcd kepada agen layanan GKE dalam project cluster:

    gcloud kms keys add-iam-policy-binding ETCD_BACKUP_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypter \
        --project=KEY_PROJECT_ID
    

    Ganti ETCD_BACKUP_KEY_NAME dengan nama kunci enkripsi cadangan operasional etcd.

    Memberikan peran roles/cloudkms.cryptoKeyEncrypter akan mencegah GKE melakukan pemulihan database atas nama Anda dan secara signifikan meningkatkan jumlah waktu untuk memulihkan fungsi saat masalah database terjadi. Untuk mengizinkan GKE melakukan pemulihan untuk Anda, berikan peran roles/cloudkms.cryptoKeyEncrypterDecrypter.

Menggunakan kunci enkripsi di cluster

Bagian ini menunjukkan cara mengidentifikasi jalur ke kunci enkripsi Anda.

  1. Identifikasi jalur ke kunci enkripsi disk Anda:

    gcloud kms keys describe KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --format="value(name)"
    

    Ganti kode berikut:

    • KCP_DISK_KEY_NAME: nama kunci enkripsi untuk disk booting dan disk etcd bidang kontrol.
    • KEYRING_NAME: nama key ring yang berisi kunci.
    • LOCATION: lokasi kunci di Google Cloud.
    • KEY_PROJECT_ID: project ID project kunci Anda.

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
    
  2. Identifikasi jalur ke kunci enkripsi cadangan internal etcd Anda:

    gcloud kms keys describe ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --format="value(name)"
    

    Ganti ETCD_BACKUP_KEY_NAME dengan nama kunci enkripsi cadangan operasional etcd.

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/etcd-backup-encryption-key
    

Membuat cluster

Di bagian ini, Anda akan membuat cluster dengan opsi yang berbeda-beda, bergantung pada fitur otoritas bidang kontrol GKE yang ingin Anda konfigurasikan. Anda hanya dapat mengonfigurasi fitur ini di cluster selama pembuatan cluster. Perintah berikut akan membuat cluster mode Autopilot. Untuk membuat cluster mode Standar, gunakan flag yang sama dengan perintah gcloud container clusters create.

  • Untuk membuat cluster yang mengonfigurasi enkripsi disk dan menjalankan CA dan kunci penandatanganan akun layanan Anda sendiri, lakukan langkah-langkah berikut:

    1. Lakukan semua langkah konfigurasi kunci dan CA di Menjalankan kunci dan otoritas sertifikasi Anda sendiri.
    2. Temukan jalur ke setiap kunci akun layanan dan CA menggunakan petunjuk di Menyiapkan CA dan kunci di cluster baru.
    3. Membuat cluster:

      gcloud container clusters create-auto CLUSTER_NAME \
          --location=LOCATION \
          --project=CLUSTER_PROJECT_ID \
          --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
          --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY \
          --service-account-signing-keys=PATH_TO_SIGNING_KEY_VERSION \
          --service-account-verification-keys=PATH_TO_VERIFICATION_KEY_VERSION \
          --cluster-ca=PATH_TO_CLUSTER_CA \
          --etcd-peer-ca=PATH_TO_ETCD_PEER_CA \
          --etcd-api-ca=PATH_TO_ETCD_API_CA \
          --aggregation-ca=PATH_TO_AGGREGATION_CA
      

      Ganti kode berikut:

      • CLUSTER_NAME: nama cluster baru.
      • LOCATION: lokasi cluster baru Anda.
      • CLUSTER_PROJECT_ID: project ID project cluster Anda.
      • PATH_TO_DISK_KEY: jalur ke kunci enkripsi disk Anda dari langkah sebelumnya di halaman ini.
      • PATH_TO_ETCD_BACKUP_KEY: jalur ke kunci enkripsi cadangan internal etcd dari langkah sebelumnya di halaman ini.
      • PATH_TO_SIGNING_KEY_VERSION: jalur ke versi kunci penandatanganan ServiceAccount Kubernetes di Cloud KMS.
      • PATH_TO_VERIFICATION_KEY_VERSION: jalur ke versi kunci verifikasi ServiceAccount Kubernetes di Cloud KMS.
      • PATH_TO_CLUSTER_CA: jalur ke kumpulan CA cluster.
      • PATH_TO_ETCD_PEER_CA: jalur ke kumpulan CA peer etcd.
      • PATH_TO_ETCD_API_CA: jalur ke kumpulan CA API etcd.
      • PATH_TO_AGGREGATION_CA: jalur ke kumpulan CA agregasi.
  • Untuk membuat cluster yang hanya mengonfigurasi enkripsi disk menggunakan kunci yang Anda buat dalam panduan ini, jalankan perintah berikut:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=LOCATION \
        --project=CLUSTER_PROJECT_ID \
        --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
        --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster baru.
    • LOCATION: lokasi cluster baru Anda.
    • CLUSTER_PROJECT_ID: project ID project cluster Anda.
    • PATH_TO_DISK_KEY: jalur ke kunci enkripsi disk Anda dari langkah sebelumnya.
    • PATH_TO_ETCD_BACKUP_KEY: jalur ke kunci enkripsi cadangan internal etcd dari langkah sebelumnya.

Anda juga dapat menentukan semua flag ini saat membuat cluster mode Standar baru.

Memverifikasi status kunci enkripsi

Bagian ini menunjukkan cara memverifikasi kunci enkripsi yang digunakan selama pembuatan cluster. Anda dapat melakukan verifikasi ini menggunakan Cloud Logging atau menggunakan Google Cloud CLI.

Menggunakan Logging untuk memverifikasi kunci

Untuk memverifikasi kunci menggunakan Logging, lakukan hal berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Dapatkan log pembuatan cluster dengan menentukan kueri berikut:

    resource.type="gke_cluster" 
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.location="CLUSTER_LOCATION"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster"
    protoPayload.request.cluster.userManagedKeysConfig:*
    
  3. Klik Run query.

Dalam output, pastikan parameter pembuatan cluster menyertakan jalur kunci yang sesuai dengan kunci yang Anda siapkan di Cloud KMS, seperti dalam contoh berikut:

# lines omitted for clarity
userManagedKeysConfig: {
  controlPlaneDiskEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KCP_DISK_KEY_NAME"
  gkeopsEtcdBackupEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/ETCD_BACKUP_KEY_NAME"
}

Menggunakan gcloud CLI untuk memverifikasi kunci

Untuk menggunakan gcloud CLI guna memverifikasi kunci enkripsi, lakukan langkah berikut:

  1. Untuk kunci enkripsi disk, jalankan perintah berikut:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"
    
  2. Untuk kunci enkripsi cadangan internal etcd, jalankan perintah berikut:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
    

Langkah selanjutnya