ECR 跨账户拉取权限

ECR 跨账户拉取权限

我们有两个 AWS 账户。账户 A 有 ECR 存储库,而账户 B 可以从中提取数据。

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

我努力了:

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

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

在 IAM 内添加用户权限相同帐户运作良好。

我尝试根据该政策添加的操作包括:

        "Action": [
            "ecr:BatchGetImage",
            "ecr:GetDownloadUrlForLayer",
            "ecr:GetRepositoryPolicy",
            "ecr:ListImages",
            "ecr:DescribeRepositories"
        ]

知道我可能做错了什么吗?

答案1

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

{
    "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"
        ]
      }
    ]
  }

在此处输入图片描述

答案2

您需要设置一个跨帐户角色供帐户 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

相关内容