輪替 etcd 和控制層開機磁碟加密金鑰

聯絡。

本頁面說明如何輪替為 GKE control plane authority 設定的 etcd 和控制層開機磁碟加密金鑰。本文適用對象為叢集管理員和資安工程師。

閱讀本文前,請先熟悉下列 GKE control plane authority 概念:

規劃金鑰輪替

本文說明如何輪替控制層中的下列憑證元件:

  • etcd 和控制層開機磁碟的加密金鑰。
  • etcd 內部備份的加密金鑰, Google Cloud 會用於災難復原。

您也可以輪替使用 GKE control plane authority 設定的客戶自行管理憑證授權單位 (CA) 和服務帳戶簽署金鑰。詳情請參閱「輪替客戶自行管理的控制層 CA 和簽署金鑰」。

Cloud Key Management Service (Cloud KMS) 中的金鑰不會過期。如果貴組織有金鑰輪替的安全規定,請手動輪替金鑰。為盡可能減少對執行中工作負載的干擾,請勿為這些金鑰設定自動金鑰輪替。

輪替控制層開機磁碟和 etcd 的加密金鑰時,GKE 會建立新的磁碟,並使用新金鑰加密。如果是區域叢集,這項作業不會造成停機,因為控制層會複製。如果是可用區叢集,控制層會暫時無法使用,直到新磁碟可用為止。

事前準備

開始之前,請確認您已執行下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
  • 現有叢集使用控制層開機磁碟和 etcd 加密,並執行 GKE 1.35.2-gke.1842000 以上版本。

  • 找出下列 Google Cloud 專案的專案 ID:

    • 金鑰專案:包含 Cloud KMS 資源的專案。
    • 叢集專案:含有 GKE 叢集的專案。
  • 如要執行本文中的驗證工作,請確認 Cloud Key Management Service (KMS) API 已啟用 DATA_READ 資料存取稽核記錄。詳情請參閱「啟用資料存取稽核記錄」。

必要角色和權限

如要取得輪替客戶自行管理的 CA 和金鑰所需的權限,請要求管理員授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

限制

您可以將叢集更新為現有金鑰的新版本,但無法將叢集更新為使用全新金鑰進行這些加密作業。

將 IAM 角色授予 GKE 服務代理

如要輪替開機磁碟和 etcd 的加密金鑰,請將金鑰專案中加密金鑰的 Kubernetes Engine KMS 加密金鑰使用者 (roles/container.cloudKmsKeyUser) 角色,授予叢集專案中的 GKE 服務代理:

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

更改下列內容:

  • KCP_DISK_KEY_NAME:控制層開機磁碟和 etcd 磁碟的加密金鑰名稱。
  • KEYRING_NAME:存放金鑰的金鑰環名稱。
  • LOCATION:金鑰環的 Google Cloud 位置。這必須與叢集位置相同。如需區域清單,請在 Cloud KMS 位置表格中篩選「Region」(區域)。
  • CLUSTER_PROJECT_NUMBER:叢集專案的數值專案編號。
  • KEY_PROJECT_ID:金鑰專案的專案 ID。

輪替 etcd 和控制層開機磁碟的金鑰

  1. 為開機磁碟和 etcd 加密金鑰建立新的主金鑰版本:

    gcloud kms keys versions create \
        --key=KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    變更最多可能需要 10 分鐘才會在專案中生效。

  2. 找出叢集控制層目前的修補程式版本:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format='value(currentMasterVersion)'
    

    更改下列內容:

    • CLUSTER_NAME:GKE 叢集的名稱。
    • LOCATION:GKE 叢集控制層的位置,例如 us-central1。
  3. 將叢集控制層升級至目前使用的版本。

    gcloud container clusters upgrade CLUSTER_NAME \
        --master \
        --location=LOCATION \
        --cluster-version=CONTROL_PLANE_VERSION \
        --project=CLUSTER_PROJECT_ID
    

    更改下列內容:

    • CONTROL_PLANE_VERSION:上一個步驟輸出內容中的叢集控制層版本。
    • CLUSTER_PROJECT_ID:叢集專案的專案 ID。

控制層升級作業完成後,叢集會使用新的金鑰版本,加密控制層開機磁碟和所有 etcd 磁碟。

輪替 etcd 內部備份加密金鑰

本節說明如何輪替 etcd 內部備份的加密金鑰, Google Cloud 會將該備份用於災難復原。您可以為這組金鑰設定自動輪替,但建議您改為手動輪替。輪替金鑰後,叢集會使用新的金鑰版本,加密新的 etcd 內部備份。

etcd 內部備份會使用主鍵版本,並依下列間隔執行:

  • 可用區叢集每 30 分鐘一次。
  • Autopilot 叢集和區域性 Standard 叢集每 10 分鐘檢查一次。

輪替金鑰後,請勿立即停用或刪除先前的金鑰版本。等待 GKE 建立使用新金鑰版本的新 etcd 內部備份。

  • 為 etcd 內部備份加密金鑰建立新的主金鑰版本:

    gcloud kms keys versions create \
        --key=ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    更改下列內容:

    • ETCD_BACKUP_KEY_NAME:etcd 內部備份加密金鑰的名稱。
    • KEYRING_NAME:存放金鑰的金鑰環名稱。
    • LOCATION:金鑰環的 Google Cloud 位置。這必須與叢集位置相同。如需區域清單,請在 Cloud KMS 位置表格中篩選「Region」(區域)。
    • KEY_PROJECT_ID:金鑰專案的專案 ID。

後續步驟