Как я могу изменить свойства корзины

#amazon-cloudformation

#aws-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"/"*"
               ]
  

Я знаю, что альтернативные вторые строки в разделе ресурсов, заканчивающиеся на / *, неверны, и именно поэтому я прошу о помощи. Каков правильный способ?

Комментарии:

1. Пробовали ли вы сначала создать такую политику вручную, чтобы проверить, работает ли она? Я знаю, что в консоли редактор политики корзины не разрешает ссылку на другую корзину, поэтому я подозреваю, что невозможно будет написать одну политику корзины, которая ссылается на две разные корзины. (Что имеет смысл, поскольку политика корзины размещается только в одной корзине.)

Ответ №1:

Вам нужно использовать соединение, чтобы добавить /* его в конец.

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

Приведенный выше синтаксис просто не укладывается у меня в голове, поэтому вам может потребоваться перепроверить его, но основной синтаксис:

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

что приведет к:

 a:b:c
  

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

Комментарии:

1. понял это вскоре после публикации вопроса, но хорошо, чтобы получить подтверждение того, что я не ошибся. Спасибо.

Ответ №2:

Другой вариант !Sub немного проще в использовании.

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