我有2个AWS账户: -具有ECR回购的帐户A。 -具有运行Fargate的ECS群集的帐户b。
我已经在账户A中创建了一个“跨账户”角色,并与账户B建立了信任关系。我还为此角色附加了“ AmazonEC2ContainerRegistryPowerUser”策略。
通过在存储库策略中添加帐户B的ID和“跨帐户”角色,我可以访问帐户A中的ECR存储库。
我将策略附加到Fargate的“ TaskExecutionRole”上,使Fargate可以承担“跨帐户”角色。
当尝试通过引用帐户A中的图像在帐户B中部署Fargate任务时,出现500错误。
答案 0 :(得分:5)
Fargate不会自动承担跨帐户角色。幸运的是,您无需在另一个帐户中扮演角色即可从该帐户的ECR存储库中提取图像。
要启用跨帐户访问ECR中的图像,请在帐户A的存储库中添加对帐户B的访问权限(通过设置repository policy),然后在帐户B中指定一个具有从ECR提取权限的TaskExecutionRole (“ ecr:GetDownloadUrlForLayer”,“ ecr:BatchGetImage”,“ ecr:BatchCheckLayerAvailability”。
例如,在帐户A的存储库中设置存储库策略,如下所示:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountPull",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT_B_ID:root"
},
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage"
]
}
]
}
然后,将帐户B中的TaskExecutionRole设置为具有以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
],
"Resource": "*"
}
]
}
或者,您可以将托管策略AmazonECSTaskExecutionRolePolicy
用于TaskExecutionRole,而不用定义自己的策略。