ECR跨账户拉取权限

Ama*_*dil 11 amazon-web-services amazon-ecs

我们有两个 AWS 账户。账户 A 有 ECR 存储库,账户 B 旨在能够从中提取。

我尝试在账户 A 中设置存储库权限声明以允许从账户 B 中提取,但 AWS 声称我的策略无效。

我试过了:

  • 设置principal为Account B的账号,结果报错 Your permission statements have one or more invalid parameters. Invalid parameter at 'PolicyText' failed to satisfy constraint: 'Invalid repository policy provided'
  • 将委托人设置为账户 B ( arn:aws:iam::1234567891011:root) 中root 用户的 ARN 。这导致错误The service name arn:aws:iam::1234567891011:root is invalid. A valid service name format is [service].amazonaws.com.
  • 将委托人设置为账户 B 中 IAM 用户的 ARN。与上述相同的错误。

以上是通过 AWS 控制台完成的,该控制台不允许直接编辑 JSON 以获得 ECR 权限。我已经尝试了aws ecr set-repository-policy具有上述更改的 CLI 命令,但在终端中返回了相同的错误。

同一账户中的IAM 用户添加权限工作正常。

我尝试在该政策下添加的操作是:

        "Action": [
            "ecr:BatchGetImage",
            "ecr:GetDownloadUrlForLayer",
            "ecr:GetRepositoryPolicy",
            "ecr:ListImages",
            "ecr:DescribeRepositories"
        ]
Run Code Online (Sandbox Code Playgroud)

任何想法我可能做错了什么?

小智 7

您还需要在 ECR 中配置权限以进行跨账户访问。要向账户 B 授予对账户 A 的 ECR 的拉取访问权限,请将以下 JSON 策略放在 ECR 权限选项卡中。

{
    "Version": "2008-10-17",
    "Statement": [
      {
        "Sid": "AllowCrossAccountPull",
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:aws:iam::aws_account_b_number:root"
        },
        "Action": [
          "ecr:GetDownloadUrlForLayer",
          "ecr:BatchCheckLayerAvailability",
          "ecr:BatchGetImage"
        ]
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


str*_*gjz 1

您需要为账户 b 设置跨账户角色来承担。

在具有注册表 A 的帐户中创建跨帐户角色,授予对角色中注册表的访问权限。并授予账户 B 担任该角色的权限。

http://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

http://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html