Ограничить доступ статического веб-сайта S3 к Cloudfront - PullRequest
0 голосов
/ 07 июля 2019

Я понимаю, что это распространенный вопрос, но мне не удалось их решения.

У меня есть два веб-сайта, размещенных на S3:

  • bucket.ca (Позволяет *.bucket.ca)
  • dev.bucket.ca (Позволяет dev.bucket.ca)

Они общедоступны, но я не хочу, чтобы кто-либо имел доступ к их URL-адресу S3.Поэтому я отредактировал политику сегментов с помощью StringEquals.

По одному для каждого из сегментов:

arn:aws:s3:::bucket.ca/* arn:aws:s3:::dev.bucket.ca/*

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::dev.bucket.ca/*",
            "Condition": {
                "StringEquals": {
                    "aws:UserAgent": "random-hash"
                }
            }
        }
    ]
}

Вот часть, котораярасстраиваетсяКаждый раз, когда я изменяю Cloudfront или изменяю содержимое корзины, это поведение крайне противоречиво.

dev.bucket.ca, кажется, работает так, как задумано, где его URL-адрес S3 приводит к отказу в доступе, и я могу получить доступлюбой из его дочерних путей dev.bucket.ca/*.Поэтому я скопировал эту конфигурацию для bucket.ca, но результат всегда равен 403.

Возвращаясь к dev.bucket.ca, я больше не могу получить доступ к его дочерним путям.dev.bucket.ca/404 результат - 403.

Есть ли надежный способ тестирования конфигураций S3 и Cloudfront?Каждый раз, когда Cloudfront редактируется, изменения медленно обновляются.Стоит ли стирать кеш браузера и каждый раз открывать режим инкогнито, чтобы получить более надежный результат?

1 Ответ

0 голосов
/ 07 июля 2019

Чтобы устранить эту проблему, я отменил политику, чтобы разрешить всем общественности:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::dev.bucket.ca/*",
        }
    ]
}

Эта политика полностью работает для bucket.ca и dev.bucket.ca.Таким образом, похоже, что это моя условная проблема.

"aws:UserAgent": "random-hash"

Получается, что пользовательский заголовок должен быть User-Agent, а не UserAgent.Поэтому Cloudfront должен использовать User-Agent для своего настраиваемого заголовка и политики S3 для использования UserAgent.

Я проверил это после развертывания Cloudfront, и оба веб-сайта работали правильно.К корзинам S3 также нельзя получить доступ, и это здорово.

...