輪替叢集的安全金鑰

金鑰輪替

金鑰輪替是指變更金鑰加密金鑰 (KEK) 中包含的基礎加密編譯資料。這項作業可自動觸發 (排定輪替作業的一部分),或手動觸發 (通常是在金鑰可能遭盜用的安全事件後)。金鑰輪替只會替換金鑰中包含原始加密/解密金鑰資料的單一欄位。

自動輪替金鑰

AWS Key Management Service (KMS) 支援自動輪替 KMS 金鑰。啟用後,AWS 每年會自動為您的金鑰產生新的加密金鑰內容。您不需要手動採取任何行動。

金鑰輪替後,AWS 上的 GKE 會使用新金鑰加密每個新密鑰。先前建立的密鑰仍會使用原始金鑰解密。因此,AWS 會永久保留 CMK 的舊金鑰內容,以便在讀取舊密鑰時解密舊 DEK。

您可以使用下列指令,查看 KMS 金鑰是否已啟用自動輪替功能:

aws kms get-key-rotation --key-id KMS_KEY_ID

KMS_KEY_ID 替換為 AWS KMS 金鑰 ID。

執行下列指令即可啟用自動金鑰輪替:

aws kms enable-key-rotation --key-id KMS_KEY_ID

手動輪替金鑰

本節說明如何手動輪替控制層或節點集區設定金鑰。

控制層設定金鑰

如要手動輪替控制平面設定金鑰,請執行下列步驟:

  1. 建立新的 Cloud Key Management Service 金鑰。 儲存 KMS 金鑰 ARN 的值。您會在後續步驟中使用這項記錄。

  2. 確認與叢集相關聯的 IAM 角色具有使用新金鑰加密及解密的權限。

  3. 使用 gcloud container aws clusters update 指令更新加密金鑰。

     gcloud container aws clusters update CLUSTER_NAME \
        --location=GOOGLE_CLOUD_LOCATION \
        --config-encryption-kms-key-arn=CONFIG_ENCRYPTION_KMS_KEY_ARN
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱
    • GOOGLE_CLOUD_LOCATION:管理叢集的支援 Google Cloud 區域,例如 us-west1
    • CONFIG_ENCRYPTION_KMS_KEY_ARN:新的 KMS 金鑰 ARN

控制層根磁碟區

如要手動輪替控制平面根磁碟區金鑰,請執行下列步驟:

  1. 建立新的 Cloud Key Management Service 金鑰。 儲存 KMS 金鑰 ARN 的值。您會在後續步驟中使用這項記錄。

  2. 確認與叢集相關聯的 IAM 角色具有使用新金鑰加密及解密的權限。

  3. 使用 gcloud container aws clusters update 指令更新加密金鑰。

     gcloud container aws clusters update CLUSTER_NAME \
        --location=GOOGLE_CLOUD_LOCATION \
        --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱
    • GOOGLE_CLOUD_LOCATION:管理叢集的支援 Google Cloud 區域,例如 us-west1
    • ROOT_VOLUME_KMS_KEY_ARN:用於加密根磁碟區的 AWS KMS 金鑰 Amazon Resource Name (ARN)

節點集區設定金鑰

如要手動輪替節點集區設定金鑰,請執行下列步驟:

  1. 建立新的 Cloud Key Management Service 金鑰

  2. 確認與叢集相關聯的 IAM 角色具有使用新金鑰加密及解密的權限。

  3. 更新使用的 KMS 別名:

     aws kms update-alias --alias-name KEY_ALIAS \
         --target-key-id CONFIG_ENCRYPTION_KMS_KEY_ARN
    

    更改下列內容:

    • KEY_ALIAS:現有金鑰的別名
    • CONFIG_ENCRYPTION_KMS_KEY_ARN:新的 KMS 金鑰 ARN
  4. 強制叢集使用新的加密金鑰重新加密所有叢集 Secret:

     kubectl get secrets --all-namespaces -o json | \
     kubectl annotate --overwrite -f - encryption-key-rotation-time=`date +"%Y%m%d-%H%M%S"`
    
  5. 停用舊的 AWS KMS 金鑰。詳情請參閱啟用及停用金鑰

節點集區根磁碟區

如要手動輪替節點集區根磁碟區金鑰,請執行下列步驟:

  1. 建立新的 Cloud Key Management Service 金鑰

  2. 確認與叢集相關聯的 IAM 角色具有使用新金鑰加密及解密的權限。

  3. 更新使用的 KMS 別名:

     aws kms update-alias --alias-name KEY_ALIAS \
         --target-key-id ROOT_VOLUME_KMS_KEY_ARN
    

    更改下列內容:

    • KEY_ALIAS:現有金鑰的別名
    • ROOT_ENCRYPTION_KMS_KEY_ARN:新的 KMS 金鑰 ARN
  4. 更新節點集區:

     gcloud container aws node-pools update NODE_POOL_NAME \
         --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN
    

    更改下列內容:

    • NODE_POOL_NAME:節點集區名稱
    • ROOT_VOLUME_KMS_KEY_ARN:用於加密根磁碟區的 AWS KMS 金鑰 Amazon Resource Name (ARN)
  5. 停用舊的 AWS KMS 金鑰。詳情請參閱啟用及停用金鑰