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
相关产品推荐
相关产品推荐

