#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
Комментарии:
1. понял это вскоре после публикации вопроса, но хорошо, чтобы получить подтверждение того, что я не ошибся. Спасибо.
Ответ №2:
Другой вариант !Sub
немного проще в использовании.
Effect: "Allow"
Action: "s3:*"
Resource:
- !Sub ${ExampleBucketOne.Arn}
- !Sub ${ExampleBucketOne.Arn}/*
- !Sub ${ExampleBucketTwo.Arn}
- !Sub ${ExampleBucketTwo.Arn}/*