Amazon web services 如何为Fargate任务授予上载到S3的正确权限

Amazon web services 如何为Fargate任务授予上载到S3的正确权限,amazon-web-services,amazon-iam,amazon-ecs,aws-fargate,Amazon Web Services,Amazon Iam,Amazon Ecs,Aws Fargate,我想从Fargate任务上传到S3。这可以通过仅指定ExecutionRoleArn而不是同时指定ExecutionRoleArn和TaskRoleArn来实现吗 如果我指定的ExecutionRoleArn附加了以下权限策略: 自定义策略: { "Version": "2012-10-17", "Statement": [ { "Effect": "

我想从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吗?

服务使用
ExecutionRoleArn
正确设置任务,这包括从ECR下拉任何图像

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

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

此外,您还应该拥有ecs.amazonaws.com的端点。事实上,根据您使用ECS的方式,下面列出了完整的服务列表(尽管大多数服务都可以删除,例如,如果您不使用spot,则可以删除spot,如果您不使用autoscaling,则可以删除autoscaling)


您的策略不包括任何
s3
相关权限。因此,您应该在以下位置定义您的
s3
权限:

使用Amazon ECS任务的IAM角色,您可以指定任务中的容器可以使用的IAM角色


在Fargate的案例中,两个IAM角色支付不同的角色

  • 执行角色
这是一个强制角色,即使在
任务角色

要产生此错误,只需设置执行角色=None,您将无法启动任务

  • 任务角色
此角色是可选的,您可以在此角色中添加s3相关权限

可选IAM角色,任务可使用该角色向授权AWS服务发出API请求

你的警察似乎没事

  • 创建ecs\u s3\u上传\u角色
  • 添加以下策略

现在Fargate Task将能够上传到S3 bucket。

很好地解释了这两个角色之间的区别。
"ecs.amazonaws.com",
"ecs-tasks.amazonaws.com",
"spot.amazonaws.com",
"spotfleet.amazonaws.com",
"ecs.application-autoscaling.amazonaws.com",
"autoscaling.amazonaws.com"
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::example_bucket/*"
        }
    ]
}