【问题标题】:How to give a Fargate Task the right permissions to upload to S3如何为 Fargate 任务提供上传到 S3 的正确权限
【发布时间】:2020-10-30 22:49:53
【问题描述】:

我想从 Fargate 任务上传到 S3。这可以通过仅指定 ExecutionRoleArn 而不是同时指定 ExecutionRoleArn 和 TaskRoleArn 来实现吗?

如果我指定一个附加了以下权限策略的 ExecutionRoleArn:

自定义政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::example_bucket/*"
        }
    ]
}

AmazonECSTaskExecutionRolePolicy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

具有以下信任关系:

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

这是否足以让任务上传到 S3?还是我需要定义一个 TaskRoleArn?

【问题讨论】:

    标签: amazon-web-services amazon-iam amazon-ecs aws-fargate


    【解决方案1】:

    服务使用ExecutionRoleArn 来正确设置任务,这包括从 ECR 中提取任何图像。

    任务使用TaskRoleArn 为其提供与其他 AWS 服务(例如 S3)交互所需的权限。

    从技术上讲,两个 Arns 可能是相同的,但我建议将它们分开为不同的角色,以避免混淆角色用于两种场景所需的权限。

    此外,您应该拥有ecs.amazonaws.com 的端点。事实上,根据您使用 ECS 的方式,服务的完整列表如下(尽管大多数可以删除,例如如果您不使用 Spot,则可以删除大部分服务,如果您不使用自动缩放,则可以删除自动缩放)。

    "ecs.amazonaws.com",
    "ecs-tasks.amazonaws.com",
    "spot.amazonaws.com",
    "spotfleet.amazonaws.com",
    "ecs.application-autoscaling.amazonaws.com",
    "autoscaling.amazonaws.com"
    

    【讨论】:

    • 很好地解释了这两个角色之间的区别。
    【解决方案2】:

    在 Fargate 的情况下,两个 IAM 角色支付不同的角色

    • 执行角色

    这是角色是强制性的,没有这个角色你不能运行任务,即使你在 Task Role 中添加了 ExecutionRole 策略

    要产生此错误,只需设置 Execution role =None,您将无法启动任务。

    AWS Forums (Unable to create a new revision of Task Definition)

    • 任务角色

    这个角色是可选的,你可以在这个角色中添加s3相关的权限,

    任务可用于向授权的 AWS 服务发出API 请求的可选 IAM 角色。

    你的警察看起来还不错,

    • 创建 ecs_s3_upload_role
    • 添加以下政策
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::example_bucket/*"
            }
        ]
    }
    

    现在 Fargate 任务将能够上传到 S3 存储桶。

    【讨论】:

      【解决方案3】:

      您的政策不包含任何与s3 相关的权限。因此,您应该在task role 中定义您的s3 权限:

      借助 Amazon ECS 任务的 IAM 角色,您可以指定一个可由任务中的容器使用的 IAM 角色。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        • 2021-10-18
        • 1970-01-01
        • 2021-12-18
        • 2011-04-08
        • 1970-01-01
        相关资源
        最近更新 更多