如何为 Fargate 任务提供上传到 S3 的正确权限
Posted
技术标签:
【中文标题】如何为 Fargate 任务提供上传到 S3 的正确权限【英文标题】:How to give a Fargate Task the right permissions to upload to 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?
【问题讨论】:
【参考方案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 角色。
【讨论】:
以上是关于如何为 Fargate 任务提供上传到 S3 的正确权限的主要内容,如果未能解决你的问题,请参考以下文章