Cloudfront, объекты lambda @ edge, S3 redirect, - PullRequest
1 голос
/ 03 апреля 2020

Я создаю перенаправление URL S3, ничего особенного, только набор объектов нулевой длины с заполненной мета-ссылкой WebsiteRedirectLocation. S3 bucket настроен для серверов stati c веб-сайтов, для политики bucket установлено значение publi c, et c. Это работает просто отлично.

ОДНАКО - я также хочу заблокировать определенные файлы в корзине - в частности, некоторые HTML файлы, которые служат для управления перенаправлениями (например, добавление новых перенаправлений). При традиционной настройке я могу использовать перенаправления, а также отлично обслуживать страницу HTML. Но чтобы его заблокировать, мне нужно использовать Cloudfront и Lambda@edge, как в этих сообщениях:

https://douglasduhaime.com/posts/s3-lambda-auth.html

http://kynatro.com/blog/2018/01/03/a-step-by-step-guide-to-creating-a-password-protected-s3-bucket/

Я изменил скрипт lambda@edge, чтобы запрашивать только пароль, если запрашивается страница администратора (или ее ресурсы, такие как CSS / JS). Если запрошенный путь является чем-то другим (предположительно, файл перенаправления), пользователю не предлагается пароль. И да, я мог бы также установить правило поведения в Cloudfront, чтобы решить, когда использовать функцию Lambda для запроса пароля.

И это работает вроде. Когда я следую этим инструкциям и захожу на мой сайт по URL-адресу Cloudfront, меня действительно запрашивают пароль, когда я захожу на root моего сайта - на страницу администратора. Тем не менее, перенаправления не будут работать. Если я пытаюсь загрузить перенаправление, браузер просто загружает его.

Теперь, в другом посте кто-то предложил мне изменить мою конечную точку распространения Cloudfront на конечную точку S3 Bucket WEBSITE - что, я думаю, также означает изменение политики корзины обратно в режим веб-сайта и публикацию c, которая отстой, потому что теперь она доступна вне политики Cloudfront, которая мне не нужна. Кроме того - Cloudfront больше не обслуживает указанный индексный файл, что не является худшим.

SO - возможно ли заблокировать мое ведро, сервер полностью через Cloudfront с Lambda@edge НО также имеет Cloudfront уважает эти перенаправления, а не просто запросить загрузку? Есть ли в Cloudfront параметр для уважения заголовков? Нужно ли устанавливать разные правила поведения для разных файлов (HTML против перенаправлений)?

1 Ответ

0 голосов
/ 13 апреля 2020

Вместо использования мета WebsiteRedirectLocation, которая задает c до S3 stati c хостинг веб-сайтов и не действует, когда Cloudfront является сервером, замените ваши пустые объекты на HTML объекты, которые содержат meta HTML тег с нужной целью перенаправления:

<meta http-equiv="Refresh" content="0; url=https://www.example.com" />

Число перед точкой с запятой - это задержка перед перенаправлением, в секундах, где 0 является немедленным.

Не забудьте также изменить метатег Content-Type объектов на text/html.

. Если вы хотите поддерживать старые браузеры, которые могут некорректно обрабатывать директиву Refre sh, добавьте ссылку привязки, как описано здесь .

...