You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,不是生产账号的。

修复步骤

  1. 获取开发账号ID:在开发账号环境执行aws sts get-caller-identity,复制返回结果里的Account字段值。
  2. 修正仓库策略:把策略中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"
      ]
    }
    
  3. 检查开发角色权限:确认开发账号的角色是否有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:51:06