gpt4 book ai didi

aws-cloudformation - 如何将 'Always Required' 值添加到 CommaDelimitedList

转载 作者:行者123 更新时间:2023-12-03 07:37:41 24 4
gpt4 key购买 nike

我正在尝试创建一个 IAM Policy用于限制对选定 S3 存储桶的访问。有一些默认的 S3 存储桶 ARN,必须始终存在,模板运算符(operator)可以添加额外的存储桶 ARN 列表来授予通过 Parameter 访问.

在我的模板中,BucketARN Parameter ,允许运算符(operator)指定长度不受限制的 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:::*/*

使用此的政策文件Parameter看起来像

PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- s3:Get*
- s3:List*
Resource:
!Ref BucketARNs

我想做的是确保,例如

arn:aws:s3:::MyMustHaveBucket,
arn:aws:s3:::MyMustHaveBucket/*

ARN始终出现在 BucketARN 列表中。 Parameter 中的默认可以由运算符(operator)删除 - 是将它们添加为默认值并在 Parameter 中添加信息的唯一解决方案Description 警告用户不要删除所需的 ARN?就像它很容易被破坏一样。

有人知道如何确保我始终拥有这些可用的吗?考虑通过 Parameter 指定的 BucketARN 列表是变量吗?

理想情况下,我想要一个列表串联函数

最佳答案

两个选项:

  1. 您可以在 String 参数上使用 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]]
  2. 您可以使用Fn::Split以及Fn::SubFn::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 仅用于在堆栈输出中输出数组,在模板的实际属性输入中使用参数时不需要它们。

关于aws-cloudformation - 如何将 'Always Required' 值添加到 CommaDelimitedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42249456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com