我正在尝试使用cloudFormation创建IAM角色。我想在角色名称中包含一个参数。我的cloudformation脚本具有以下内容:
"Resources" : {
"TestRole" : {
"Type" : "AWS::IAM::Role",
"Properties" : {
"AssumeRolePolicyDocument": {
"Version" : "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"Principal": {
"Service": [ "ec2.amazonaws.com" ]
},
"Action": [ "sts:AssumeRole" ]
}]
}
}
}
}
我的cloudformation堆栈被命名为role-test。这将创建名为role-test-TestRole- RandomString 的IAM角色。有没有办法让rolename完全符合我在参数中指定的内容?
答案 0 :(得分:0)
由于每个资源都需要具有唯一ID并且此ID由AWS :: CF生成,因此它看起来并不实际有效。
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html
根据我在过去与AWS人员交谈时的理解,这样做是因为每个资源都需要一个唯一可识别的ID。
在调用以下内容时使用此ID:
{“Fn :: GetAtt”:[“TestRole”,“Arn”]}
希望有所帮助。
答案 1 :(得分:0)
已经可以在CF中为IAM角色指定自定义名称:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-rolename
IAM角色的名称。有关有效值,请参阅 IAM API参考中
CreateRole
操作的RoleName
参数。如果您未指定名称,AWS CloudFormation将生成唯一的物理ID,并将该ID用于组名。重要
如果指定名称,则无法执行需要替换此资源的更新。您仍然可以执行不需要或有任何中断的更新。如果必须替换资源,请指定新名称。
如果您指定了名称,则必须指定
CAPABILITY_NAMED_IAM
值才能确认模板的功能。有关详细信息,请参阅Acknowledging IAM Resources in AWS CloudFormation Templates。警告
如果在多个区域中重复使用相同的模板,则命名IAM资源可能会导致无法恢复的错误。为防止出现这种情况,建议您使用
Fn::Join
和AWS::Region
创建特定于地区的名称,如下例所示:{"Fn::Join": ["", [{"Ref": "AWS::Region"}, {"Ref": "MyResourceName"}]]}
。
但是,它需要额外的功能,如文档中所述。