Рейтинг:0

Статический веб-сайт AWS S3 и CloudFront OIA

флаг si

Кажется, есть два способа разместить статический веб-сайт на S3/CloudFront.

  1. Создайте корзину S3 с полным общедоступным доступом и статическим веб-сайтом, для которого установлено значение «Включено» + конфигурация CloudFront.
  2. Создайте корзину S3 без общедоступного доступа и отключите статический веб-сайт + конфигурация CloudFront.

Что мне не нравится в (1), так это вопиющий красный текст «НЕ ДЕЛАЙТЕ ЭТОГО» для публичного доступа. Но работает отлично.

Что мне не нравится в (2), так это то, что я теряю Статический веб-сайт, установленный на Включенные преимущества, как и все, что автоматически перенаправляется на index.html. Теперь я вижу, что есть корень происхождения объекта в настройках CloudFront, но это работает только для моего базового домена (например, mysite.com). Мой сайт является SPA и с (1), если я иду в mysite.com/профиль это будет правильно перейти к mysite.com/index.html Я думаю из-за перенаправления 404, которое я настроил. Но с (2) собирается mysite.com/профиль это не 404, а скорее отказ в доступе 403, который я не думаю, что разумно перенаправлять, как 404.

Так должен ли я придерживаться варианта (1) даже с ярко-красным текстом о публичном доступе? Или есть правильный способ сделать SPA без публичного доступа/статического хостинга веб-сайтов?

Рейтинг:1
флаг gp
Tim

Предупреждение о публичном доступе можно спокойно игнорировать для веб-сайтов, размещенных на S3. Ведро/файлы преднамеренно общедоступны. AWS, вероятно, следует отключить это предупреждение, когда включен хостинг веб-сайтов.

Распространение CloudFront, очевидно, даст лучшую производительность, но для одностраничного приложения это может быть недостаточно значительным, чтобы беспокоиться о нем, ваш вызов основан на знании ваших пользователей/приложения. Вместо того, чтобы полагаться на веб-сервер для перенаправления, можете ли вы не закодировать его в своем приложении, чтобы ссылки были такими, как вы хотите? Вы можете выполнять перенаправления с помощью CloudFront@Edge, но это требует дополнительной работы и требует дополнительных затрат.

pbuzz007 avatar
флаг si
Я предполагаю, что другим «не нравится» общедоступный хостинг S3 является то, что люди могут получить доступ через URL-адрес, например «https://mything.s3.us-east-2.amazonaws.com/index.html». Но так ли это важно? Я действительно не знаю.
Tim avatar
флаг gp
Tim
Я не понимаю, как второй URL-адрес может быть проблемой. Вы можете исключить роботов, используя robots.txt.
pbuzz007 avatar
флаг si
Хорошо. Я потратил на это весь день, и у меня плохое предчувствие, что предоставление общего доступа также означает, что любой, у кого есть учетная запись AWS, может писать в ведро?? Я так думаю, потому что я создал вторую корзину как «безопасную», в которую может писать только один из моих пользователей IAM. Но я обнаружил, что единственный способ использовать SDK AWS — включить публичный доступ к корзине! Аааа.. кто-нибудь может написать в общедоступное ведро?
Tim avatar
флаг gp
Tim
Вы контролируете доступ с помощью своей политики корзины https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteAccessPermissionsReqd.html.
Рейтинг:0
флаг cn

Я бы остановился на втором варианте. Сегмент S3 остается закрытым, а доступ только для чтения предоставляется облачному удостоверению доступа к источнику (OAI). И вы гарантируете, что запросы оптимизируются через облачный фронт, а не через конечную точку веб-сайта s3.

Чтобы обойти разрешение index.html, вы можете использовать функции lambda@edge или облачные функции. В документах AWS есть пример последнего:

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/example-function-add-index.html

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.