Размещенный на S3 сайт Cloudfront и пользовательский домен API Gateway, указывающий на один и тот же поддомен - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть поддомен для моего сайта с именем api.example.com, и я хочу, чтобы было достигнуто следующее:

  • имеет 1 дистрибутив CloudFront для статического веб-сайта S3, сопоставленного с api.example.com

  • имеют имя настраиваемого домена API-шлюза, сопоставленное с тем же поддоменом api.example.com

Шаги, которые я сделал для достиженияследующие настройки:

  1. Создание настраиваемого домена API-шлюза api.example.com и установка базовых сопоставлений для API, которые я хочу предоставить как v1 (версия 1 на данный момент)

  2. На маршруте 53 я создал запись CNAME api.example.com, указывающую на оптимизированное для Edge целевое доменное имя шлюза API из шага 1

Примечание: в этот момент я получаю, как и ожидалось, ответ 200 от https://api.example.com/v1

Я создал корзину S3 и настроил ее для хостинга статических сайтов.Все файлы успешно загружены и работают.

Я создал новый дистрибутив Cloudfront с источником в корзине S3.На данный момент для этого дистрибутива Cloudfront я не могу установить запись CNAME как api.example.com, поскольку она уже используется первым настраиваемым доменным именем, заданным в шлюзе API, и AWS выдает исключение CNAMEAlreadyExistsException - поэтому я оставляю это поле пустым,Доступ к дистрибутиву CloudFront для корзины S3 работает должным образом.

В дистрибутиве CloudFront, созданном для корзины S3, я добавляю еще один источник (имя пользовательского домена шлюза API) и создаю правило Bevahior.для маршрутизации вызовов v1 / * на имя пользовательского домена API Gateway.

На этом этапе все перестает действовать на свои места: - при доступе к https://api.example.com я получаю{"message": "Fobidden"} из дистрибутива API Gateway.Однако URL https://api.example.com/v1 по-прежнему возвращает ожидаемый результат.

Вопрос : Есть ли что-то, что я пропустил, чтобы установить, чтобы он работал для URL https://api.example.comвернуть содержимое статического веб-сайта S3?

Примечание : также тот факт, что у меня есть пустое поле CNAME в распределении фронта облака S3, в то время как у меня определено CNAMEв Route53, использующем тот же дистрибутив облачного фронта, выдается предупреждающее сообщение о том, что эта ситуация может подвергнуть меня уязвимости.

1 Ответ

0 голосов
/ 21 сентября 2018

Для упомянутого вами варианта использования вам нужен только один дистрибутив Cloudfront (который сопоставлен с api.example.com), где он должен иметь возможность перенаправлять трафик на S3 и API Gateway (оба добавляются как источники в один и тот же дистрибутив), используяразличные конфигурации поведения.Вы можете настроить поведение так, чтобы трафик / v1 / * направлялся на шлюз API, а другой трафик на S3.

При настройке происхождения и поведения необходимо соблюдать несколько конфигураций.

  • Убедитесь, что поведение S3 и API Gateway перенаправляет HTTP на HTTPS.
  • При добавлении источника API-шлюза, настроенного только для пересылки HTTPS-трафика.
  • В поведении API-шлюза добавьте в белый список заголовки для принимающих, авторизации, источника, источника и убедитесь, что вы не включили белый список заголовка «Хост».
  • В обоих источниках не добавляйте пути.
  • Для поведения шлюза API настройте TTL на 0 и разрешите все методы (GET, POST и т. Д.)
...