AWS ECS Fargate从跨账户ECR存储库提取图像

时间:2018-10-21 11:15:43

标签: amazon-web-services amazon-ecs aws-ecr

我有2个AWS账户: -具有ECR回购的帐户A。 -具有运行Fargate的ECS群集的帐户b。

我已经在账户A中创建了一个“跨账户”角色,并与账户B建立了信任关系。我还为此角色附加了“ AmazonEC2ContainerRegistryPowerUser”策略。

通过在存储库策略中添加帐户B的ID和“跨帐户”角色,我可以访问帐户A中的ECR存储库。

我将策略附加到Fargate的“ TaskExecutionRole”上,使Fargate可以承担“跨帐户”角色。

当尝试通过引用帐户A中的图像在帐户B中部署Fargate任务时,出现500错误。

1 个答案:

答案 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,而不用定义自己的策略。