Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
在现有集群中启用密钥加密
如果启用密钥加密,将使用您选择的 Amazon KMS key 对 Kubernetes 密钥加密。KMS 密钥必须符合以下条件:
有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》https://docs.amazonaws.cn/kms/latest/developerguide/中的允许其他账户中的 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
- Amazon Web Services Management Console
-
从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters。
-
选择要向其添加 KMS 加密的集群。
-
选择 Overview(概述)选项卡(默认处于选中状态)。
-
向下滚动到 Secrets encryption(密钥加密)部分,然后选择 Enable(启用)按钮。
-
从下拉列表中选择一个密钥,然后选择 Enable(启用)按钮。如果未列出任何密钥,则必须先创建一个密钥。有关更多信息,请参阅创建密钥。
-
选择 Confirm(确认)按钮以使用选定的密钥。
- Amazon CLI
-
-
使用以下 Amazon 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 密钥,该密钥策略向账户的根管理员授予对 Amazon KMS 操作和资源的访问权限。如果要缩小权限的范围,请确保允许对将调用 create-cluster
API 的主体的策略执行 kms:DescribeKey
和 kms:CreateGrant
操作。
对于使用 KMS 信封加密的集群,需要具有 kms:CreateGrant
权限。CreateCluster 操作不支持条件 kms:GrantIsForAWSResource
,也不应在 KMS 策略中用于控制执行 CreateCluster 的用户的 kms:CreateGrant
权限。