在 Amazon ECS 中是密钥管理最佳实践 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Amazon ECS 中是密钥管理最佳实践

应用程序经常使用诸如 API 密钥和数据库凭证之类的密钥来访问其他系统。它们通常由用户名和密码、证书或 API 密钥组成。对这些密钥的访问应仅限于使用 IAM 并在运行时注入到容器中的特定 IAM 主体。

密钥可以从 Amazon Secrets Manager 和 Amazon EC2 Systems Manager Parameter Store 无缝注入容器中。这些密钥可以在您的任务中作为以下任何内容引用。

  1. 它们被引用为使用 secrets 容器定义参数的环境变量。

  2. 如果您的日志记录平台需要身份验证,它们被引用为 secretOptions。有关更多信息,请参阅日志记录配置选项

  3. 如果从中提取容器的注册表需要身份验证,则使用 repositoryCredentials 容器定义参数的映像将它们作为密钥引用。从 Amazon ECR Public Gallery 中提取映像时使用此方法。有关更多信息,请参阅任务的私有注册表身份验证

密钥建议

在设置密钥管理时,建议您执行以下操作。

使用 Amazon Secrets Manager Amazon EC2 Systems Manager Parameter Store 来存储密钥材料

您应该将 API 密钥、数据库凭证和其他密钥材料安全地存储在 Amazon Secrets Manager 中,或者将其作为加密参数存储在 Amazon EC2 Systems Manager Parameter Store 中。这些服务之所以相似,是因为它们都是使用 Amazon KMS 加密敏感数据的托管键值存储。但是,Amazon Secrets Manager 还包括自动轮换密钥、生成随机密钥和跨 Amazon 账户共享密钥的功能。如果您认为这些功能很重要,请使用 Amazon Secrets Manager 以其他方式使用加密参数。

注意

引用来自 Amazon Secrets Manager 或 Amazon EC2 Systems Manager Parameter Store 的密钥的任务需要一个任务执行角色,其具有授予 Amazon ECS 访问所需密钥以及用于加密和解密该密钥的 Amazon KMS 密钥(如果适用)的策略。

重要

任务中引用的密钥不会自动轮换。如果您的密钥发生更改,则必须强制进行新的部署或启动新任务以检索最新的密钥值。有关更多信息,请参阅以下主题:

从加密的 Amazon S3 存储桶中检索数据

由于环境变量的值可能会无意中泄漏到日志中并在运行 docker inspect 时被显示,因此您应该将密钥存储在加密的 Amazon S3 存储桶中,并使用任务角色来限制对这些密钥的访问。执行此操作时,必须编写应用程序以从 Amazon S3 存储桶中读取密钥。有关说明,请参阅为 Amazon S3 存储桶设置默认服务器端加密行为

使用 sidecar 容器将密钥挂载到卷上

由于环境变量会增加数据泄露的风险,因此您应该运行一个 sidecar 容器,以从 Amazon Secrets Manager 中读取密钥并将其写入共享卷中。通过使用 Amazon ECS 容器排序,此容器可以在应用程序容器之前运行和退出。当您执行此操作时,应用程序容器随后会挂载写入密钥的卷。与 Amazon S3 存储桶方法类似,必须编写您的应用程序以从共享卷中读取密钥。由于该卷的作用域仅限于任务,因此该卷将在任务停止后自动删除。有关 sidecar 容器的示例,请参阅 aws-secret-sidecar-injector 项目。

注意

在 Amazon EC2 上,可使用 Amazon KMS 客户托管密钥对写入密钥的卷进行加密。在 Amazon Fargate 上,使用服务托管密钥自动加密卷存储。

其他 资源