Как написать условную политику S3 с несколькими логическими «ИЛИ»? - PullRequest
1 голос
/ 01 мая 2019

Я настраиваю общедоступный веб-сайт на основе S3 и хочу запретить прямой доступ к моей корзине s3 для пользователей, выходящих за рамки моего дистрибутива CloudFront. В то же время я хочу иметь возможность прямого доступа к контенту s3 самостоятельно (администратор). Также я хотел бы разрешить службе CodeBuild доступ к тому же сегменту.

Amazon предлагает «добавить политику сегмента, которая разрешает s3: GetObject разрешение с условием, используя ключ aws: referer, что запрос get должен исходить от определенных веб-страниц.»:

https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-4

Но если я добавлю часть явного запрета:

{
        "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::examplebucket/*",
        "Condition": {
          "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
}

Я теряю возможность загружать файлы непосредственно в корзину s3, также служба CodeBuild также не сможет ничего делать с моим контейнером.

Как я могу реализовать Условия в моей политике корзины, чтобы запретить доступ:

ONLY IF 

("StringNotLike": {"aws:Referer": "https://www.example.com"})
OR
("StringNotLike": {"aws:userid": "my root user id"})
OR
(my bucket is not requested by CodeBuild Service)

1 Ответ

1 голос
/ 01 мая 2019

По умолчанию нет доступа к объектам, хранящимся в Amazon S3. Следовательно, вы должны предоставить доступ через Allow разрешения. Все, что не Разрешено, таким образом, отклоняется.

  • Добавить Политика Bucket , которая разрешает действие через CloudFront Origin Access Identity
  • CodeBuild , по-видимому, использует разрешения пользователя IAM, который использует CodeBuild, поэтому назначьте разрешения этим пользователям IAM (я посмотрел документацию и не упомянул использование связанных с сервисом ролей, но я могу ошибаться)
  • Чтобы разрешить вас в корзину, добавьте разрешения вашему пользователю IAM

Ничто из перечисленного не требует использования политики Deny.

См .: Ограничение доступа к контенту Amazon S3 с использованием идентификации доступа к источнику - Amazon CloudFront

...