Amazon cloudformation CloudFormation魔术从帐户ID列表生成ARN列表
在我的模板中,我将帐户ID的Amazon cloudformation CloudFormation魔术从帐户ID列表生成ARN列表,amazon-cloudformation,Amazon Cloudformation,在我的模板中,我将帐户ID的CommaDelimitedList作为参数传递 我希望做一些Fn::Join和/或Fn::Sub魔术来转换列表,如下所示: "Accounts" : { "Type" : "CommaDelimitedList", "Default" : "12222234,23333334,1122143234,..." } To be used in the template as a list `root` ARN's as : [ "arn:
CommaDelimitedList
作为参数传递
我希望做一些Fn::Join
和/或Fn::Sub
魔术来转换列表,如下所示:
"Accounts" : {
"Type" : "CommaDelimitedList",
"Default" : "12222234,23333334,1122143234,..."
}
To be used in the template as a list `root` ARN's as :
[
"arn:aws:iam::12222234:root"
"arn:aws:iam::23333334:root"
"arn:aws:iam::1122143234:root"
]
现在我正在通过全日制的ARNs考试,所以它是有效的,但它是kluncky。然而,事实证明,CFN内置函数很难做到这一点
任何人都有这样的现成代码吗?下面的代码可以工作,但它有一个很强的限制: 由于
Fn::Join
函数的性质,它将分隔符放在列表的元素之间。因此,第一个和最后一个元素需要特殊处理,如:
"arn:aws:iam::xxxxx,yyyyy,zzzzzz,fffffff:root"
"Principal": {
"AWS":{
"Fn::Split" :
[",",
{"Fn::Join" : [",arn:aws:iam::",
{
"Fn::Split" :
[",",
{"Fn::Join" :
[":root,", {"Ref": "Accounts"}]}
]
}
]}
]
}
}
不太好,但比以前好 通过使用
Fn::Sub
,我能够修改Sam Hammamy的现有答案,以绕过第一个和最后一个项目需要特殊处理的限制。您还可以组合两个连接
s
在亚马尔:
AWS: !Split
- ','
- !Sub
- 'arn:aws:iam::${inner}:root'
- inner: !Join
- ':root,arn:aws:iam::'
- Ref: "Accounts"
在JSON中:
"Fn::Split": [
",",
{
"Fn::Sub": [
"arn:aws:iam::${rest}:root",
{
"rest": {
"Fn::Join": [
":root,arn:aws:iam::",
{ "Ref": "Accounts" }
]
}
}
]
}
]
几年后,我想补充一点,@borkl上面的回复基本上对我也有效,但我不得不寻求AWS支持部门对我的案例的帮助。我想我应该在这里学习 注:参数类型为CommaDelimitedList 基本上,过程是这样的:
!Split
- ","
- -!Sub
- arn:aws:iam::aws:policy/${rest}
- rest:
!Join
- ",arn:aws:iam::aws:policy/"
- !Ref AWSManagedPolicies