【问题标题】:Where to store AWS credentials in ECS service在 ECS 服务中存储 AWS 凭证的位置
【发布时间】:2020-01-13 11:10:42
【问题描述】:

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

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

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

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

【问题讨论】:

标签: amazon-web-services amazon-ecs


【解决方案1】:

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

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

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

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

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

以下是任务定义的 sn-p,显示了引用 Systems Manager Parameter Store parameter 时的格式。

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

这是最安全的,recommended method by AWS documentation 因此与任务定义中纯文本中的 ENV 或 Dockerfile 中的 ENV 相比,这是更好的方法。

你可以阅读更多heresystems-manager-parameter-store

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多