授予 aws s3 对 fargate 集群的读取权限

时间:2021-03-03 20:52:00

标签: amazon-web-services aws-fargate

我创建了一个 AWS fargate 集群

现在我更改了 docker 镜像,以便从 s3 读取输入数据。 在开发人员阶段,我通过环境变量传递凭据并且容器工作

现在在 AWS 上我想我应该添加一个策略

我首先创建一个角色

iam_role='ecsTaskExecutionRole'
aws iam wait role-exists --role-name $iam_role 2>/dev/null || \ aws iam --region $REGION create-role --role-name $iam_role \
  --assume-role-policy-document file://task-execution-assume-role.json || return 1
 

aws iam --region $REGION attach-role-policy --role-name $iam_role \
  --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy || return 1

我传递的 Json 文件只包含:

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
          "Service": "ecs-tasks.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  

然后我创建另一个角色,它应该是任务角色,使容器能够从 S3 读取

aws iam wait role-exists --role-name $task_role 2>/dev/null || \ 
aws iam --region $REGION create-role --role-name $task_role \
  --assume-role-policy-document file://task-role.json || return 1


aws iam --region $REGION attach-role-policy --role-name $task_role \
  --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess || return 1

在这种情况下,我传递的 json 是:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

当我创建服务时,我还传递了一个 ecs-params.yml 文件

version: 1
task_definition:
  task_role_arn: ${task_role}
  task_execution_role: ${task_execution_role}
  ecs_network_mode: awsvpc
  task_size:
    mem_limit: 0.5GB
    cpu_limit: 256
run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - ${subnet1}
        - ${subnet2}
      security_groups:
        - ${secgroupid}
      assign_public_ip: ENABLED

我得到的错误是:

INFO[0016](服务仪表板)无法启动任务(错误 ECS 无法承担为此任务提供的角色“arn:aws:iam::accountID:role/dashboard_role”。请验证传递的角色具有适当的信任关系和权限,并且您的 IAM 用户有权传递此角色。)。 timestamp="2021-03-04 12:13:23 +0000 UTC"

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您可以为 ECS Fargate 任务分配两个 IAM 角色。 "Task Execution Role" 允许 ECS 部署您的 Fargate 任务,而 "Task Role" 允许运行在容器内的代码调用 AWS API。

检查除了任务执行角色之外,您是否还有分配给 Fargate 任务定义的任务角色,并将 S3 权限添加到任务角色而不是任务执行角色。