如何修改存储桶属性

时间:2019-04-21 06:10:48

标签: amazon-cloudformation

我正在尝试编写一个存储桶策略,该策略使用内在函数!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"/"*"
               ]

我知道资源部分中以/ *结尾的第二行是错误的,这就是为什么我寻求帮助。正确的方法是什么?

2 个答案:

答案 0 :(得分:0)

您需要使用联接将/*添加到末尾。

!Join [ "", [ !GetAtt "ExampleBucketOne.Arn","/*" ] ]

上面的语法刚刚浮出水面,因此您可能需要仔细检查,但是基本语法是:

!Join [ ":", [ a, b, c ] ]

这将导致:

a:b:c

参考: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html

答案 1 :(得分:0)

另一个选择是!Sub,它使用起来更容易一些。

        Effect: "Allow"
        Action: "s3:*"
        Resource:
          - !Sub ${ExampleBucketOne.Arn}
          - !Sub ${ExampleBucketOne.Arn}/*
          - !Sub ${ExampleBucketTwo.Arn}
          - !Sub ${ExampleBucketTwo.Arn}/*