Amazon cloudformation CloudFormation魔术从帐户ID列表生成ARN列表

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:

在我的模板中,我将帐户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: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

基本上,过程是这样的:

  • 在第一项中添加一些内容,比如“arn::something:”

  • 将逗号替换为',arn::something::'这救了我的命。伟大的小代码片段。谢谢
    !Split
      - ","
      - -!Sub
        - arn:aws:iam::aws:policy/${rest}
        - rest:
            !Join
              - ",arn:aws:iam::aws:policy/"
              - !Ref AWSManagedPolicies