如何从AWS账户A跨账户描述账户B的CloudFormation栈信息?
跨账户查询CloudFormation栈的核心规则与实现方法
基础规则与问题直答
aws cloudformation系列命令的API调用,默认会使用当前配置的凭证所属身份完成请求路由,也就是说你之前在账户A的权限上下文下执行aws cloudformation describe-stacks --stack-name prod-gateway时,请求只会访问账户A自身的CloudFormation资源。AWS对跨账户、无权限访问的资源,不会明确提示“资源存在于其他账户”,只会统一返回“资源不存在”类的报错,因此你看到的Stack with id prod-gateway does not exist是完全符合权限模型的正常表现。
针对你的两个核心问题,直接给出明确结论:
- 完全支持从账户A发起、查询、描述账户B内的CloudFormation栈信息,但无法在账户A的原有权限上下文下直接完成
- 不存在独立的跨账户操作专用命令,所有跨账户资源查询依然复用标准的CloudFormation CLI指令,仅需在调用时切换为持有账户B对应权限的身份即可
可落地的跨账户操作实现方案
- 方案1:通过跨账户IAM角色完成权限切换
这是AWS官方推荐的无长期密钥的跨账户交互方式,适配你的流水线场景:- 在账户B中创建具备CloudFormation只读访问权限的IAM角色,将角色的信任策略配置为允许账户A下的流水线执行身份扮演该角色
- 在账户A的CLI或流水线配置中,添加指向该跨账户角色的独立身份配置
- 执行栈查询命令时,通过指定配置的跨账户身份完成调用,示例命令:
aws cloudformation describe-stacks --stack-name prod-gateway --profile accountB-cross-account-profile
执行该命令时,CLI会自动通过AWS STS服务完成跨账户身份切换,再调用CloudFormation API拉取目标栈的详情。
- 方案2:调整流水线的执行权限上下文
如果你的流水线是基于AWS原生服务(如CodeBuild、CodePipeline)搭建的,可以在执行CloudFormation部署、查询的阶段,直接将任务的执行角色关联为账户B内已授权的部署角色,让任务全程使用账户B的权限完成操作,不需要从账户A的权限上下文发起跨账户请求。
注意:所有跨账户资源访问都遵循统一的AWS身份权限模型,不存在不经过授权、仅靠特殊参数就能跨账户读取资源的操作。你必须先让执行任务的身份获得账户B的正式授权,才能完成对B账户栈资源的查询操作。
内容的提问来源于stack exchange,提问作者Paresh Sahoo
相关产品推荐
相关产品推荐

