Merotasi CA dan kunci bidang kontrol yang dikelola pelanggan


Anda.

Halaman ini menunjukkan kepada administrator cluster dan engineer Keamanan cara merotasi otoritas sertifikat (CA) dan kunci penandatanganan akun layanan yang Anda konfigurasi untuk otoritas bidang kontrol GKE.

Anda harus memahami konsep berikut:

Merencanakan rotasi kredensial

Halaman ini menunjukkan cara mengganti komponen kredensial berikut di bidang kontrol Anda:

  • Root CA cluster, root CA agregasi, root CA API etcd, dan root CA peer etcd.
  • Kunci penandatanganan dan verifikasi ServiceAccount Kubernetes.

Anda juga dapat mengganti kunci enkripsi yang dikelola pelanggan yang Anda gunakan untuk mengenkripsi disk booting bidang kontrol, disk etcd, dan cadangan internal etcd yang Google Cloud digunakan untuk pemulihan dari bencana. Untuk mengetahui informasi selengkapnya, lihat Merotasi kunci enkripsi disk booting etcd dan bidang kontrol.

Lakukan rotasi kredensial Anda untuk menghindari masa berlaku CA berakhir, untuk memitigasi pembobolan versi kunci, dan sebagai bagian dari praktik keamanan organisasi Anda. Untuk merencanakan seberapa sering Anda mengganti resource otorisasi bidang kontrol GKE tertentu, pertimbangkan hal berikut:

  • Secara default, sertifikat GKE yang ditandatangani oleh CA root di Certificate Authority Service (CA Service) akan berakhir satu tahun setelah tanggal pembuatan.
  • Kunci di Cloud Key Management Service (Cloud KMS) tidak akan habis masa berlakunya. Lakukan rotasi kunci manual hanya jika organisasi Anda memiliki persyaratan untuk rotasi kunci. Untuk meminimalkan gangguan pada workload yang sedang berjalan, jangan mengonfigurasi rotasi kunci otomatis untuk kunci ini.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan 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.
  • Memiliki cluster yang sudah ada yang menggunakan CA yang dikelola sendiri dan kunci akun layanan

  • Identifikasi project ID dari project berikut: Google Cloud

    • Project kunci: project yang berisi resource Cloud KMS dan CA Service Anda.
    • Project cluster: project yang berisi cluster GKE Anda.
  • Untuk melakukan tugas validasi di halaman ini, pastikan log audit Akses Data berikut diaktifkan:

    • Cloud Key Management Service (KMS) API: DATA_READ
    • Certificate Authority Service: ADMIN_READ

    Untuk mengaktifkan jenis log ini, lihat Mengaktifkan log audit Akses Data.

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk merotasi CA dan kunci yang dikelola pelanggan, minta administrator untuk memberi Anda peran IAM berikut:

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

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran kustom atau peran yang telah ditentukan lainnya.

Batasan

Kunci Cloud KMS asimetris yang Anda gunakan untuk penandatanganan dan verifikasi akun layanan tidak mendukung rotasi kunci otomatis.

Merotasi kunci penandatanganan dan verifikasi akun layanan

Saat menyiapkan otoritas bidang kontrol GKE, Anda menambahkan kunci penandatanganan akun layanan dan kunci verifikasi akun layanan ke cluster. GKE menggunakan kunci ini untuk menandatangani dan memvalidasi token pembawa untuk ServiceAccount Kubernetes. Selama rotasi, Anda menambahkan kunci baru ke daftar kunci verifikasi akun layanan, menunggu perubahan diterapkan, lalu mengganti kunci penandatanganan akun layanan dengan kunci baru.

Untuk merotasi kunci akun layanan, ikuti langkah-langkah berikut:

  1. Dapatkan nama resource lengkap versi kunci asli dari kunci penandatanganan akun layanan:

    gcloud container clusters describe CLUSTER_NAME \
        --project=CLUSTER_PROJECT_ID \
        --location=CONTROL_PLANE_LOCATION \
        --format="value(userManagedKeysConfig.serviceAccountSigningKeys)"
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • CONTROL_PLANE_LOCATION: lokasi cluster.
    • CLUSTER_PROJECT_ID: project ID project cluster.

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/SIGNING_KEY_NAME/cryptoKeyVersions/ORIGINAL_SIGNING_KEY_VERSION
    

    Dalam output ini, SIGNING_KEY_NAME adalah nama kunci dan ORIGINAL_SIGNING_KEY_VERSION adalah nomor versi kunci penandatanganan asli.

  2. Buat versi kunci baru untuk kunci penandatanganan akun layanan:

    gcloud kms keys versions create \
        --key=SIGNING_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • SIGNING_KEY_NAME: nama kunci penandatanganan akun layanan.
    • KEYRING_NAME: nama key ring yang menyimpan kunci.
    • CONTROL_PLANE_LOCATION: lokasi key ring. Google Cloud
    • KEY_PROJECT_ID: project ID project kunci Anda.
  3. Dapatkan nama resource lengkap dari versi kunci baru:

    gcloud kms keys versions list \
        --key=SIGNING_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
        --filter="STATE=ENABLED" --sort-by=~ \
        --format="value(name)" | sed 1q
    

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/SIGNING_KEY_NAME/cryptoKeyVersions/NEW_SIGNING_KEY_VERSION
    

    Dalam output ini, SIGNING_KEY_NAME adalah nama kunci dan NEW_SIGNING_KEY_VERSION adalah jumlah versi kunci penandatanganan baru.

  4. Tambahkan versi kunci baru ke set kunci verifikasi akun layanan untuk cluster:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=CLUSTER_PROJECT_ID \
        --service-account-verification-keys=ORIGINAL_KEY_VERSION_PATH,NEW_KEY_VERSION_PATH
    

    Ganti kode berikut:

    • ORIGINAL_KEY_VERSION_PATH: nama lengkap resource versi kunci penandatanganan asli dari output langkah pertama di bagian ini. Contoh, projects/example-key-project/locations/us-central1/keyRings/example-keyring/cryptokeys/example-signing-key/cryptoKeyVersions/1.
    • NEW_KEY_VERSION_PATH: nama lengkap resource versi kunci penandatanganan baru dari output langkah sebelumnya. Misalnya, projects/example-key-project/locations/us-central1/keyRings/example-keyring/cryptokeys/example-signing-key/cryptoKeyVersions/2.

    Setelah operasi update cluster selesai, mungkin perlu waktu hingga 10 menit agar jalur versi kunci baru diterapkan ke server API Kubernetes dan setiap endpoint API GKE.

  5. Untuk mengonfirmasi bahwa jalur versi kunci baru telah sepenuhnya diterapkan, lakukan hal berikut:

    1. Dapatkan komponen publik kunci penandatanganan cluster dari GKE API sebagai JSON Web Key Set (JWKS):

      curl https://container.googleapis.com/v1/projects/CLUSTER_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/clusters/CLUSTER_NAME/jwks
      

      Outputnya mirip dengan hal berikut ini:

      {
        "keys": [
          {
            "kty": "RSA",
            "alg": "RS256",
            "use": "sig",
            "kid": "KEY1_ID",
            "n": "KEY1_MODULUS",
            "e": "KEY1_EXPONENT"
          },
          {
            "kty": "RSA",
            "alg": "RS256",
            "use": "sig",
            "kid": "KEY2_ID",
            "n": "KEY2_MODULUS",
            "e": "KEY2_EXPONENT"
          }
        ]
      }
      

      Output ini harus memiliki dua entri kunci, yang menunjukkan bahwa kedua versi kunci tersedia di GKE API. Jika Anda hanya melihat satu entri kunci, tunggu 10 menit dan coba lagi perintahnya.

    2. Hubungkan ke cluster agar Anda dapat menjalankan perintah kubectl:

      gcloud container clusters get-credentials CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION
      
    3. Dapatkan komponen publik kunci penandatanganan cluster dari server Kubernetes API sebagai JWKS:

      kubectl get --raw /openid/v1/jwks | jq
      

      Outputnya mirip dengan hal berikut ini:

      {
        "keys": [
          {
            "kty": "RSA",
            "alg": "RS256",
            "use": "sig",
            "kid": "KEY1_ID",
            "n": "KEY1_MODULUS",
            "e": "KEY1_EXPONENT"
          },
          {
            "kty": "RSA",
            "alg": "RS256",
            "use": "sig",
            "kid": "KEY2_ID",
            "n": "KEY2_MODULUS",
            "e": "KEY2_EXPONENT"
          }
        ]
      }
      

      Output ini harus memiliki dua entri utama, yang menunjukkan bahwa kedua versi kunci tersedia di server Kubernetes API. Jika Anda hanya melihat satu entri kunci, tunggu 10 menit dan coba lagi perintahnya.

  6. Perbarui cluster untuk menggunakan versi kunci baru sebagai kunci penandatanganan akun layanan:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=CLUSTER_PROJECT_ID \
        --service-account-signing-key=NEW_KEY_VERSION_PATH
    
  7. Pastikan token akun layanan baru menggunakan versi kunci baru:

    1. Buat ServiceAccount:

      kubectl create serviceaccount test-sa-1
      
    2. Buat token untuk ServiceAccount:

      kubectl create token test-sa-1
      
    3. Ekstrak ringkasan yang baru saja ditandatangani dari Logging:

      export SIGNED_DIGEST=$(gcloud logging read \
          'resource.type="gke_cluster" '\
          'AND resource.labels.cluster_name="' CLUSTER_NAME '" '\
          'AND protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT" '\
          'AND protoPayload.metadata.subject="system:serviceaccount:default:test-sa-1"' \
          --freshness=1h \
          --bucket=_Required \
          --location=global \
          --view=_AllLogs \
          --order=DESC \
          --limit=1 \
          --format="value(protoPayload.metadata.toBeSignedDigest)")
      
      1. Validasi bahwa versi kunci penandatanganan baru sedang digunakan:
        gcloud logging read \
            'resource.type="cloudkms_cryptokeyversion" '\
            'AND protoPayload.methodName="AsymmetricSign" '\
            'AND protoPayload.request.digest.sha256="'${SIGNED_DIGEST}'"' \
            --freshness=1h \
            --bucket=_Default \
            --location=global \
            --view=_AllLogs \
            --order=DESC \
            --limit=1 \
            --format="value(protoPayload.resourceName)"
        ```
      The output is the resource path of the new signing key version.
      
  8. Tunggu hingga setiap token di kluster yang menggunakan versi kunci penandatanganan akun layanan asli berakhir. Secara default, masa berlaku token adalah satu jam, dengan maksimum yang dapat dikonfigurasi hingga 24 jam. Untuk memeriksa masa berlaku token yang dikonfigurasi di cluster Anda, jalankan perintah berikut:

    kubectl get pods -A -o json | jq -r '.items[]?.spec?.volumes[]?.projected?.sources[]?.serviceAccountToken?.expirationSeconds | select(. != null)' | sort -nr | head -n 1
    
  9. Tunggu hingga masa aktif token yang dikonfigurasi dari output langkah sebelumnya berakhir. Setelah periode waktu ini berlalu, semua token terikat di cluster Anda akan menggunakan versi kunci penandatanganan akun layanan yang baru.

  10. Hapus versi kunci asli dari daftar kunci verifikasi untuk cluster:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=CLUSTER_PROJECT_ID \
        --service-account-verification-keys=NEW_KEY_VERSION_PATH
    
  11. Opsional: Nonaktifkan versi kunci asli. Setelah Anda memverifikasi bahwa versi kunci asli tidak digunakan dan cluster dalam kondisi baik, musnahkan versi kunci.

    Kecuali jika Anda merotasi kunci sebagai respons terhadap peristiwa penting, sebaiknya Anda menunggu beberapa hari sebelum menghancurkan versi kunci asli. Untuk mengetahui informasi selengkapnya, lihat Memusnahkan dan memulihkan versi kunci.

Setelah Anda menyelesaikan langkah-langkah ini, setiap token akun layanan baru dan yang ada di cluster Anda akan ditandatangani oleh versi kunci baru. Server API menolak permintaan apa pun yang menggunakan token pembawa dengan versi kunci asli, karena versi kunci asli tidak ada dalam konfigurasi cluster.

Merotasi CA otoritas bidang kontrol GKE

Bagian berikut menunjukkan cara mengganti CA root yang digunakan cluster untuk otoritas bidang kontrol GKE.

Buat versi kunci baru untuk CA

  1. Buat versi kunci baru untuk kunci CA root cluster:

    gcloud kms keys versions create \
        --key=CLUSTER_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • CLUSTER_CA_KEY_NAME: nama cluster kunci CA root untuk cluster.
    • KEYRING_NAME: nama key ring yang menyimpan kunci.
    • CONTROL_PLANE_LOCATION: lokasi key ring. Google Cloud Ini sama dengan lokasi cluster Anda.
    • KEY_PROJECT_ID: project ID project kunci Anda.
  2. Buat versi kunci baru untuk kunci CA root agregasi:

    gcloud kms keys versions create \
        --key=AGGREGATION_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti AGGREGATION_CA_KEY_NAME dengan nama kunci CA root agregasi untuk cluster.

  3. Buat versi kunci baru untuk kunci CA root etcd API:

    gcloud kms keys versions create \
        --key=ETCD_API_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti ETCD_API_CA_KEY_NAME dengan nama kunci CA root API etcd untuk cluster.

  4. Buat versi kunci baru untuk kunci CA root peer etcd:

    gcloud kms keys versions create \
        --key=ETCD_PEER_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti ETCD_PEER_CA_KEY_NAME dengan nama kunci CA root peer etcd untuk cluster.

Membuat CA root baru

  1. Dapatkan nama resource lengkap dari versi kunci CA root cluster baru:

    gcloud kms keys versions list \
        --key=CLUSTER_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
        --filter="STATE=ENABLED" --sort-by=~ \
        --format="value(name)" | sed 1q
    

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/CLUSTER_CA_KEY_NAME/cryptoKeyVersions/VERSION
    

    Dalam output ini, VERSION adalah jumlah versi kunci baru.

  2. Buat CA root cluster baru di kumpulan CA cluster:

    gcloud privateca roots create CLUSTER_ROOT_CA_NAME \
        --pool=CLUSTER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --kms-key-version=CLUSTER_CA_KEY_PATH \
        --subject="CN=cluster-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • CLUSTER_ROOT_CA_NAME: nama untuk CA root baru Anda.
    • CLUSTER_CA_POOL_NAME: nama cluster CA pool.
    • CLUSTER_CA_KEY_PATH: nama lengkap resource versi kunci baru dari output langkah sebelumnya.
    • ORGANIZATION: nama organisasi Anda.
  3. Dapatkan nama resource lengkap dari versi kunci CA root agregasi baru:

    gcloud kms keys versions list \
        --key=AGGREGATION_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
        --filter="STATE=ENABLED" --sort-by=~ \
        --format="value(name)" | sed 1q
    

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/AGGREGATION_CA_KEY_NAME/cryptoKeyVersions/VERSION
    
  4. Buat CA root agregasi baru di kumpulan CA agregasi:

    gcloud privateca roots create AGGREGATION_ROOT_CA_NAME \
        --pool=AGGREGATION_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --kms-key-version=AGGREGATION_CA_KEY_PATH \
        --subject="CN=aggregation-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • AGGREGATION_ROOT_CA_NAME: nama untuk CA root agregasi baru Anda.
    • AGGREGATION_CA_POOL_NAME: nama pool CA agregasi.
    • AGGREGATION_CA_KEY_PATH: nama lengkap resource versi kunci baru dari output langkah sebelumnya.
  5. Dapatkan nama resource lengkap dari versi kunci CA root API etcd baru:

    gcloud kms keys versions list \
        --key=ETCD_API_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
        --filter="STATE=ENABLED" --sort-by=~ \
        --format="value(name)" | sed 1q
    

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/ETCD_API_CA_KEY_NAME/cryptoKeyVersions/VERSION
    
  6. Buat CA root API etcd baru di kumpulan CA API etcd:

    gcloud privateca roots create ETCD_API_ROOT_CA_NAME \
        --pool=ETCD_API_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --kms-key-version=ETCD_API_CA_KEY_PATH \
        --subject="CN=etcd-api-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • ETCD_API_ROOT_CA_NAME: nama untuk CA root API etcd baru Anda.
    • ETCD_API_CA_POOL_NAME: nama pool CA etcd API.
    • ETCD_API_CA_KEY_PATH: nama lengkap resource versi kunci baru dari output langkah sebelumnya.
  7. Dapatkan nama resource lengkap dari versi kunci CA root peer etcd baru:

    gcloud kms keys versions list \
        --key=ETCD_PEER_CA_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
        --filter="STATE=ENABLED" --sort-by=~ \
        --format="value(name)" | sed 1q
    

    Outputnya mirip dengan hal berikut ini:

    projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/ETCD_PEER_CA_KEY_NAME/cryptoKeyVersions/VERSION
    
  8. Buat CA root peer etcd baru di kumpulan CA peer etcd:

    gcloud privateca roots create ETCD_PEER_ROOT_CA_NAME \
        --pool=ETCD_PEER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --kms-key-version=ETCD_PEER_CA_KEY_PATH \
        --subject="CN=etcd-peer-ca, O=ORGANIZATION" \
        --project=KEY_PROJECT_ID
    

    Ganti kode berikut:

    • ETCD_PEER_ROOT_CA_NAME: nama untuk CA root peer etcd baru Anda.
    • ETCD_PEER_CA_POOL_NAME: nama pool CA peer etcd.
    • ETCD_PEER_CA_KEY_PATH: nama lengkap resource versi kunci baru dari output langkah sebelumnya.
  9. Sebelum melanjutkan, sebarkan perubahan CA root ke paket kepercayaan cluster dengan mengikuti petunjuk di bagian Mulai ulang bidang kontrol dan node.

Ganti CA root asli dengan CA root baru

Setelah Anda memulai ulang panel kontrol dan node, ikuti langkah-langkah berikut:

  1. Aktifkan CA root cluster baru:

    gcloud privateca roots enable CLUSTER_ROOT_CA_NAME \
        --pool=CLUSTER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    
  2. Aktifkan CA root agregasi baru:

    gcloud privateca roots enable AGGREGATION_ROOT_CA_NAME \
        --pool=AGGREGATION_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    
  3. Aktifkan CA root etcd API baru:

    gcloud privateca roots enable ETCD_API_ROOT_CA_NAME \
        --pool=ETCD_API_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    
  4. Aktifkan CA root peer etcd baru:

    gcloud privateca roots enable ETCD_PEER_ROOT_CA_NAME \
        --pool=ETCD_PEER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    
  5. Nonaktifkan CA root cluster asli:

    gcloud privateca roots disable ORIGINAL_CLUSTER_ROOT_CA \
        --pool=CLUSTER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti ORIGINAL_CLUSTER_ROOT_CA dengan nama CA root cluster asli yang Anda ganti.

  6. Nonaktifkan CA root agregasi asli:

    gcloud privateca roots disable ORIGINAL_AGGREGATION_ROOT_CA \
        --pool=AGGREGATION_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti ORIGINAL_AGGREGATION_ROOT_CA dengan nama CA root agregasi asli yang Anda rotasi.

  7. Nonaktifkan CA root API etcd asli:

    gcloud privateca roots disable ORIGINAL_ETCD_API_ROOT_CA \
        --pool=ETCD_API_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti ORIGINAL_ETCD_API_ROOT_CA dengan nama CA root API etcd asli yang Anda ganti.

  8. Nonaktifkan CA root peer etcd asli:

    gcloud privateca roots disable ORIGINAL_ETCD_PEER_ROOT_CA \
        --pool=ETCD_PEER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID
    

    Ganti ORIGINAL_ETCD_PEER_ROOT_CA dengan nama CA root peer etcd asli yang Anda ganti.

  9. Pada tahap ini, CA root baru menerbitkan semua sertifikat baru di cluster. Untuk menerbitkan sertifikat baru untuk kubelet di setiap node, Mulai ulang bidang kontrol dan node. Langkah ini diperlukan karena sertifikat kubelet memiliki masa berlaku yang panjang.

Setelah beberapa hari cluster tetap dalam kondisi baik, Anda dapat menghapus CA root asli, seperti yang dijelaskan di bagian berikutnya.

Menghapus CA root asli

Bagian ini menunjukkan cara menghapus CA root asli Anda. Sebelum Anda mengikuti langkah-langkah ini, verifikasi hal berikut:

  • Cluster tetap dalam kondisi baik selama beberapa hari setelah Anda mengganti CA root asli dengan CA root baru.
  • Anda mengganti semua sertifikat yang dikeluarkan oleh CA root asli dengan sertifikat baru.

Untuk menghapus CA root asli, gunakan perintah gcloud privateca roots delete, seperti yang dijelaskan dalam langkah-langkah berikut. Dalam perintah ini, tanda --ignore-active-certificates menghapus CA setelah masa tenggang, meskipun CA memiliki sertifikat yang tidak dicabut atau tidak kedaluwarsa.

  1. Hapus CA root cluster asli:

    gcloud privateca roots delete ORIGINAL_CLUSTER_ROOT_CA \
        --pool=CLUSTER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
          --ignore-active-certificates
    

    Ganti ORIGINAL_CLUSTER_ROOT_CA dengan nama CA root cluster asli yang Anda ganti.

  2. Hapus CA root agregasi asli:

    gcloud privateca roots delete ORIGINAL_AGGREGATION_ROOT_CA \
        --pool=AGGREGATION_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
          --ignore-active-certificates
    

    Ganti ORIGINAL_AGGREGATION_ROOT_CA dengan nama CA root agregasi asli yang Anda rotasi.

  3. Hapus CA root API etcd asli:

    gcloud privateca roots delete ORIGINAL_ETCD_API_ROOT_CA \
        --pool=ETCD_API_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
          --ignore-active-certificates
    

    Ganti ORIGINAL_ETCD_API_ROOT_CA dengan nama CA root API etcd asli yang Anda ganti.

  4. Hapus CA root peer etcd asli:

    gcloud privateca roots delete ORIGINAL_ETCD_PEER_ROOT_CA \
        --pool=ETCD_PEER_CA_POOL_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=KEY_PROJECT_ID \
          --ignore-active-certificates
    

    Ganti ORIGINAL_ETCD_PEER_ROOT_CA dengan nama CA root peer etcd asli yang Anda ganti.

  5. Opsional: Sebarkan perubahan pada CA root ke paket kepercayaan cluster. Untuk mengetahui petunjuknya, lihat bagian Mulai ulang bidang kontrol dan node. Jika Anda melewati langkah ini, CA root asli akan dihapus selama upgrade versi node dan bidang kontrol berikutnya.

Mulai ulang bidang kontrol dan node

Saat Anda membuat perubahan pada konfigurasi CA root cluster, seperti mengaktifkan CA root, menonaktifkan CA root, atau mencabut sertifikat, Anda harus menyebarkan perubahan tersebut ke paket kepercayaan cluster. Untuk menerapkan perubahan pada paket kepercayaan untuk cluster, Anda memulai ulang bidang kontrol dan (dalam beberapa skenario) node.

  1. Upgrade bidang kontrol cluster ke versi yang sama dengan yang sudah digunakannya.

    1. Temukan versi GKE yang sudah digunakan bidang kontrol:

      gcloud container clusters describe CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --project=CLUSTER_PROJECT_ID \
          --format="value(currentMasterVersion)"
      

      Ganti kode berikut:

      • CLUSTER_NAME: nama cluster GKE Anda.
      • CLUSTER_VERSION: versi GKE yang sudah dijalankan cluster.
      • CLUSTER_PROJECT_ID: project ID project cluster Anda.
    2. Upgrade bidang kontrol:

      gcloud container clusters upgrade CLUSTER_NAME \
          --master \
          --location=CONTROL_PLANE_LOCATION \
          --cluster-version=CLUSTER_VERSION \
          --project=CLUSTER_PROJECT_ID
      
  2. Jika Anda membuat sertifikat secara manual menggunakan CertificateSigningRequests Kubernetes, terbitkan ulang semua sertifikat tersebut dan berikan sertifikat baru kepada klien API.

  3. Khusus untuk rotasi CA root cluster, picu pembuatan ulang node dengan mengupgrade setiap node pool Anda ke versi yang sama dengan yang sudah digunakan.

    1. Temukan versi GKE yang digunakan node pool:

      gcloud container node-pools describe NODE_POOL_NAME \
          --cluster=CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --project=CLUSTER_PROJECT_ID \
          --format="value(version)"
      

      Ganti NODE_POOL_NAME dengan nama node pool yang akan diupgrade.

    2. Upgrade node pool:

      gcloud container clusters upgrade CLUSTER_NAME \
          --node-pool=NODE_POOL_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --cluster-version=CLUSTER_VERSION \
          --project=CLUSTER_PROJECT_ID
      

Jika Anda melakukan langkah-langkah di bagian ini selama rotasi CA, lanjutkan ke fase rotasi berikutnya, yang merupakan salah satu bagian berikut di halaman ini:

Langkah berikutnya