Amazon cloudformation 如何添加';始终需要';将值添加到CommaDelimitedList

Amazon cloudformation 如何添加';始终需要';将值添加到CommaDelimitedList,amazon-cloudformation,Amazon Cloudformation,我正在尝试创建一个用于限制对所选S3存储桶的访问的。有一些默认的S3桶型ARN,它们必须始终存在,模板操作员可以添加其他桶型ARN的列表,以通过 在我的模板中,buckertans,允许操作员指定长度不受限制的ARN列表 BucketARNs: Type: CommaDelimitedList Description: 'Add the ARN of S3 Buckets that the Get* and List* access to. When specif

我正在尝试创建一个用于限制对所选S3存储桶的访问的。有一些默认的
S3桶型ARN
,它们必须始终存在,模板操作员可以添加其他
桶型ARN的列表,以通过

在我的模板中,
buckertans
,允许操作员指定长度不受限制的ARN列表

  BucketARNs:
    Type: CommaDelimitedList
    Description: 'Add the ARN of S3 Buckets that the Get* and List*
      access to. When specifying a Bucket 2 values should be supplied one for the
      bucket and for objects within that bucket, for example: arn:aws:s3:::MyContentBucket,arn:aws:s3:::MyContentBucket/*  .
      This defaults to all buckets.'
    Default: arn:aws:s3:::*, arn:aws:s3:::*/*
使用此选项的策略文档如下所示

PolicyDocument:
  Version: '2012-10-17'
  Statement:
  - Effect: Allow
    Action:
    - s3:Get*
    - s3:List*
    Resource:
      !Ref BucketARNs
例如,我想做的是确保

ARN总是出现在
buckertans
列表中。操作员可以删除中的
默认值
,这是将其添加为
默认值
并在
说明
中添加信息以警告用户不要删除所需ARN的唯一解决方案吗?就像它很容易破碎一样

是否有人知道如何确保我始终拥有这些产品?考虑通过is变量指定的Buckertan列表


理想情况下,我想要一个列表连接函数

使用FN::join将常量与参数连接起来

有两个选项:

  • 您可以在
    字符串
    参数上使用
    AllowedPattern
    以及
    Default
    值,以确保提供的默认值始终包含在提供的参数中,然后在模板中使用时,使用
    Fn::Split
    将参数解析为数组:

    Parameters:
      BucketARNs:
        Type: String
        Default: arn:aws:s3:::*, arn:aws:s3:::*/*
        AllowedPattern: arn:aws:s3:::\*, arn:aws:s3:::\*\/\*.*
    Resources:
      Dummy:
        Type: AWS::CloudFormation::WaitConditionHandle
    Outputs:
      Result:
        Value: !Join [',', !Split [',', !Ref BucketARNs]]
    
  • 您可以与和一起使用
    Fn::Join
    将固定值附加到用户提供的参数:

    Parameters:
      BucketARNs:
        Type: CommaDelimitedList
    Resources:
      Dummy:
        Type: AWS::CloudFormation::WaitConditionHandle
    Outputs:
      Result:
        Value: !Join [',', !Split [',', !Sub [
          "arn:aws:s3:::*,arn:aws:s3:::*/*,${Buckets}",
          {Buckets: !Join [',', !Ref BucketARNs]}
        ]]]
    

  • 最后的
    !上述示例中的Join
    仅用于在堆栈输出中输出数组,在使用模板的实际属性输入中的参数时不需要它们。

    我非常喜欢这样。我认为你的解决方案也适用于这个问题:
    Parameters:
      BucketARNs:
        Type: CommaDelimitedList
    Resources:
      Dummy:
        Type: AWS::CloudFormation::WaitConditionHandle
    Outputs:
      Result:
        Value: !Join [',', !Split [',', !Sub [
          "arn:aws:s3:::*,arn:aws:s3:::*/*,${Buckets}",
          {Buckets: !Join [',', !Ref BucketARNs]}
        ]]]