我们有两个 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