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

如何允许多企业AWS账号从我方私有ECR仓库拉取镜像与Helm Chart

实现合作方访问私有ECR仓库(镜像+Helm Chart)及IAM配置建议

一、ECR仓库准备

  • 创建对应类型的ECR仓库:
    • 存储容器镜像:创建标准ECR仓库
    • 存储Helm Chart:选择「Helm chart」类型的ECR仓库(AWS ECR原生支持OCI格式的Helm Chart存储)
  • 推送资源到仓库:
    • 镜像推送:先执行登录命令aws ecr get-login-password --region <你的区域> | docker login --username AWS --password-stdin <你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com,给镜像打标签后用docker push <你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com/<镜像仓库名>:<标签>完成推送
    • Helm Chart推送:执行登录命令aws ecr get-login-password --region <你的区域> | helm registry login --username AWS --password-stdin <你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com,然后用helm push <本地Chart包路径> oci://<你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com/<Chart仓库名>推送

二、IAM权限配置(核心)

需为合作方配置最小权限的访问实体,优先用IAM角色(更安全),特殊场景下用IAM用户。

方式1:合作方拥有AWS账号(推荐)

  • 创建IAM角色,设置信任策略允许合作方账号的实体扮演该角色:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<合作方账号ID>:root"
          },
          "Action": "sts:AssumeRole",
          // 可选:添加IP限制等条件增强安全性
          "Condition": {
            "IpAddress": {
              "aws:SourceIp": ["合作方固定IP段"]
            }
          }
        }
      ]
    }
    
  • 给角色附加拉取权限策略,严格限定资源范围:
    {
      "Version": "2012-10-17",
      "Statement": [
        // 镜像仓库拉取权限
        {
          "Effect": "Allow",
          "Action": [
            "ecr:GetDownloadUrlForLayer",
            "ecr:BatchGetImage",
            "ecr:BatchCheckLayerAvailability",
            "ecr:DescribeImages"
          ],
          "Resource": "arn:aws:ecr:<你的区域>:<你的账号ID>:repository/<镜像仓库名>"
        },
        // Helm Chart仓库拉取权限
        {
          "Effect": "Allow",
          "Action": [
            "ecr:GetDownloadUrlForLayer",
            "ecr:BatchGetImage",
            "ecr:BatchCheckLayerAvailability",
            "ecr:DescribeImages",
            "ecr:GetRepositoryPolicy",
            "ecr:DescribeRepositories",
            "ecr:ListImages"
          ],
          "Resource": "arn:aws:ecr:<你的区域>:<你的账号ID>:repository/<Chart仓库名>"
        },
        // 获取授权令牌的必要权限
        {
          "Effect": "Allow",
          "Action": "ecr:GetAuthorizationToken",
          "Resource": "*"
        }
      ]
    }
    
  • 合作方通过aws sts assume-role --role-arn arn:aws:iam::<你的账号ID>:role/<角色名> --role-session-name <自定义会话名>获取临时凭证,用该凭证访问ECR。

方式2:合作方无AWS账号(用IAM用户)

  • 创建IAM用户,禁用控制台访问,仅开启程序访问(生成Access Key和Secret Key)
  • 给用户附加上述相同的最小权限策略
  • 通过加密渠道(如线下加密传输、AWS Secrets Manager共享)将密钥安全传递给合作方

三、合作方拉取资源操作步骤

拉取镜像

  1. 配置凭证后登录ECR:
    • 临时角色凭证:先设置环境变量export AWS_ACCESS_KEY_ID=<临时AK> AWS_SECRET_ACCESS_KEY=<临时SK> AWS_SESSION_TOKEN=<会话Token>,再执行登录命令
    • IAM用户密钥:直接执行aws ecr get-login-password --region <你的区域> | docker login --username AWS --password-stdin <你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com(需提前配置本地AWS凭证)
  2. 拉取镜像:docker pull <你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com/<镜像仓库名>:<标签>

拉取Helm Chart

  1. 配置凭证后登录ECR Helm仓库:执行aws ecr get-login-password --region <你的区域> | helm registry login --username AWS --password-stdin <你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com
  2. 拉取Chart:helm pull oci://<你的账号ID>.dkr.ecr.<你的区域>.amazonaws.com/<Chart仓库名> --version <目标版本号>

四、IAM配置最佳实践

  • 严格遵循最小权限:仅授予合作方拉取指定仓库的必要权限,避免使用ecr:*这类宽泛权限
  • 优先使用IAM角色:临时凭证自动过期,避免长期密钥泄露风险
  • 密钥轮换与监控:若使用IAM用户,强制开启密钥轮换;开启CloudTrail日志,跟踪ECR访问行为
  • 定期审计权限:每隔一段时间检查IAM实体权限,移除冗余权限或废弃实体
  • 添加信任条件:为IAM角色的信任策略添加IP、用户等限制条件,进一步缩小访问范围

内容的提问来源于stack exchange,提问作者unbox-us

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:39:40