GitHub Actions推送Docker镜像遇403错误,IAM策略排查求助
解决GitHub Actions推送ECR镜像时的403 Forbidden错误
常见问题修复方案
1. 补充必要的ECR权限
当前的IAM策略缺少部分关键权限,导致无法完成镜像推送流程。需要添加以下权限:
ecr:DescribeRepositories:用于验证目标仓库是否存在ecr:GetRepositoryPolicy:获取仓库权限策略,部分场景下buildx会用到
更新后的IAM策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:CompleteLayerUpload", "ecr:GetAuthorizationToken", "ecr:UploadLayerPart", "ecr:InitiateLayerUpload", "ecr:BatchCheckLayerAvailability", "ecr:PutImage", "ecr:DescribeRepositories", "ecr:GetRepositoryPolicy" ], "Resource": "*" } ] }
如果需要自动创建ECR仓库,再额外添加ecr:CreateRepository权限,并锁定到具体仓库ARN(避免全局权限过大):
{ "Effect": "Allow", "Action": "ecr:CreateRepository", "Resource": "arn:aws:ecr:你的AWS区域:你的AWS账号ID:repository/你的仓库名称" }
2. 锁定资源范围(可选)
虽然用Resource: "*"能覆盖所有资源,但更安全的做法是将权限限定到目标ECR仓库的ARN,替换策略中的Resource值:
"Resource": "arn:aws:ecr:你的AWS区域:你的AWS账号ID:repository/你的仓库名称"
3. 检查GitHub Actions凭证配置
- 确认GitHub Secrets里的
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY属于拥有上述IAM策略的用户/角色 - 检查凭证是否过期、未被禁用
- 如果用IAM角色,要确保角色的信任关系允许GitHub Actions的身份访问
4. 验证ECR仓库自身权限
登录AWS控制台,进入目标ECR仓库的“权限”页面,确认仓库的访问策略允许当前IAM实体执行镜像推送操作。
5. 核对buildx命令格式
确保GitHub Actions中的buildx推送命令使用正确的ECR镜像地址格式:
docker buildx build --push --tag 你的AWS账号ID.dkr.ecr.你的AWS区域.amazonaws.com/你的仓库名称:版本标签 .
内容的提问来源于stack exchange,提问作者Divy
相关产品推荐
相关产品推荐

