使用helm push推送至AWS ECR时遭遇403 Forbidden错误求助
以下是可能的原因及对应的解决步骤:
ECR仓库权限配置不完整
即使EC2实例绑定了IAM角色,需确认角色权限是否覆盖OCI artifact推送所需的所有操作:ecr:PutImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload,而不仅仅是Docker镜像推送权限。
解决:检查IAM角色的权限策略,确保包含上述操作,且资源范围明确指向目标ECR仓库(例如arn:aws:ecr:ap-southeast-1:账号ID:repository/sit-helm-chart)。Helm未完成ECR OCI仓库登录
Helm推送OCI artifact需要先完成ECR仓库的认证登录,若未执行登录或会话已过期,会触发403错误。
解决:重新执行登录命令:aws ecr get-login-password --region ap-southeast-1 | helm registry login --username AWS --password-stdin xxx.dkr.ecr.ap-southeast-1.amazonaws.com确认登录成功后再执行
helm push。目标Chart版本已存在于ECR仓库
ECR不允许覆盖已存在的同一版本OCI artifact,这种场景下也会返回403错误(错误码易混淆为权限问题)。
解决:登录ECR控制台检查是否已有0.1.1版本的Chart,若存在则删除现有版本,或修改Chart的version字段后重新推送。ECR仓库的Repository Policy限制
EC2的IAM角色有权限,但ECR仓库自身的Repository Policy可能拒绝了该角色的推送操作。
解决:进入ECR仓库的「权限」页面,检查Repository Policy是否允许目标IAM角色执行推送相关的ECR操作,若缺失则添加对应的允许规则。AWS认证上下文异常
EC2实例的IAM角色可能未正确加载,或本地AWS配置文件(~/.aws/config/credentials)覆盖了实例角色的认证身份。
解决:执行aws sts get-caller-identity确认当前使用的身份是预期的EC2 IAM角色;若存在自定义配置文件,通过export AWS_PROFILE=default切换到正确的认证上下文。Helm推送路径格式错误
推送Helm Chart到ECR OCI仓库时,路径格式需符合规范,若路径错误会触发权限类报错。
解决:确保推送命令的格式正确,例如:helm push ./your-chart-directory oci://xxx.dkr.ecr.ap-southeast-1.amazonaws.com无需在OCI路径后追加仓库名,Helm会自动匹配本地Chart名与ECR仓库名。
内容的提问来源于stack exchange,提问作者maantarng

