如何一次性将所有ECR仓库共享给其他AWS账号?
AWS账号下全量ECR仓库跨账号共享方案
AWS原生支持一次性将账号下所有ECR仓库共享给其他AWS账号,无需在控制台逐个仓库配置权限,根据使用场景可选择以下两种落地方式:
方案一:IAM跨账号角色授权(推荐,永久生效覆盖新老仓库)
这个方案不需要修改任何单个ECR仓库的策略,配置完成后,对端账号不仅能访问当前所有已存在的ECR仓库,后续你账号下新建的ECR仓库也会自动对其开放对应权限,不需要重复配置。
- 在你的ECR资源持有账号中创建一个IAM角色,将角色信任关系配置为允许对端账号的主体担任该角色,信任策略示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<对端AWS账号ID>:root" }, "Action": "sts:AssumeRole" } ] }
- 给该角色绑定ECR访问权限策略,资源范围指定为所有ECR资源即可,不需要限定具体仓库,基础拉取权限的策略示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer", "ecr:ListImages" ], "Resource": "*" } ] }
如果需要给对端开放镜像推送、删除、仓库配置修改等写权限,直接在Action数组中补充对应的ECR操作项即可。
- 通知对端账号的用户通过STS担任该角色,即可访问你账号下的全量ECR资源。
方案二:AWS CLI批量更新现有仓库策略
如果不想使用跨账号角色扮演的授权方式,需要直接给对端账号授予所有仓库的原生访问权限,可以通过AWS CLI批量遍历仓库写入策略,不需要手动逐个配置:
- 先导出当前区域下所有ECR仓库的名称列表:
aws ecr describe-repositories --query 'repositories[].repositoryName' --output text | tr '\t' '\n' > ecr_repos.txt
- 执行循环命令,批量给所有仓库添加跨账号访问策略:
TARGET_ACCOUNT_ID="<填入对端AWS账号ID>" while read repo; do aws ecr set-repository-policy \ --repository-name $repo \ --policy-text "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"CrossAccountAccess\", \"Effect\": \"Allow\", \"Principal\": { \"AWS\": \"arn:aws:iam::${TARGET_ACCOUNT_ID}:root\" }, \"Action\": [ \"ecr:BatchCheckLayerAvailability\", \"ecr:BatchGetImage\", \"ecr:GetDownloadUrlForLayer\" ] } ] }" done < ecr_repos.txt
注意:该方案仅会给执行命令时已经存在的ECR仓库添加权限,后续新建的ECR仓库不会自动继承该授权,需要重新执行脚本或单独配置。
补充场景
如果两个账号属于同一个AWS Organization组织,可直接在组织层面配置服务控制策略(SCP),给组织内指定账号集授予全量ECR访问权限,无需逐账号、逐仓库做配置。
内容的提问来源于stack exchange,提问作者jessefournier
相关产品推荐
相关产品推荐

