我正在尝试创建一个IAM Policy来限制对所选S3存储桶的访问。有一些默认S3 Bucket ARNs
,必须始终,模板运营商可以通过{{3}添加额外Bucket ARNs
的列表以授予访问权限}。
在我的模板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在<{1}}列表中始终。运营商可以删除Parameter中的BucketARNs
- 唯一的解决方案是将其添加为Default
值,并在Parameter Default
警告中添加信息用户不要删除所需的ARN?这很容易被打破。
有没有人知道如何确保我始终拥有这些?考虑通过Parameter指定的BucketARN列表是可变的吗?
理想情况下,我想要一个列表连接函数
答案 0 :(得分:1)
两个选项:
您可以在AllowedPattern
参数上使用String
以及Default
值,以确保提供的默认值始终包含在提供的参数中,然后使用{{1在模板中使用时将参数解析为数组:
Fn::Split
您可以使用Fn::Split
以及Fn::Sub
和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]}
]]]
仅用于在堆栈输出中输出数组,在模板的实际属性输入中使用参数时不需要它们。
答案 1 :(得分:0)
使用FN :: join将常量与参数
连接起来