执行ECR镜像推送命令遇AccessDeniedException,如何解决?
根据错误提示,你的IAM用户被**身份型策略中的显式拒绝(Explicit Deny)**阻止执行ecr:GetAuthorizationToken操作——AWS权限模型中,显式拒绝的优先级高于任何允许策略,哪怕你已经附加了AmazonEC2ContainerRegistryPowerUser。按以下步骤排查并解决:
1. 检查IAM用户直接关联的策略
- 登录AWS IAM控制台,找到目标用户(
example.gmail.com) - 切换到「权限」标签,查看「直接关联的策略」列表
- 逐一检查每个策略内容,确认是否存在类似规则:
{ "Effect": "Deny", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } - 若找到,移除该策略或修改其中的拒绝规则。
2. 检查用户所属IAM组的策略
- 在用户详情页的「组」标签,查看用户加入的所有IAM组
- 逐个进入组的权限页面,检查组关联策略中是否包含针对
ecr:GetAuthorizationToken的显式拒绝 - 若存在,移除对应策略或调整规则。
3. 检查IAM权限边界(Permission Boundary)
- 在用户「权限」标签的「权限边界」区域,查看是否设置了边界策略
- 查看边界策略内容,确认是否包含对
ecr:GetAuthorizationToken的拒绝规则 - 如果有,要么修改边界策略移除拒绝规则,要么更换为允许该操作的权限边界。
4. 检查AWS组织的服务控制策略(SCP)
- 如果你的账号属于AWS Organization,登录Organizations控制台
- 查看当前账号所在OU或根组织的SCP策略
- 确认是否存在拒绝
ecr:GetAuthorizationToken的规则(SCP会作用于组织内所有账号的IAM实体) - 若存在,需联系组织管理员修改或移除该SCP。
补充验证
完成修改后,重新执行登录命令:
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 123123.dkr.ecr.ap-northeast-2.amazonaws.com
若仍有问题,可通过以下命令模拟权限检查,定位具体拒绝来源:
aws iam simulate-principal-policy \ --policy-source-arn arn:aws:iam::123123:user/example.gmail.com \ --action-names ecr:GetAuthorizationToken \ --resource-arns "*"
内容的提问来源于stack exchange,提问作者gotqks
相关产品推荐
相关产品推荐

