【问题标题】:give aws s3 read permission to fargate cluster向 Fargate 集群授予 aws s3 读取权限
【发布时间】:2021-06-02 11:50:48
【问题描述】:

我创建了一个 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 用户有权传递此角色。)。时间戳="2021-03-04 12:13:23 +0000 UTC"

我错过了什么?

【问题讨论】:

    标签: amazon-web-services aws-fargate


    【解决方案1】:

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

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

    【讨论】:

    • 我编辑了问题以纳入您的建议。仍然错误
    • @bruvio 是 dashboard_role 任务角色的名称吗?您尚未正确创建该角色。该sts:AssumeRole 语句中的Service 应该是ecs-tasks.amazonaws.com,就像其他角色一样。
    • 那行得通。所以必须添加任务角色以及信任,然后我可以添加我想要的所有策略。不错
    猜你喜欢
    • 2021-08-13
    • 2020-09-27
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2022-10-08
    • 2015-12-26
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多