无法将更新后的ECS镜像部署到现有服务,CodeBuild拉取ECR镜像报错如何解决
问题修复步骤
该错误的核心原因是CodeBuild执行任务时使用的IAM服务角色缺少对应ECR镜像仓库的拉取权限,或未完成ECR登录认证、镜像地址填写错误导致的,可按以下步骤排查修复:
1. 为CodeBuild服务角色附加ECR权限
- 打开IAM控制台,找到你的CodeBuild项目对应的服务角色,角色名默认格式为
codebuild-<项目名>-service-role - 为该角色附加以下自定义权限策略,注意替换
<region>、<AWS账号ID>、<ECR仓库名>为你的实际参数:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ], "Resource": "arn:aws:ecr:<region>:<AWS账号ID>:repository/<ECR仓库名>" }, { "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }
2. 检查buildspec配置的ECR登录逻辑
如果是构建过程中需要拉取ECR中的基础镜像,确认buildspec.yml的pre_build阶段已添加ECR登录命令:
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <AWS账号ID>.dkr.ecr.<region>.amazonaws.com
3. 校验镜像地址正确性
检查CodeBuild配置或buildspec中填写的ECR镜像地址是否完全匹配已推送的镜像地址,标准格式为:<AWS账号ID>.dkr.ecr.<region>.amazonaws.com/<仓库名>:<镜像标签>
确认仓库名、标签、区域、账号ID无拼写错误,镜像已经成功推送到对应ECR仓库。
额外排查项
- 如果ECR仓库配置了VPC私有端点,确认CodeBuild的VPC配置可以正常访问该私有端点
- 确认ECR仓库没有设置额外的资源策略,禁止对应账号的CodeBuild角色访问
内容的提问来源于stack exchange,提问作者rubyist
相关产品推荐
相关产品推荐

