AWS ECR跨账号Dev角色推送权限异常问题求助
ECR仓库跨账号角色推送权限问题排查
问题背景
生产账号(prod account)下有一个ECR仓库,需要给开发账号(dev account)的角色开放推送权限。当前仓库策略配置如下:
{ "Version": "2008-10-17", "Statement": [ { "Sid": "AllowPushPull", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::account:role/rolename", "arn:aws:sts::account:assumed-role/rolename/instance", "arn:aws:sts::account:assumed-role/rolename/AWSCLI-Session" ] }, "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:CompleteLayerUpload", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:GetRepositoryPolicy", "ecr:InitiateLayerUpload", "ecr:ListImages", "ecr:PutImage", "ecr:PutLifecyclePolicy", "ecr:SetRepositoryPolicy", "ecr:StartLifecyclePolicyPreview", "ecr:UploadLayerPart" ] } ] }
执行aws sts get-caller-identity已确认拿到角色身份arn:aws:sts::account:assumed-role/rolename/AWSCLI-Session,但推送镜像时一直重试直到超时,错误信息:
The push refers to repository
[account.dkr.ecr.us-west-2.amazonaws.com/repo] 87e2ce75493a: Retrying
in 4 seconds
开发账号部署在us-east-1区域,但登录命令指定了us-west-2:
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin account.dkr.ecr.us-west-2.amazonaws.com
生产账号操作该仓库一切正常,且开发账号用IAM用户授权时也能正常推送。
问题原因及解决办法
核心原因:仓库策略的Principal账号ID错误
你当前仓库策略里的Principal ARN中,account占位符没替换成开发账号的实际ID,大概率用了生产账号ID或者直接保留了占位符。
跨账号用IAM角色访问ECR时,Principal必须指定开发账号的角色ARN(或其STS临时身份ARN),且ARN里的账号ID必须是开发账号的ID,不是生产账号的。
修复步骤
- 获取开发账号ID:在开发账号环境执行
aws sts get-caller-identity,复制返回结果里的Account字段值。 - 修正仓库策略:把策略中Principal下所有ARN里的
account替换成开发账号的实际ID,示例如下:"Principal": { "AWS": [ "arn:aws:iam::DEV_ACCOUNT_ID:role/rolename", "arn:aws:sts::DEV_ACCOUNT_ID:assumed-role/rolename/instance", "arn:aws:sts::DEV_ACCOUNT_ID:assumed-role/rolename/AWSCLI-Session" ] } - 检查开发角色权限:确认开发账号的角色是否有
ecr:GetAuthorizationToken权限——这是执行docker login的必要条件,需要在开发账号的IAM角色策略中添加:{ "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" }
额外排查点
- 核对Docker镜像标签是否正确指向生产账号的ECR仓库地址,避免拼写错误。
- 测试网络连通性:用
telnet account.dkr.ecr.us-west-2.amazonaws.com 443确认开发环境能访问us-west-2区域的ECR服务。
内容的提问来源于stack exchange,提问作者Brandon Kauffman
相关产品推荐
相关产品推荐

