在現有叢集上使用 AWS KMS 加密 Kubernetes 秘密 - Amazon EKS

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

在現有叢集上使用 AWS KMS 加密 Kubernetes 秘密

如果您啟用秘密加密,Kubernetes 秘密會使用您選擇的 AWS KMS 金鑰進行加密。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. 開啟 Amazon EKS 主控台

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

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

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

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

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

AWS CLI
  1. 使用下列 AWS CLI 命令,將秘密加密組態與叢集建立關聯。取代 example values 使用您自己的 。

    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 金鑰,則會永久將叢集置於降級狀態。如需詳細資訊,請參閱 Delete AWS KMS 金鑰

注意

根據預設, create-key命令會建立對稱加密 KMS 金鑰,其中包含金鑰政策,可讓帳戶根管理員存取 on AWS KMS 動作和資源。如果您想要縮小許可的範圍,請確定呼叫 API 的主體的政策允許 kms:DescribeKeycreate-cluster kms:CreateGrant動作。

對於使用 KMS Envelope Encryption 的叢集,需要kms:CreateGrant許可。此條件kms:GrantIsForAWSResource不支援 CreateCluster 動作,且不應用於 KMS 政策,以控制執行 CreateCluster 的使用者kms:CreateGrant許可。