使用現有叢集上的 Kubernetes 密碼加 AWS KMS密 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用現有叢集上的 Kubernetes 密碼加 AWS KMS密

若您啟用密碼加密,系統會使用您選取的 AWS KMS key 加密 Kubernetes 密碼。KMS金鑰必須符合下列條件:

  • 對稱

  • 可加密和解密資料

  • 建立於與叢集 AWS 區域 相同

  • 如果KMS金鑰是在不同的帳戶中建立的,IAM主體必須具有KMS金鑰的存取權。

如需詳細資訊,請參閱AWS Key Management Service 開發人員指南中的允許其他帳戶中的IAM參與者使用KMS金鑰

警告

啟用密碼加密後,您無法予以停用。此動作不可復原。

eksctl

您可以在以兩種方式啟用加密:

  • 使用單一命令將加密新增至叢集。

    若要自動重新加密您的秘密,請執行下列命令。

    eksctl utils enable-secrets-encryption \ --cluster my-cluster \ --key-arn arn:aws:kms:region-code:account:key/key

    若要退出自動重新加密您的密碼,請執行下列命令。

    eksctl utils enable-secrets-encryption --cluster my-cluster \ --key-arn arn:aws:kms:region-code:account:key/key \ --encrypt-existing-secrets=false
  • 使用 kms-cluster.yaml 檔案將加密新增到您的叢集中。

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code secretsEncryption: keyARN: arn:aws:kms:region-code:account:key/key

    若要讓您的秘密自動重新加密,請執行下列命令。

    eksctl utils enable-secrets-encryption -f kms-cluster.yaml

    若要退出自動重新加密您的密碼,請執行下列命令。

    eksctl utils enable-secrets-encryption -f kms-cluster.yaml --encrypt-existing-secrets=false
AWS Management Console
  1. https://console.aws.amazon.com/eks/家裡 #/集群打開 Amazon EKS 控制台。

  2. 選擇您要新增KMS加加密的叢集。

  3. 選擇 Overview (概觀) 索引標籤 (預設選取此項)。

  4. 向下捲動到 Secrets encryption (私密加密) 區段,然後選擇 Enable (啟用)。

  5. 從下拉式清單中選取金鑰,然後選擇 Enable (啟用) 按鈕。如果未列出任何金鑰,您必須先建立一個。如需詳細資訊,請參閱建立金鑰

  6. 選擇 Confirm (確認) 按鈕以使用選擇的金鑰。

AWS CLI
  1. 使用下列 AWS CLI 命令將密碼加密配置與叢集建立關聯。更換 範例值 用你自己的。

    aws eks associate-encryption-config \ --cluster-name my-cluster \ --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"arn:aws:kms:region-code:account:key/key"}}]'

    範例輸出如下。

    {   "update": {     "id": "3141b835-8103-423a-8e68-12c2521ffa4d",     "status": "InProgress",     "type": "AssociateEncryptionConfig",     "params": [       {         "type": "EncryptionConfig",         "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"       }     ],     "createdAt": 1613754188.734,     "errors": []   } }
  2. 您可以使用下列命令來監控您的加密更新的狀態。使用之前輸出傳回的特定 cluster nameupdate ID。顯示 Successful 狀態時,即表示更新已完成。

    aws eks describe-update \ --region region-code \ --name my-cluster \ --update-id 3141b835-8103-423a-8e68-12c2521ffa4d

    範例輸出如下。

    {   "update": {     "id": "3141b835-8103-423a-8e68-12c2521ffa4d",     "status": "Successful",     "type": "AssociateEncryptionConfig",     "params": [       {         "type": "EncryptionConfig",         "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"       }     ],     "createdAt": 1613754188.734>,     "errors": []   } }
  3. 若要驗證您的叢集中是否已啟用加密,請執行 describe-cluster 命令。回應包含 EncryptionConfig 字串。

    aws eks describe-cluster --region region-code --name my-cluster

在叢集上啟用加密之後,您須使用新金鑰來加密所有現有的密碼:

注意

如果您使用 eksctl,則僅當您選擇退出自動重新加密秘密時,才需要執行以下命令。

kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - kms-encryption-timestamp="time value"
警告

如果您為現有叢集啟用碼加密,且您使用的KMS金鑰遭到刪除,則無法復原叢集。如果刪除KMS金鑰,則會將叢集永久置於降級狀態。如需詳細資訊,請參閱刪除 AWS KMS金鑰

注意

根據預設,此命create-key令會建立具有KMS金鑰原則的對稱加密金鑰,該金鑰可讓帳號根管理員存取 AWS KMS 動作和資源。如果您想要縮小權限的範圍,請確定在呼叫的主體的原則上允許kms:DescribeKeykms:CreateGrant動作create-clusterAPI。

對於使用KMS信封加密的叢集,需要kms:CreateGrant權限。此 CreateCluster動作kms:GrantIsForAWSResource不支援此條件,且不應用於KMS策略中,以控制執行之使用者的kms:CreateGrant權限 CreateCluster。