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

CDK 2.x:如何为AWS组织/组织单元内账户授予ECR拉取权限?

AWS组织/跨账户ECR仓库拉取权限配置

你之前的代码是给特定IAM用户授予拉取权限,要实现基于组织单元(OU)或单独账户的跨账户访问,需要直接给ECR仓库添加资源策略,而非通过IAM用户授权。以下是完整的TypeScript实现:

核心代码实现

import * as iam from 'aws-cdk-lib/aws-iam';
import * as ecr from 'aws-cdk-lib/aws-ecr';

// 1. 配置授权目标(替换为实际值)
const YOUR_ORG_ID = 'o-xxxxxxxxxx'; // 你的AWS组织ID
const ALLOWED_OUS = ['ou-xxxx-yyyyyyyy', 'ou-xxxx-zzzzzzzz']; // 允许访问的OU ID列表
const ALLOWED_ACCOUNTS = ['123456789012']; // 额外允许的单独账户ID(可选)

// 假设你的ECR仓库实例已经定义,比如:
// const repository = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'my-repo-name');

// 2. 构建OU权限策略语句
const ouPolicyStatements = ALLOWED_OUS.map(ouId => new iam.PolicyStatement({
  actions: [
    'ecr:GetDownloadUrlForLayer',
    'ecr:BatchGetImage',
    'ecr:BatchCheckLayerAvailability'
  ],
  principals: new iam.AnyPrincipal(),
  resources: [repository.repositoryArn],
  conditions: {
    StringEquals: {
      'aws:PrincipalOrgID': YOUR_ORG_ID,
      'aws:PrincipalOrgPaths': [`${ouId}/*`] // 匹配该OU及其所有子OU下的账户
      // 若仅需匹配当前OU(不含子OU),替换为 `${ouId}`
    }
  }
}));

// 3. 构建单独账户权限策略语句(可选)
const accountPolicyStatements = ALLOWED_ACCOUNTS.map(accountId => new iam.PolicyStatement({
  actions: [
    'ecr:GetDownloadUrlForLayer',
    'ecr:BatchGetImage',
    'ecr:BatchCheckLayerAvailability'
  ],
  principals: new iam.AccountPrincipal(accountId),
  resources: [repository.repositoryArn]
}));

// 4. 将策略附加到ECR仓库
repository.addToResourcePolicy(new iam.PolicyDocument({
  statements: [...ouPolicyStatements, ...accountPolicyStatements]
}));

关键说明

  • 组织ID/OU ID获取:可在AWS Organizations控制台的对应OU详情页查看ID。
  • 权限动作:这三个动作是容器拉取镜像的核心必要权限,不可省略。
  • 条件匹配逻辑:
    • aws:PrincipalOrgPaths: "${ouId}/*":允许该OU下所有账户(包括子OU中的账户)访问。
    • 若只需授权当前OU直接下属的账户,去掉/*,使用"${ouId}"。
  • 与原有IAM用户授权的兼容性:原有给build-docker-access用户授权的代码可以保留,两种授权方式互不冲突。

内容的提问来源于stack exchange,提问作者Setjmp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:28:41