因此,如果我要为开发人员创建一个联合开发人员角色(duh)并以cf模板的形式将其推送到AWS,那么角色的名称就是我的名字。但出于某种原因,如果角色是为AWS服务/资源设计的(例如,EC2实例的Lambda角色),则该角色有一个看似随机的12个字符的字符串。
Ex:iam-lam-role-85C94J38RDE2
为什么CloudFormation会自动附加?
答案 0 :(得分:1)
CloudFormation将随机字符附加到物理ID,因此不会在2个IAM角色之间发生名称冲突。在给定的AWS账户中,不能有2个具有相同名称的IAM角色。
如果要创建2个CloudFormation堆栈,每个堆栈包含具有相同逻辑ID的IAM角色(例如MyRole
),则会为创建的IAM角色发生名称冲突。这就是CloudFormation为您的IAM角色生成随机名称的原因(例如MyRole-85C94J38RDE2
和MyRole-78DM29SKFJD8
)。
如果要为IAM角色分配固定名称,可以使用the RoleName
property。
答案 1 :(得分:1)
请参阅CloudFormation文档的Name Type部分:
默认情况下,AWS CloudFormation会生成唯一的物理ID来命名资源。例如,AWS CloudFormation可能会使用以下物理ID
stack123123123123-s3bucket-abcdefghijk1
命名Amazon S3存储桶。 [...]如果要使用自定义名称,请在AWS CloudFormation模板中为该资源指定名称属性。
对于AWS::IAM::Role
(resources that supports custom names之一),请指定RoleName
属性以提供自定义名称。
您的问题表明,默认物理ID实际上会根据AWS::IAM::Role
资源中AssumeRolePolicyDocument
属性的内容进行更改。我在实践中没有观察到任何这样的行为,所以我认为您可能为一种资源而不是另一种资源指定了RoleName
。