Статический веб-сайт S3 с CloudFront, ограниченным конкретным диапазоном IP-адресов с использованием настраиваемого заголовка - PullRequest
1 голос
/ 22 апреля 2019

Я хотел бы развернуть на веб-сайт в корзину S3 и использовать статический хостинг веб-сайтов.Однако у меня есть некоторые строгие ограничения безопасности:

  1. HTTPS должен использоваться
  2. Доступ к веб-сайту должен быть ограничен определенным диапазоном IP-адресов

Здесьмой план:

  • Использование AWS WAF для ограничения IP-адресов, которые могут получить доступ к веб-сайту
  • Использование CloudFront для использования HTTPS
  • Отформатируйте дистрибутив CloudFront для пересылки пользовательскогозаголовок, который будет действовать как ключ доступа к S3
  • . Ограничить политику безопасности S3, чтобы разрешить только трафик, включающий настраиваемый заголовок из CloudFront, упомянутый выше.

Вот схема:

enter image description here

У меня есть одна большая проблема: пересылка собственного заголовка между CloudFront действительно - лучший способ сделать это?В документах AWS говорится, что идентификатор доступа к источнику не может использоваться для сегментов S3, которые действуют как веб-сайт (https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html).. Пользовательский заголовок выглядит менее безопасным, чем идентификатор доступа к источнику, и его намного сложнее поддерживать. Из-за этого мне неудобно пользоватьсяслучайная строка в качестве единственной защиты, препятствующей кому-либо обойти мой дистрибутив CloudFront и напрямую получить доступ к корзине S3. Если злоумышленник угадает

Мой другой вариант здесь - просто прикусить пулю и перейти на серверы, где у меня естьбольше контроля над безопасностью, но я хотел бы использовать удобство веб-сайта S3.

Ответы [ 3 ]

1 голос
/ 22 апреля 2019

Вы должны удалить конфигурацию сайта из корзины S3 и использовать Origin Access Identity.С остальными настройками все в порядке.

Вам не нужно настраивать корзину S3 в качестве конечной точки веб-сайта, поскольку вы не собираетесь обслуживать свой контент напрямую через S3.Благодаря Origin Access Identity ваша корзина будет доступна только из CloudFront (если вы не добавите что-то еще в политику корзины), и это то, что вам нужно.

См. Также https://medium.com/@sanamsoodan/host-a-website-using-aws-cloudfront-origin-access-identity-s3-without-static-website-hosting-43995ae2a9bd

1 голос
/ 22 апреля 2019
  • Использование AWS WAF для ограничения доступа к набору IP-адресов, похоже, является подходящим решением.
  • Используя Cloudfront, вы также можете обслуживать частный контент.Ведро не обязательно должно быть публичным. Разрешить доступ к корзине Amazon S3 только из дистрибутива CloudFront При таком подходе вам не нужна отдельная политика корзины для ограничения IP-адресов
0 голосов
/ 22 апреля 2019

Вы не можете использовать любой произвольный заголовок на S3, разрешены только определенные заголовки, например: Referer, User-Agent и т. Д. Лучший способ - использовать OAI с конечной точкой API S3 Rest вместо конечной точки веб-сайта.

Однако вы можете выбрать альтернативные методы для конечной точки сайта: 1. Разрешите диапазонам CloudFront IP получить доступ к корзине S3.

http://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips

И 2. Добавьте заголовок клиента Origin, такой как «Referer: некоторое случайное значение», в конфигурацию источника CloudFront и создайте политику сегмента, чтобы разрешить это конкретное значение в заголовке Referer.

...