協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
在現有叢集上使用 KMS 加密 Kubernetes 秘密
重要
此程序僅適用於執行 Kubernetes 版本 1.27 或更低版本的 EKS 叢集。如果您執行的是 Kubernetes 版本 1.28 或更新版本,則根據預設,會使用封套加密來保護 Kubernetes 秘密。如需詳細資訊,請參閱 針對所有 Kubernetes API 資料的預設封套加密。
如果您啟用秘密加密
-
對稱
-
可加密和解密資料
-
在與叢集相同的 AWS 區域中建立
-
如果 KMS 金鑰是在其他帳戶中建立,則 IAM p主體必須具有 KMS 金鑰的存取權。
如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的允許其他帳戶中的 IAM 主體使用 KMS 金鑰。
警告
啟用秘密加密後,您無法予以停用。此動作不可復原。
- eksctl
-
此程序僅適用於執行 Kubernetes 版本 1.27 或更低版本的 EKS 叢集。如需詳細資訊,請參閱 針對所有 Kubernetes API 資料的預設封套加密。
您可以在以兩種方式啟用加密:
-
使用單一命令將加密新增至叢集。
若要自動重新加密您的秘密,請執行下列命令。
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 管理主控台
-
-
此程序僅適用於執行 Kubernetes 版本 1.27 或更低版本的 EKS 叢集。如需詳細資訊,請參閱 針對所有 Kubernetes API 資料的預設封套加密。
-
開啟 Amazon EKS 主控台
。 -
選擇您要向其新增 KMS 加密的叢集。
-
選擇 Overview (概觀) 索引標籤 (預設選取此項)。
-
向下捲動到 Secrets encryption (私密加密) 區段,然後選擇 Enable (啟用)。
-
從下拉式清單中選取金鑰,然後選擇 Enable (啟用) 按鈕。如果未列出任何金鑰,您必須先建立一個。如需詳細資訊,請參閱建立金鑰。
-
選擇 Confirm (確認) 按鈕以使用選擇的金鑰。
-
- AWS CLI
-
-
此程序僅適用於執行 Kubernetes 版本 1.27 或更低版本的 EKS 叢集。如需詳細資訊,請參閱 針對所有 Kubernetes API 資料的預設封套加密。
-
使用下列 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": [] } } -
您可以使用下列命令來監控您的加密更新的狀態。使用之前輸出傳回的特定
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 金鑰,該政策賦予該帳戶對 AWS KMS 動作和資源的根管理員存取權。如果您想要縮小許可範圍,請確保要呼叫 create-cluster API 之主體的政策上允許 kms:DescribeKey 和 kms:CreateGrant 動作。
對於使用 KMS 封套加密的叢集,需要 kms:CreateGrant 許可。CreateCluster 動作不支援條件 kms:GrantIsForAWSResource,並且不應在 KMS 政策中使用該條件來控制執行 CreateCluster 的使用者的 kms:CreateGrant 許可。