在现有集群中启用密钥加密 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

在现有集群中启用密钥加密

如果启用密钥加密,将使用您选择的 Amazon KMS key 对 Kubernetes 密钥加密。KMS 密钥必须符合以下条件:

  • 对称

  • 可以加密和解密数据

  • 在与集群相同的 Amazon Web Services 区域 中创建

  • 如果 KMS 密钥是在其他账户中创建的,则 IAM 主体必须拥有对 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
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择要向其添加 KMS 加密的集群。

  3. 选择 Overview(概述)选项卡(默认处于选中状态)。

  4. 向下滚动到 Secrets encryption(密钥加密)部分,然后选择 Enable(启用)按钮。

  5. 从下拉列表中选择一个密钥,然后选择 Enable(启用)按钮。如果未列出任何密钥,则必须先创建一个密钥。有关更多信息,请参阅创建密钥

  6. 选择 Confirm(确认)按钮以使用选定的密钥。

Amazon CLI
  1. 使用以下 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": []   } }
  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 密钥,会将集群永久性置于降级状态。有关更多信息,请参阅删除 Amazon KMS 密钥..

注意

预设情况下,create-key 命令会创建一个具有密钥策略的对称加密 KMS 密钥,该密钥策略向账户的根管理员授予对 Amazon KMS 操作和资源的访问权限。如果要缩小权限的范围,请确保允许对将调用 create-cluster API 的主体的策略执行 kms:DescribeKeykms:CreateGrant 操作。

对于使用 KMS 信封加密的集群,需要具有 kms:CreateGrant 权限。CreateCluster 操作不支持条件 kms:GrantIsForAWSResource,也不应在 KMS 策略中用于控制执行 CreateCluster 的用户的 kms:CreateGrant 权限。