Разъяснения по обслуживанию не-сайта S3 Bucket через CloudFront в качестве веб-сайта - PullRequest
3 голосов
/ 27 октября 2019

Использование AWS Мне вполне подходит следующий сценарий:

  • Настройка корзины S3 example.com в качестве статического веб-сайта.
  • Создание распределения example.com вCloudFront.
  • Используйте Route 53 и менеджер сертификатов, чтобы разрешить просматривать содержимое сегмента S3 с использованием HTTPS через CloudFront.

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

В нескольких учебных пособиях в Интернете, включая документацию CloudFront , говорится, что мне необходимо создать идентификатор доступа к источнику (OAI). и ограничить доступ к корзине S3 только к дистрибутиву CloudFront с использованием этого OAI. Однако в этой документации также говорится, что я не могу использовать OAI с корзиной S3, настроенной в качестве статической конечной точки веб-сайта.

Так что у меня остается пара вопросов, которые мне не понятны из документации:

  • Если я отключу статический доступ веб-сайта к своей корзине S3 example.com, когда я подключу его к CloudFront с помощью OAI, смогу ли я по-прежнему получать доступ к содержимому корзины S3 через CloudFront через HTTPS? То есть, обеспечивает ли CloudFront «статический доступ к веб-сайту» для моей корзины S3, хотя я отключил статический хостинг веб-сайтов для этой корзины?
  • При настройке корзины S3 для статического хостинга веб-сайтов S3 позволяет мнеустановить «правила маршрутизации», например, для перенаправления с foo.html на bar.html. Если я отключу статический хостинг веб-сайтов для своей корзины S3, как мне настроить перенаправления? Обладает ли CloudFront похожими правилами маршрутизации, которые я могу настроить, или есть другой способ сделать это?

Ответы [ 4 ]

5 голосов
/ 27 октября 2019

Другими способами ограничения доступа к конечной точке веб-сайта S3 из CloudFront являются:

  1. Политика сегмента S3, разрешающая доступ только с IP-адресов CloudFront. IP-адреса CloudFront: Диапазон IP-адресов CloudFront

  2. Создание политики S3 на основе таких условий, как заголовок Referer и Whitelist Referer в CloudFront, это работает, только если вы обслуживаете ресурсыиз CloudFront, не главная страница индекса, поскольку главная страница индекса не будет иметь заголовка Referer в запросе.

Если вы используете конечную точку rest api S3 вместо конечной точки сайта s3 в качестве источникаваш веб-сайт все еще будет работать по протоколу HTTPS (SSL прекращает работу в CloudFront), но есть несколько проблем:

  1. Правила перенаправления / маршрутизации не будут работать с конечной точкой API REST.
  2. RESTКонечная точка API не может автоматически указывать страницу индекса сервера: если вы обращаетесь к abc.com/path -> статическая конечная точка S3 перенаправит ее на abc.com/path/index.html (исключение для abc.com -> abc.com/index.html, что можно сделать в CloudFront путем определения корневого документа)

Для вашего вопроса о foo.html и bar.html вам нужно использовать функцию Lambda @ edge для изменения thURI с функцией запроса источника.

Lambda @ edge examples

2 голосов
/ 27 октября 2019

смогу ли я по-прежнему получать доступ к содержимому корзины S3 через CloudFront через HTTPS?

Да, но Cloudfront будет обращаться к исходной корзине через аутентифицированные запросы API S3 вместо общих запросов http.

При настройке корзины S3 для статического хостинга веб-сайтов S3 позволяет мне настроить «правила маршрутизации», например, для перенаправления foo.html в bar.html. Если я отключу статический хостинг веб-сайтов для своей корзины S3, как мне настроить перенаправления?

Я не знаю, как это сделать в CloudFront. По этой причине я продолжаю размещать свои активы на сайте s3.

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

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

0 голосов
/ 04 ноября 2019

" Статический хостинг " Функция корзины S3 влияет только на правила перенаправления (см. Ниже). Но это не влияет на видимость вашего сайта по альтернативному URL. Итак, если вы используете CloudFront и OAI - вы должны сделать корзину S3 частной, тогда она будет доступна только через CloudFront.

Если вы включите «S 1005 * Статический хостинг веб-сайтов » в S3, вы будетебыть в состоянии:

  • forward "/" path to "/index.html". Это также возможно с CloudFront.
  • пересылка не найденных страниц в "/error.html". Это также возможно с CloudFront.
  • имеют правила перенаправления. Этого можно добиться с помощью Lambda @Edge в CloudFront.

Заключение : включение «Статического хостинга веб-сайтов» не требуется при обслуживании трафика через CloudFront.

0 голосов
/ 31 октября 2019

Если я отключу статический доступ веб-сайта к своей корзине S3 example.com, когда я подключу его к CloudFront с помощью OAI, смогу ли я по-прежнему получать доступ к содержимому корзины S3 через CloudFront через HTTPS? То есть, обеспечивает ли CloudFront «статический доступ к веб-сайту» для моей корзины S3, даже если я отключил статический хостинг веб-сайтов для корзины?

Вы можете использовать любую корзину для размещения контента, доставляемого через Cloudfront. , он не должен быть настроен как публичный веб-хостинг. Если он настроен так, что OAI только позволяет получить доступ к корзине, пользователям будет запрещен прямой доступ к контенту.

В облачной информации это может выглядеть следующим образом:

WebsiteContentBucket:
  Type: AWS::S3::Bucket
  DeletionPolicy: Delete
  Properties:
    BucketName: <bucketname here>

WebsiteContentBucketPolicy:
  Type: AWS::S3::BucketPolicy
  Properties:
    Bucket:
      Ref: WebsiteContentBucket
    PolicyDocument:
      Statement:
      - Action:
          - "s3:GetObject"
        Effect: "Allow"
        Resource:
          Fn::Sub: arn:aws:s3:::${WebsiteContentBucket}/*
        Principal:
          AWS:
            Fn::Sub: "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${WebsiteCloudFrontOAI}"

WebsiteCloudFrontOAI:
  Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
  Properties:
    CloudFrontOriginAccessIdentityConfig:
      Comment: your comment here

При настройке сегмента S3 для статического хостинга веб-сайтов S3 позволяет мне установить «правила маршрутизации», например, перенаправить файл foo.html в bar.html. Если я отключу статический хостинг веб-сайтов для своей корзины S3, как мне настроить перенаправления? Обладает ли CloudFront похожими правилами маршрутизации, которые я могу настроить, или есть другой способ сделать это?

Вы перемещаете маршрутизацию в Cloudfront вместо S3. Поэтому, если вы хотите, чтобы /foo.html возвращал bar.html, вы создаете другой источник в облачном фронте. Вы можете иметь несколько источников, указывая на разные сегменты, серверы приложений и т. Д.

...