You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何单次部署多账户AWS CDK栈?所需凭据与角色说明

如何通过单次操作将AWS CDK栈部署到多个跨账户环境?

当然可以通过单次操作完成多个跨账户CDK栈的部署,完全不用分两次执行单独的部署命令。下面我会一步步拆解需要的配置和操作步骤:

一、单次部署的核心命令

当你的凭据和角色配置到位后,只需要执行以下任意一条命令就能一次性部署所有跨账户栈:

# 部署当前应用里的所有栈
cdk deploy --all

# 或者指定具体要部署的多个栈名
cdk deploy first-stack-eu first-stack-us

二、关键配置:凭据与目标账户角色

要实现这个效果,核心是让本地的AWS凭据有权限访问两个目标账户,同时目标账户要配置好允许CDK部署的角色。

1. 本地凭据要求

你本地的AWS凭据(存储在~/.aws/credentials或者通过环境变量设置)需要能假设两个目标账户中的部署角色。这个凭据可以是:

  • 一个主账户的IAM用户/角色,该实体被目标账户的角色信任策略允许
  • 或者直接是拥有两个目标账户访问权限的IAM用户(不推荐,安全性较低)

2. 目标账户的IAM角色配置

每个目标账户(EU的2383838383和US的8373873873)都需要创建一个专门用于CDK部署的IAM角色,配置要点如下:

信任策略

角色的信任策略必须允许你的本地凭据所属的AWS实体(比如主账户的IAM用户ARN)来切换到这个角色。示例信任策略JSON:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::你的本地凭据所属账户ID:user/你的本地用户名"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

权限策略

角色需要拥有足够的权限来完成CDK部署,初期可以直接附加AdministratorAccess托管策略(如果需要更精细的权限,可以组合AWSCloudFormationFullAccess加上S3、IAM、Lambda等CDK常用服务的权限)。

三、CDK代码中的配置优化

为了让CDK自动使用目标账户的部署角色,你可以在栈的环境配置中直接指定roleArn参数,这样部署时CDK会自动切换到对应角色:

const envEU = { 
  account: '2383838383', 
  region: 'eu-west-1',
  roleArn: 'arn:aws:iam::2383838383:role/CDKDeploymentRole' // 替换成你创建的角色ARN
};
const envUSA = { 
  account: '8373873873', 
  region: 'us-west-2',
  roleArn: 'arn:aws:iam::8373873873:role/CDKDeploymentRole' // 替换成你创建的角色ARN
};

new MyFirstStack(app, 'first-stack-eu', { env: envEU });
new MyFirstStack(app, 'first-stack-us', { env: envUSA });

四、前置步骤:Bootstrap目标环境

在第一次部署前,需要先对两个目标账户的区域执行CDK Bootstrap操作(CDK需要在目标账户创建S3桶等资源存储部署资产),这个操作也能一次性完成:

cdk bootstrap aws://2383838383/eu-west-1 aws://8373873873/us-west-2

总结步骤

  1. 在两个目标账户分别创建CDK部署角色,配置信任策略和权限
  2. 在CDK代码中为每个栈的环境配置添加roleArn
  3. 一次性bootstrap两个目标环境(首次部署时执行)
  4. 执行cdk deploy --all完成单次跨账户部署

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

火山引擎 最新活动