本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在現有叢集上使用 AWS KMS 加密 Kubernetes 秘密
如果您啟用秘密加密
-
對稱
-
可加密和解密資料
-
在與叢集相同的 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
-
-
開啟 Amazon EKS 主控台
。 -
選擇您要新增 KMS 加密的叢集。
-
選擇 Overview (概觀) 索引標籤 (預設選取此項)。
-
向下捲動到 Secrets encryption (私密加密) 區段,然後選擇 Enable (啟用)。
-
從下拉式清單中選取金鑰,然後選擇 Enable (啟用) 按鈕。如果未列出任何金鑰,您必須先建立一個。如需詳細資訊,請參閱建立金鑰。
-
選擇 Confirm (確認) 按鈕以使用選擇的金鑰。
-
- AWS CLI
-
-
使用下列 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": [] } }
-
您可以使用下列命令來監控您的加密更新的狀態。使用之前輸出傳回的特定
cluster name
和update 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": [] } }
-
若要驗證您的叢集中是否已啟用加密,請執行
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"
警告
如果您為現有叢集啟用秘密加密
注意
根據預設, create-key
命令會建立對稱加密 KMS 金鑰,其中包含金鑰政策,可讓帳戶根管理員存取 on AWS KMS 動作和資源。如果您想要縮小許可的範圍,請確定呼叫 API 的主體的政策允許 kms:DescribeKey
和 create-cluster
kms:CreateGrant
動作。
對於使用 KMS Envelope Encryption 的叢集,需要kms:CreateGrant
許可。此條件kms:GrantIsForAWSResource
不支援 CreateCluster 動作,且不應用於 KMS 政策,以控制執行 CreateCluster 的使用者kms:CreateGrant
許可。