Ric*_*fer 3 amazon-ec2 amazon-web-services amazon-ecr
我有两个帐户,a1并且a2.
我在 a1, 中有一个 EC2 实例a1.ec2。它在该帐户中承担某些角色a1.r。此角色具有对所有 ECR 操作的完全访问权限。
现在,我有一个图像注册表 (ECR),a2并且希望能够从a1.ec2.
因此,我通过 ssh 进入该实例,并为了测试我运行的访问
aws ecr describe-repositories --region <my-region> --registry-id <id of a2>
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
An error occurred (AccessDeniedException) when calling the DescribeRepositories operation: User: arn:aws:sts::<id of a1>:assumed-role/a1.r/i-075fad654b998275c is not authorized to perform: ecr:DescribeRepositories on resource: arn:aws:ecr:*:*:repository/*
Run Code Online (Sandbox Code Playgroud)
然而,这个权限确实是授予了该角色的a1.r。我通过能够a1很好地访问 ECR 来验证这一点。
另外,我喜欢访问的 ECR 具有以下权限策略,因此我确保问题不是由以下 ECR 引起的a2:
{
"Sid": "new statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<id of a1>:root"
},
"Action": "*"
},
{
"Sid": "new statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<id of a1>:role/a1.r"
},
"Action": "*"
}
Run Code Online (Sandbox Code Playgroud)
我查看了https://serverfault.com/questions/897392/ecr-cross-account-pull-permissions,其中解决方案似乎是创建跨帐户角色。尽管我可以创建这样的角色a2.cross-acc-r,但我不知道如何为aws ecrcli 命令承担该角色。我不希望 EC2 实例承担该角色,因为它驻留在不同的帐户中(甚至不确定这是否可能)。
我是否缺乏有关 AWS IAM 工作原理的一些基本知识?
如果您想要将镜像从一个账户的 EC2 实例拉取和推送到另一个账户的 ECR,并且不需要完整的aws ecrCLI 功能,您可以通过 docker 来完成此操作。例如,如果您希望 Jenkins 根据不同 AWS 账户中的目标环境(生产、暂存)将构建的映像推送到 ECR 中。
通过 docker 执行此操作的记录位于https://aws.amazon.com/premiumsupport/knowledge-center/ secondary-account-access-ecr/
简而言之,在 ECR 存储库中,您向其他帐户授予所需的权限。
然后,您将获得一个临时身份验证令牌,通过以下方式向 docker 授权 ECR:
$(aws ecr get-login --registry-ids <account ID> --region <your region> --no-include-email)
Run Code Online (Sandbox Code Playgroud)
之后,您可以使用docker pull和docker push来访问它。
| 归档时间: |
|
| 查看次数: |
22824 次 |
| 最近记录: |