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

AWS CloudFormation中角色PhysicalResourceId非ARN,如何获取其ARN?

CloudFormation中IAM角色PhysicalResourceId非ARN的原因及ARN获取方法

问题背景

使用AWS CLI创建IAM角色时,可直接获得格式规范的ARN:

arn:aws:iam::836101485904:role/sigmund-freud

但通过CloudFormation创建角色时,栈资源返回的PhysicalResourceId并非ARN格式:

stack-example9-SigmundFreud-1SXXK5AE0GRA3

而通过CloudFormation创建IAM策略时,返回的PhysicalResourceId却是标准ARN:

"PhysicalResourceId": "arn:aws:iam::836101485904:policy/bucket-simple1-FirstPolicy-1DMVF6Q0R9G95"

原因分析

CloudFormation对不同IAM资源的PhysicalResourceId返回逻辑存在差异:

  • IAM策略的物理ID直接返回ARN,因为策略的ARN是创建后固定且唯一的标识,符合CloudFormation对这类资源的返回规则。
  • IAM角色的物理ID返回的是角色名称(此处为CloudFormation自动生成的带栈前缀的角色名)。这源于早期CloudFormation的设计逻辑:IAM角色的名称是其核心标识,ARN可由名称推导;同时角色名称支持修改(不推荐操作),修改后ARN会同步变更,返回名称作为物理ID能保证标识的稳定性。

获取角色ARN的方法

1. 在CloudFormation模板中配置输出

在模板里添加Outputs段落,直接引用角色的Arn属性:

Outputs:
  SigmundFreudRoleArn:
    Value: !GetAtt SigmundFreud.Arn
    Description: ARN of the SigmundFreud IAM Role

部署栈后,可在CloudFormation控制台的「输出」页签查看ARN,也能通过AWS CLI命令获取:

aws cloudformation describe-stacks --stack-name stack-example9 --query "Stacks[0].Outputs[?OutputKey=='SigmundFreudRoleArn'].OutputValue" --output text

2. 通过AWS CLI根据角色名查询

使用返回的角色名称作为参数,调用IAM查询命令:

aws iam get-role --role-name stack-example9-SigmundFreud-1SXXK5AE0GRA3 --query "Role.Arn" --output text

3. 控制台直接查看

登录AWS控制台,进入目标CloudFormation栈的「资源」页面,找到对应的IAM角色资源,点击跳转至IAM控制台,即可直接查看角色的ARN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:20:43