Я настраиваю общедоступный веб-сайт на основе 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)