如何跨账号调用aws ecr describe-repositories查询ECR仓库列表
核心说明
aws ecr describe-repositories 接口默认返回调用凭证所属账号下的ECR仓库列表,没有直接传入目标账号ID即可拉取对方全量仓库的参数,直接执行命令仅返回当前账号结果是接口本身的逻辑限制,并非漏填参数。
实现方式
查询目标账号全量ECR仓库列表
全量列举必须通过跨账号角色扮演的方式实现,操作步骤:
- 在目标AWS账号中提前创建IAM角色:
- 信任策略配置为允许当前EC2实例绑定的角色作为可信实体代入
- 权限策略附加
AmazonEC2ContainerRegistryReadOnly托管策略,或自定义包含ecr:DescribeRepositories等所需ECR操作权限的自定义策略
- 在当前EC2实例中执行STS命令代入目标账号角色,获取临时访问凭证:
aws sts assume-role \ --role-arn arn:aws:iam::<目标账号12位ID>:role/<目标账号内创建的跨账号访问角色名> \ --role-session-name cross-account-ecr-query
- 将返回结果中的
AccessKeyId、SecretAccessKey、SessionToken配置为当前终端的临时环境变量,或直接作为参数传入后续AWS CLI命令 - 执行原查询命令即可拿到目标账号下的全量ECR仓库列表:
aws ecr --region <my_region> describe-repositories
查询目标账号下指定名称的ECR仓库详情
如果已知目标账号下的ECR仓库名称,无需列举全量,可直接加--registry-id参数指定目标账号ID查询(前提是已配置对应跨账号访问权限),命令示例:
aws ecr describe-repositories \ --region <my_region> \ --registry-id <目标账号12位ID> \ --repository-names <仓库名1> <仓库名2>
注意:
--registry-id参数不支持在不指定仓库名的情况下拉取全量仓库列表,必须传入具体仓库名才能返回对应结果,无法满足全量列举需求。
补充
后续拉取目标账号ECR仓库中的Docker镜像时,登录命令同样需要指定--registry-id为目标账号ID:
aws ecr get-login-password --region <my_region> --registry-id <目标账号12位ID> | docker login --username AWS --password-stdin <目标账号ID>.dkr.ecr.<my_region>.amazonaws.com
内容的提问来源于stack exchange,提问作者Vincenzo Melandri
相关产品推荐
相关产品推荐

