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

AWS CDK如何直接获取部署栈的假定用户ARN

在AWS CDK中获取部署时的假定用户ARN

你没法通过CDK的iam.Role构造拿到这个值:iam.Role是用于定义栈内IAM角色资源的构造,和执行CDK部署命令的调用身份没有关联,自然不会暴露相关属性。

要获取和aws sts get-caller-identity返回结果完全一致的假定用户ARN,直接在CDK应用初始化阶段调用STS接口取值即可,这是最稳定的方案:

实现步骤

  • 在CDK项目的入口文件(通常是bin/目录下的应用启动文件),使用CDK内置依赖的AWS SDK初始化STS客户端
  • 在初始化Stack之前调用GetCallerIdentity接口,拿到当前执行身份的ARN
  • 将拿到的ARN作为自定义参数传入栈,供栈内资源逻辑使用

TypeScript 示例代码

// bin/your-app.ts
import { App } from 'aws-cdk-lib';
import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts';
import { YourMainStack } from '../lib/your-main-stack';

async function bootstrapApp() {
  // STS客户端默认读取当前终端的AWS凭证配置,覆盖SSO、静态AK、临时凭证等所有认证方式
  const sts = new STSClient({});
  const callerInfo = await sts.send(new GetCallerIdentityCommand({}));

  const app = new App();
  new YourMainStack(app, 'YourMainStack', {
    deployerAssumedArn: callerInfo.Arn, // 这里就是你需要的assumed-role格式ARN
    env: {
      account: callerInfo.Account,
      region: process.env.CDK_DEFAULT_REGION,
    },
    // 其余栈配置项
  });
}

bootstrapApp();

注意事项

  • 这个方案拿到的ARN和你手动在同终端执行aws sts get-caller-identity返回的ARN完全一致,支持包括AWS SSO assumed role在内的所有身份类型。
  • 不要混淆CloudFormation执行角色和部署用户身份:如果配置了CDK的CFN执行角色,该角色是CloudFormation服务用来创建资源的服务角色,不是触发部署操作的用户身份,格式和你需要的假定用户ARN不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:45:49