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

Ant*_*odr 4 amazon-web-services amazon-ecs aws-ecr

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

我在具有对账户B的信任关系的账户A中创建了“跨账户”角色,并且我已经将“ AmazonEC2ContainerRegistryPowerUser”策略附加到了该角色。

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

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

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

Sam*_*arp 10

Fargate不会自动承担跨帐户角色。幸运的是,您无需在另一个帐户中扮演角色即可从该帐户的ECR存储库中提取图像。

要启用跨帐户访问ECR中的图像,请在帐户A的存储库中添加对帐户B的访问权限(通过设置存储库策略),然后在帐户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"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后,将帐户B中的TaskExecutionRole设置为具有以下策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以AmazonECSTaskExecutionRolePolicy对TaskExecutionRole 使用托管策略,而不用定义自己的策略。

  • 塞缪尔的回答非常好。但是,如果有人尝试将资源限制为特定存储库,请保持 GetAuthorizationToken 操作适用于所有资源。意识到这一点很痛苦,但它是这里的文档:https://docs.aws.amazon.com/AmazonECR/latest/userguide/ecr-supported-iam-actions-resources.html (2认同)