首页 > 解决方案 > 在 ECS 服务中存储 AWS 凭证的位置

问题描述

我有一个 ECS 服务,它需要 AWS 凭证。我使用 ECR 存储 docker 图像和 jenkins,仅对 VPN 连接可见以构建图像。

我看到了向服务提供 AWS 凭证的 2 种可能性

  1. 将它们存储为 Jenkins 机密并在构建期间插入到 docker 映像中
  2. 在创建 ECS 任务定义时使它们成为环境的一部分

什么更安全?还有其他可能性吗?

标签: amazon-web-servicesamazon-ecs

解决方案


首先,在 AWS 中工作时,您不应该使用 AWS 凭证,您应该将角色分配给任务定义或服务,而不是将凭证传递给 docker build 或任务定义。

借助 Amazon ECS 任务的 IAM 角色,您可以指定任务中的容器可以使用的 IAM 角色。应用程序必须使用 AWS 凭证签署其 AWS API 请求,并且此功能提供了一种管理凭证的策略以供您的应用程序使用,类似于 Amazon EC2 实例配置文件向 EC2 实例提供凭证的方式

所以有时底层应用程序没有以可以使用角色的方式设计,所以在此我建议将 ENV 存储在任务定义中,但再次从哪里获取 ENV 的值?

任务定义支持两种处理 ENV 的方法,

  • 纯文本作为直接值
  •  对 ECS 任务定义使用“valueFrom”属性

以下是显示引用Systems Manager Parameter Store 参数时格式的任务定义片段。

{
  "containerDefinitions": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
    }]
  }]
}

这是 AWS 文档中最安全和推荐的方法,因此与任务定义中纯文本中的 ENV 或 Dockerfile 中的 ENV 相比,这是更好的方法。

您可以在此处阅读更多信息和系统管理器参数存储

但要使用这些,您必须提供任务定义权限以访问系统管理器参数存储。


推荐阅读