本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon EKS 的加密最佳实践
亚马逊 Elastic Kubernetes Service(亚马逊 EKS)可帮助你在上面运行 AWS Kubernetes,而无需安装或维护自己的 Kubernetes 控制平面或节点。在 Kubernetes 中,密钥可帮助您管理敏感信息,比如用户证书、密码或 API 密钥。默认情况下,这些密钥以未加密方式存储在 API 服务器的底层数据存储中(称为 etcdetcd
使用亚马逊 EBS 加密进行加密。任何具有 API 访问权限或 etcd
访问权限的用户都可以检索或修改密钥。此外,任何有权在命名空间中创建 pod 的人都可以使用该访问权限读取该命名空间中的任何密钥。您可以使用托管密钥或客户 AWS 托管密钥在 Amazon EKS 中对这些秘密进行 AWS KMS keys静态加密。另一种使用方法etcd
是使用 S AWS ecrets and Config Provider (ASCP)
你可以在 Kubernetes 中使用以下 AWS 存储服务:
-
对于 Amazon EBS,您可以使用树内存储驱动程序或 A mazon EBS CSI 驱动程序。两者都包含用于加密卷和提供客户管理密钥的参数。
-
对于 Amazon Elastic File System(Amazon EFS),您可以使用支持动态和静态预置的 Amazon EFS CSI 驱动程序。
考虑下面针对该服务的加密最佳实践:
-
如果使用
etcd
来存储默认未加密的密钥对象,请执行以下操作以帮助保护密钥:-
加密静态密钥数据
(Kubernetes 文档)。 -
AWS KMS 用于对 Kubernetes 机密进行信封加密。这允许您使用唯一的数据密钥加密您的机密。您可以使用 AWS KMS 密钥加密密钥来加密数据密钥。您可以定期自动轮换密钥加密密钥。使用适用于 Kubernetes 的 AWS KMS 插件,所有 Kubernetes 机密都存储在密文中。
etcd
它们只能由 Kubernetes API 服务器解密。有关更多信息,请参阅使用 Amazon EKS 加密提供商支持进行深度防御和使用现有集群加密 Kubernetes 密钥。 AWS KMS -
通过基于角色的访问控制(RBAC)规则启用或配置授权,来限制读写密钥。限制创建新密钥或替换现有密钥的权限。有关更多信息,请参阅 Authorization overview
(Kubernetes 文档)。 -
如果您要在一个 Pod 中定义多个容器,并且其中只有一个容器需要访问密钥,请定义卷挂载,使其他容器无法访问该密钥。作为卷挂载的密钥将实例化为
tmpfs
卷,并在删除 pod 时自动从节点中删除。您也可以使用环境变量,但我们不建议使用这种方法,因为环境变量的值可能会出现在日志中。有关更多信息,请参阅 Secrets(Kubernetes 文档)。 -
如果可能,避免授予对命名空间中密钥的
watch
和list
请求的访问权限。在 Kubernetes API 中,这些请求非常强大,因为它们允许客户端检查该命名空间中每个密钥的值。 -
仅允许集群管理员访问
etcd
,包括只读访问权限。 -
如果有多个
etcd
实例,确保etcd
使用 TLS 在etcd
对等机之间进行通信。
-
-
如果您使用的是 ASCP,请执行以下操作来帮助保护密钥:
-
使用服务账户的 IAM 角色,限制只有经过授权的 pod 才能访问密钥。
-
使用加密提供商(GitHub 存储库)使用客户托管的 KMS 密钥实现信封AWS 加密
,从而启用 Kubernetes 密钥的加密。
-
-
为了帮助降低环境变量造成数据泄露的风险,我们建议您使用AWS Secrets Manager 和 Config Provider for Secret Store CSI 驱动程序
(GitHub)。该驱动程序允许您使存储在 Secrets Manager 中的密钥和存储在 Parameter Store 中的参数显示为挂载在 Kubernetes Pod 中的文件。 注意
AWS Fargate 不支持。
-
创建 Amazon CloudWatch 指标筛选器和警报,以针对管理员指定的操作发送警报,例如删除密钥或在等待删除期间使用密钥版本。有关更多信息,请参阅 Creating an alarm based on anomaly detection。