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:
- Pengelolaan kunci dan kredensial.
- Rotasi kredensial yang dikelola pelanggan.
- Pertimbangan untuk kunci asimetris.
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.
- Cloud Key Management Service (KMS) API:
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:
-
Mengelola kunci atau versi kunci:
Admin Cloud KMS (
roles/cloudkms.admin
) di project kunci Anda -
Mengelola CA root:
Admin Layanan CA (
roles/privateca.admin
) di project utama Anda -
Konfigurasi cluster untuk menggunakan kredensial baru:
Admin Cluster Kubernetes Engine (
roles/container.clusterAdmin
) di project cluster Anda
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:
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 danORIGINAL_SIGNING_KEY_VERSION
adalah nomor versi kunci penandatanganan asli.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 CloudKEY_PROJECT_ID
: project ID project kunci Anda.
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 danNEW_SIGNING_KEY_VERSION
adalah jumlah versi kunci penandatanganan baru.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.
Untuk mengonfirmasi bahwa jalur versi kunci baru telah sepenuhnya diterapkan, lakukan hal berikut:
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.
Hubungkan ke cluster agar Anda dapat menjalankan perintah
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION
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.
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
Pastikan token akun layanan baru menggunakan versi kunci baru:
Buat ServiceAccount:
kubectl create serviceaccount test-sa-1
Buat token untuk ServiceAccount:
kubectl create token test-sa-1
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)")
- 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.
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
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.
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
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
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.
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.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.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
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.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.
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
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.
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
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.
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
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.
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:
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
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
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
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
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.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.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.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.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 sertifikatkubelet
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.
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.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.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.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.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.
Upgrade bidang kontrol cluster ke versi yang sama dengan yang sudah digunakannya.
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.
Upgrade bidang kontrol:
gcloud container clusters upgrade CLUSTER_NAME \ --master \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --project=CLUSTER_PROJECT_ID
Jika Anda membuat sertifikat secara manual menggunakan CertificateSigningRequests Kubernetes, terbitkan ulang semua sertifikat tersebut dan berikan sertifikat baru kepada klien API.
Khusus untuk rotasi CA root cluster, picu pembuatan ulang node dengan mengupgrade setiap node pool Anda ke versi yang sama dengan yang sudah digunakan.
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.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
- Merotasi kunci enkripsi boot disk etcd dan bidang kontrol
- Memverifikasi penerbitan dan penggunaan identitas