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

AWS CDK受信任账户B如何凭证化部署至已引导账户A?

跨账户CDK部署凭证问题解决方案

问题回顾

已经在AWS账户A执行CDK引导时用--trust参数信任了账户B:

CDK_DEFAULT_ACCOUNT=A cdk bootstrap --trust B ...

但账户B里没有~/.aws目录、也没配置凭证环境变量的CodePipeline任务,执行cdk deploy到账户A时报错:

failed: Error: Need to perform AWS calls for account A, but the current credentials are for B

该CodePipeline动作的执行角色已经有管理员权限,现在要解决的是:受信任的账户B里的流程怎么拿到凭证,才能部署到已引导的账户A。

解决步骤

1. 确认跨账户引导配置生效

检查账户A里的CDK引导栈(通常名为cdk-toolkit)对应的执行角色——cdk-hnb659fds-cfn-exec-*-A,查看它的信任策略是否包含账户B的ID或ARN,确保信任关系已正确配置。

2. 配置CodePipeline角色的跨账户扮演权限

CodePipeline的执行角色需要具备扮演账户A中CDK执行角色的权限,操作如下:

  • 在账户B的CodePipeline执行角色权限策略中,添加sts:AssumeRole权限,允许其扮演账户A的CDK执行角色(ARN格式:arn:aws:iam::A:role/cdk-hnb659fds-cfn-exec-*-A)
  • 执行cdk deploy时,直接指定目标账户的CDK执行角色ARN:
cdk deploy --role-arn arn:aws:iam::A:role/cdk-hnb659fds-cfn-exec-*-A

若想避免每次命令行指定,也可在CDK代码中配置默认部署角色:

// TypeScript示例
new cdk.Stack(app, 'MyStack', {
  env: { account: 'A', region: 'us-east-1' },
  synthesizer: new cdk.DefaultStackSynthesizer({
    deployRoleArn: 'arn:aws:iam::A:role/cdk-hnb659fds-cfn-exec-*-A',
  }),
});

3. 通过STS获取临时凭证切换账户

如果CodePipeline任务允许设置环境变量,可以先获取账户A的临时凭证再执行部署:

  • 调用STS命令获取临时凭证:
aws sts assume-role --role-arn arn:aws:iam::A:role/cdk-hnb659fds-cfn-exec-*-A --role-session-name cdk-deploy-session
  • 将返回结果中的AccessKeyId、SecretAccessKey、SessionToken设置为环境变量:
export AWS_ACCESS_KEY_ID=临时密钥ID
export AWS_SECRET_ACCESS_KEY=临时密钥
export AWS_SESSION_TOKEN=临时会话令牌
  • 再执行cdk deploy命令

4. 检查执行角色的权限边界

如果CodePipeline的执行角色设置了权限边界,需确认该边界允许sts:AssumeRole操作,以及访问账户A中CDK相关资源的权限,避免权限边界限制了必要操作。

内容的提问来源于stack exchange,提问作者Ramón J Romero y Vigil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:01:11