帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
如果启用密钥加密
-
对称
-
可以加密和解密数据
-
在与集群相同的 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 密钥,该密钥政策向账户的根管理员授予对 AWS KMS 操作和资源的访问权限。如果要缩小权限的范围,请确保允许对将调用 create-cluster
API 的主体的策略执行 kms:DescribeKey
和 kms:CreateGrant
操作。
对于使用 KMS 信封加密的集群,需要具有 kms:CreateGrant
权限。CreateCluster 操作不支持条件 kms:GrantIsForAWSResource
,也不应在 KMS 策略中用于控制执行 CreateCluster 的用户的 kms:CreateGrant
权限。