Размещение статического сайта в Amazon S3

Краткое описание
Amazon S3 — это объектное хранилище. Оно не выполняет серверный код, но отлично подходит для хранения и отдачи статических файлов: HTML, CSS, JavaScript, изображений и шрифтов. Чтобы сделать сайт доступным по HTTP(S), нужно:
- создать публичный S3 бакет с уникальным именем;
- включить статический веб‑хостинг для бакета;
- загрузить файлы сайта и дать объектам публичный доступ;
- при необходимости подключить CloudFront/Route 53 для HTTPS и кастомного домена.
В этой инструкции показан пошаговый процесс через AWS Management Console.
Предварительные требования
- Учётная запись AWS.
- Создан публичный S3 бакет (в статье предполагается, что он уже есть).
Важное: имя бакета должно быть уникально во всём AWS и соответствовать правилам именования.
Что мы сделаем
- Проверим, что существует публичный S3 бакет.
- Включим для него статический веб‑хостинг и загрузим index.html.
- Сделаем объект доступным по Object URL.
Пошаговая инструкция через консоль AWS
- Откройте консоль S3 и выберите нужный бакет.
- Перейдите в вкладку Permissions и найдите раздел Static website hosting.
- Выберите Use this bucket to host a website, укажите индексный документ (обычно index.html) и страницу ошибок (например, error.html), затем сохраните настройки.
- Вернитесь к списку объектов бакета и нажмите Upload, чтобы загрузить содержимое сайта (минимум index.html).
На шаге управления разрешениями укажите Grant public read access to the objects, чтобы файлы были доступны публично, затем завершите загрузку.
В списке объектов выберите index.html и нажмите Make public, если объект ещё не публичный.
- После публикации откройте Object URL, чтобы просмотреть страницу в браузере.
Если всё сделано верно, вы увидите загруженную страницу в браузере.
Пример простого index.html
Мой статический сайт
Привет из S3
Это тестовая страница, размещённая в Amazon S3.
Критерии приёмки
- index.html загружен в корень бакета.
- Для бакета включён Static website hosting с правильным индексным документом.
- Объект(ы) имеют публичный доступ и открываются по Object URL.
- Имя бакета уникально и корректно соответствует требованиям DNS, если планируете привязать кастомный домен.
Рекомендации по безопасности
- По возможности не давайте публичный доступ всему бакету. Вместо это́го используйте политики объектов или CloudFront с Origin Access Identity.
- Для HTTPS и кастомного домена используйте CloudFront и AWS Certificate Manager (ACM).
- Ограничьте права IAM — давайте доступ только тем ролям и пользователям, которым он нужен.
- Регулярно проверяйте публичные объекты и ведите аудит доступа.
Примечание: простая настройка “Make public” годится для тестовых и простых сайтов, но для продакшн-релиза лучше закрывать бакет и отдавать контент через CDN.
Альтернативные подходы и когда они нужны
- CloudFront + S3: нужен для HTTPS, минимальной задержки и собственных доменов.
- Route 53: использовать для управления DNS и привязки домена к CloudFront.
- Static site generators (Hugo, Jekyll): собирают статический сайт локально, затем вы деплоите результат в S3.
Когда S3 не подойдёт
- Если сайт требует серверной логики (базы данных, серверный рендеринг) — S3 не подходит.
- Для веб‑приложений со сложными API используйте AWS Lambda, Elastic Beanstalk или EC2.
Мини‑методология деплоя (шаблонный процесс)
- Соберите статический сайт локально.
- Залейте файлы в папку сборки в S3.
- Обновите кеш CloudFront (invalidate), если применимо.
- Проверьте доступность по URL и журналам доступа.
- Автоматизируйте с помощью CI/CD (например, GitHub Actions, GitLab CI) для повторяемых деплоев.
Чек‑лист ролей
Разработчик
- Собрать сайт локально.
- Проверить относительные/абсолютные пути в ресурсах.
Системный администратор
- Настроить публичный доступ или настроить CloudFront OAI.
- Выдать сертификат ACM для HTTPS.
DevOps/Инженер CI
- Автоматизировать загрузку в S3.
- Добавить invalidation для CloudFront при обновлениях.
Типичные проблемы и способы их решения
- Страница не открывается — проверьте, что Object URL возвращает 200 и объект публичный.
- 403 Forbidden — проверьте политику бакета и ACL объектов.
- Ошибки по HTTPS при кастомном домене — используйте CloudFront и ACM.
- Файлы не обновляются в браузере — вероятно, нужен кеш CloudFront или браузера.
Решение для кастомного домена и HTTPS
- Создайте сертификат в AWS Certificate Manager в регионе us-east-1 (если используете CloudFront).
- Настройте CloudFront с S3 origin; при необходимости включите Origin Access Identity, чтобы закрыть бакет.
- Привяжите домен в Route 53 (или другом DNS) к дистрибутиву CloudFront.
Модель принятия решения
- Простая страница, тестовая: прямой S3 с публичными объектами.
- Продакшн сайт с HTTPS: S3 + CloudFront + ACM.
- Динамический бэкенд: используй Lambda/API Gateway или отдельный сервер.
Краткое резюме
- S3 подходит для статических сайтов и простых landing page.
- Для безопасности и HTTPS используйте CloudFront и ACM.
- Автоматизируйте деплой через CI/CD и следите за правами доступа.
ЧАВО
Можно ли хостить динамический сайт в S3?
Нет. S3 предназначен для статических файлов. Для динамики используйте серверную логику (Lambda, EC2, Elastic Beanstalk).
Можно ли привязать собственный домен и получить HTTPS бесплатно?
Да. Используйте CloudFront + AWS Certificate Manager. ACM выдаёт сертификаты бесплатно для использования с CloudFront.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone