如何将 'Always Required' 值添加到 CommaDelimitedList
How to add 'Always Required' Values to a CommaDelimitedList
我正在尝试创建一个 IAM Policy for limiting access to selected S3 Buckets. There are some default S3 Bucket ARNs
, that must always be present, the template operator is allowed to add a list of additional Bucket ARNs
to grant access to, through a Parameter。
在我的模板中,BucketARNs
Parameter 允许操作员指定长度不受限制的 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 总是 出现在 BucketARNs
的列表中。 Parameter 中的 Default
可以由操作员删除 - 是将它们添加为 Default
值并在 Parameter Description
警告中添加信息的唯一解决方案用户不删除所需的 ARN?哪一样容易坏。
有谁知道确保我始终可以使用这些工具的方法吗?考虑到通过 Parameter 指定的 BucketARN 列表是可变的?
理想情况下,我想要一个列表连接函数
使用FN::join连接常量与参数
两个选项:
您可以在 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]]
您可以使用 Fn::Split
along with Fn::Sub
和 Fn::Join
将固定值附加到 user-supplied 参数:
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
仅用于在堆栈输出中输出数组,在模板的实际 属性 输入中使用参数时不需要它们。
我正在尝试创建一个 IAM Policy for limiting access to selected S3 Buckets. There are some default S3 Bucket ARNs
, that must always be present, the template operator is allowed to add a list of additional Bucket ARNs
to grant access to, through a Parameter。
在我的模板中,BucketARNs
Parameter 允许操作员指定长度不受限制的 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 总是 出现在 BucketARNs
的列表中。 Parameter 中的 Default
可以由操作员删除 - 是将它们添加为 Default
值并在 Parameter Description
警告中添加信息的唯一解决方案用户不删除所需的 ARN?哪一样容易坏。
有谁知道确保我始终可以使用这些工具的方法吗?考虑到通过 Parameter 指定的 BucketARN 列表是可变的?
理想情况下,我想要一个列表连接函数
使用FN::join连接常量与参数
两个选项:
您可以在
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]]
您可以使用
Fn::Split
along withFn::Sub
和Fn::Join
将固定值附加到 user-supplied 参数: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
仅用于在堆栈输出中输出数组,在模板的实际 属性 输入中使用参数时不需要它们。