将敏感数据传递给 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 Systems Manager Parameter Store 来存储密钥材料

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

重要

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

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

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

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

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

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