我正在尝试编写一个存储桶策略,该策略使用内在函数!GetAtt从存储桶中获取属性,但是我不确定如何为多个存储桶编写它。
对于不使用内部函数的单个存储桶,它类似于;
Effect: "Allow"
Action: "s3:*"
Resource: [
"arn:aws:s3:::ExampleBucketName",
"arn:aws:s3:::ExampleBucketName/*"
]
我正在尝试使用多个存储桶的内在功能来实现此目的,但是我在子目录部分却不正确。如何使用!GetAtt进入目录/ *?
我的代码如下:
Effect: "Allow"
Action: "s3:*"
Resource: [
!GetAtt "ExampleBucketOne.Arn",
!GetAtt "ExampleBucketOne.Arn"/"*",
!GetAtt "ExampleBucketTwo.Arn",
!GetAtt "ExampleBucketTwo.Arn"/"*"
]
我知道资源部分中以/ *结尾的第二行是错误的,这就是为什么我寻求帮助。正确的方法是什么?
答案 0 :(得分:0)
您需要使用联接将/*
添加到末尾。
!Join [ "", [ !GetAtt "ExampleBucketOne.Arn","/*" ] ]
上面的语法刚刚浮出水面,因此您可能需要仔细检查,但是基本语法是:
!Join [ ":", [ a, b, c ] ]
这将导致:
a:b:c
答案 1 :(得分:0)
另一个选择是!Sub
,它使用起来更容易一些。
Effect: "Allow"
Action: "s3:*"
Resource:
- !Sub ${ExampleBucketOne.Arn}
- !Sub ${ExampleBucketOne.Arn}/*
- !Sub ${ExampleBucketTwo.Arn}
- !Sub ${ExampleBucketTwo.Arn}/*