Гид по технологиям

Как развернуть статический сайт на AWS S3

8 min read DevOps Обновлено 14 Dec 2025
Как развернуть статический сайт на AWS S3
Как развернуть статический сайт на AWS S3

Некоторые башенные серверы в стойке с множеством соединительных кабелей

В облаке чаще всего размещают современные сайты и приложения — это выгодно и удобно по масштабируемости. Статический сайт состоит из предсобранных файлов HTML, CSS и JavaScript и не генерирует страницы на лету в ответ на действия пользователя. Для таких сайтов облачные платформы предлагают простые и дешёвые варианты хостинга — один из самых распространённых вариантов в AWS это Amazon S3.

Краткая терминология

  • S3: объектное хранилище AWS для файлов и данных.
  • Бакет (bucket): логическая «корзина» в S3, содержащая объекты (файлы).
  • Статический сайт: набор файлов, которые можно отдавать напрямую по HTTP.

Что такое AWS S3

Amazon Simple Storage Service (S3) — это объектное хранилище данных от Amazon. S3 хранит файлы как объекты с метаданными и предлагает высокую доступность, устойчивость и масштабируемость. S3 используют для резервного копирования, архивации, хранения мультимедиа и — что важно для нас — для хостинга статических сайтов.

Архитектурная особенность S3 — объекты идентифицируются уникальными ключами в бакете. Один объект может быть очень большим (до 5 ТБ), поэтому S3 подходит и для больших медиа‑проёктов.

Дизайн AWS S3

Что такое S3‑бакет

Бакет — это контейнер для объектов. Можно представить его как корневую папку системы, внутри которой хранятся файлы и папки (хотя физически S3 не использует иерархию каталогов, ключи создают видимость папок).

Управлять бакетами можно через AWS Management Console, AWS CLI, SDK или REST API. Бакет может быть почти любого размера и хранить любой тип данных.

Каждый объект обычно доступен по уникальному URL. Для статического хостинга бакет может отдавать объекты по HTTP через специальный веб‑эндпойнт.

Когда стоит использовать S3 для статического сайта

Подходит если:

  • Сайт состоит из статичных файлов (HTML/CSS/JS, изображения, шрифты).
  • Нужна высокая надёжность и масштабируемость без управления серверами.
  • Требуется интеграция с CDN (CloudFront) для глобального ускорения.

Не подходит если:

  • Нужен серверный рендеринг на запрос пользователя.
  • Приложение требует произвольной серверной логики (без серверлесс‑функций).

Пошаговое создание S3‑бакета и включение статического хостинга

Перед началом: зарегистрируйте AWS‑аккаунт и войдите в консоль.

  1. Откройте AWS Console и найдите сервис S3.
  2. На панели S3 нажмите кнопку «Create bucket» (Создать бакет).

Страница сервисов AWS с результатом поиска, включая сервис S3

  1. Введите глобально уникальное имя бакета и выберите регион. Имя должно быть уникальным во всей AWS; если занято — выберите другое.

Секция экрана конфигурации S3‑бакета с именем, регионом и настройкой прав собственности объектов

  1. В разделе политик доступа снимите галочку «Block all public access», чтобы разрешить публичный доступ (не забудьте подтвердить предупреждение). Для статического хостинга контент нужно сделать общедоступным для чтения.

Секция экрана конфигурации S3‑бакета, отображающая параметры публичного доступа и версионирования

  1. Версионирование (Versioning) для статического сайта обычно не обязательно — можно отключить, но для важных данных включение версионирования помогает восстановить старые версии.
  2. По желанию добавьте теги и оставьте шифрование по умолчанию выключенным или включите управляемое шифрование (SSE‑S3). Затем нажмите «Create bucket».

Последняя секция экрана конфигурации S3‑бакета с тегами, шифрованием и кнопкой создания

Включение статического веб‑хостинга

  1. Перейдите в созданный бакет и откройте вкладку Properties (Свойства).

Вкладка Свойства в консоли S3

  1. Найдите блок «Static website hosting» и нажмите Edit (Изменить).

Экран конфигурации статического веб‑хостинга S3

  1. Включите хостинг и укажите Index document (обычно index.html) и Error document (например, 404.html). Сохраните.

  2. После сохранения в свойствах появится «Bucket website endpoint» — это публичный URL вида http://your-bucket-name.s3-website-.amazonaws.com, по которому можно открыть сайт после настройки прав.

Секция статического веб‑хостинга, показывающая веб‑эндпойнт бакета

Как загрузить файлы и папки в бакет

Перейдите на вкладку Objects (Объекты) в вашем бакете и используйте Upload.

Вкладка объектов S3 с кнопкой загрузки объектов

Можно перетаскивать файлы и папки или нажать Add files / Add folders. Обязательно загрузите index.html и все связанные ассеты (css, js, изображения, шрифты).

Экран S3 и проводник локального компьютера, показывающий добавление файлов и папок в бакет

Альтернатива: CLI команды для автоматизации (примеры):

aws s3 mb s3://your-bucket-name --region eu-west-1
aws s3 cp --recursive ./build/ s3://your-bucket-name
aws s3 website s3://your-bucket-name --index-document index.html --error-document 404.html

Разрешение доступа и превью сайта

По умолчанию доступ к объектам закрыт. Откройте вкладку Permissions (Права) и добавьте политику бакета, разрешающую публичное чтение. Пример политики (замените your-bucket-name на имя вашего бакета):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

После применения политики вернитесь в Properties и откройте Bucket website endpoint в браузере — ваш сайт должен быть виден.

Важно: публичный бакет означает, что все файлы становятся общедоступными. Убедитесь, что вы не загружаете конфиденциальные данные.

HTTPS, собственный домен и CloudFront

S3‑веб‑эндпойнт выдаёт сайт по HTTP. Для HTTPS и подключения собственного домена обычно используют Amazon CloudFront (CDN) в связке с AWS Certificate Manager (ACM).

Ключевые шаги:

  1. Создать сертификат в ACM в регионе us‑east‑1 (для CloudFront требуется сертификат в этом регионе).
  2. Создать дистрибутив CloudFront, указать Origin как S3 website endpoint (а не как S3 REST endpoint), чтобы CloudFront корректно обслуживал index и error документы.
  3. В настройках дистрибутива задать Alternate Domain Names (CNAME) = ваш домен и прикрепить сертификат ACM.
  4. Настроить поведение кеширования и заголовки (например, forward headers для CORS, если нужно).
  5. В DNS (Route 53 или другой провайдер) создать алиас/запись CNAME, указывающую на домен CloudFront.

Преимущества: HTTPS на вашем домене, ускорение через CDN, возможность настроить signed URLs и контроль кеширования. Учтите, что CloudFront обладает собственной сложностью и требует отдельной конфигурации.

Безопасность и hardening

Рекомендации по защите статического сайта в S3:

  • Минимизируйте публичные объёмы: делайте публичными только именно те объекты, которые нужны.
  • Политики бакета с ограничением по префиксу: если у вас есть приватные и публичные файлы, вынесите публичные в префикс “public/“ и давайте права только на него.
  • Используйте шифрование на стороне сервера (SSE‑S3 или SSE‑KMS) для защиты данных в покое.
  • Включите мониторинг доступа: AWS CloudTrail и S3 Access Logs помогут расследовать инциденты.
  • По возможности применяйте CloudFront и включайте Origin Access Control (OAC) / Origin Access Identity (OAI) — чтобы напрямую обращаться к объектам мог только CloudFront, а публичный доступ к бакету был закрыт.
  • Ограничьте права IAM: давайте минимально необходимые разрешения для пользователей и сервисов.
  • Если требуется удаление объектов с защитой, рассмотрите MFA Delete (требует дополнительных настроек) и версионирование.

Политики конфиденциальности и соответствие требованиям (GDPR)

Если на статическом сайте обрабатывается персональная информация (например, формы, изображения с идентификаторами), учтите следующее:

  • Хранение: зашифруйте файлы и документируйте сроки хранения.
  • Передача данных: проверьте, где физически находятся регионы хранения и подходят ли они для вашей юрисдикции.
  • Контракт с AWS: используйте Data Processing Addendum (DPA) AWS и настройте технические меры защиты.
  • Минимизируйте сбор данных на клиенте и используйте API серверной стороны для обработки персональных данных.

Альтернативы и когда S3 не лучший выбор

  • GitHub Pages: простая и бесплатная опция для проектов с исходным кодом, но имеет ограничения по функционалу и масштабированию.
  • Netlify / Vercel: предлагают интеграции CI/CD, автоматические деплои из репозитория, функции serverless и удобный workflow для фронтенда.
  • Виртуальные машины или контейнеры: подходят, если нужен серверный рендеринг.

S3 хорош, когда нужен простой, надёжный и масштабируемый статический хостинг. Если вам нужна интеграция CI, превью‑брифы или serverless‑функции «из коробки», рассмотрите Netlify/Vercel.

Автоматизация и CI/CD

Вы можете автоматизировать деплой статического сайта с помощью CI (GitHub Actions, GitLab CI, Bitbucket Pipelines):

  • Сборка проекта (npm run build).
  • Копирование артефактов в S3 (aws s3 sync ./build s3://your-bucket-name –delete).
  • Инвализация CloudFront при необходимости (aws cloudfront create-invalidation –distribution-id –paths “/*”).

Пример GitHub Actions шага для деплоя в S3:

- name: Deploy to S3
  run: aws s3 sync ./build s3://$BUCKET_NAME --delete
  env:
    AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
    AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    AWS_DEFAULT_REGION: eu-west-1

Контроль качества и критерии приёмки

Критерии приёмки перед переводом сайта в продакшен:

  • Главная страница открывается по индексному URL и возвращает 200.
  • Все статические ассеты (CSS, JS, изображения, шрифты) доступны и корректно загружаются.
  • Error document (404.html) отображается при несуществующих путях.
  • HTTPS работает на собственном домене через CloudFront (если требуется).
  • Политика безопасности бакета настроена, лишний публичный доступ отсутствует.
  • Логи доступа и мониторинг включены.

Чек‑листы по ролям

Для разработчика:

  • Подготовить сборку: минификация, контроль версий, карты sourcemap по необходимости.
  • Убедиться, что index.html использует относительные пути к ассетам.
  • Настроить скрипт для синка в S3.

Для DevOps/инфраструктуры:

  • Создать бакет с правильной политикой и региональной привязкой.
  • Настроить CloudFront и ACM для HTTPS.
  • Настроить инвалидацию кеша при деплое.

Для специалиста по безопасности:

  • Проверить IAM‑права и политики бакета.
  • Включить шифрование, мониторинг и оптимально ограничить публичные ресурсы.

Для продакт‑менеджера:

  • Утвердить политику хранения данных и соответствие регуляторным требованиям.
  • Уточнить SLA и ожидания по доступности у команды техподдержки.

Шаблоны и сниппеты (cheat sheet)

Быстрые команды и шаблоны:

  • Создать бакет (CLI):
aws s3 mb s3://your-bucket-name --region eu-west-1
  • Загрузить файлы:
aws s3 sync ./build s3://your-bucket-name --delete
  • Включить конфигурацию сайта (альтернативный метод через CLI):
aws s3 website s3://your-bucket-name --index-document index.html --error-document 404.html
  • Применить публичную политику из файла policy.json:
aws s3api put-bucket-policy --bucket your-bucket-name --policy file://policy.json

Мини‑методология подготовки продакшен‑сайта

  1. Подготовьте build: проверка линтером, тесты, минимизация.
  2. Загрузите артефакты в отдельный staging‑бакет.
  3. Протестируйте функционал, быстродействие и кэширование.
  4. Настройте CloudFront + ACM для HTTPS и привяжите домен.
  5. Выполните финальный деплой в production‑бакет и инвалидацию кеша.
  6. Включите мониторинг и алерты.

Когда всё идёт не так — распространённые проблемы и решения

Проблема: сайт открывается по HTTP, но не по HTTPS на вашем домене. Решение: настройте CloudFront с ACM‑сертификатом (сертификат в us‑east‑1) и используйте CloudFront как источник HTTPS.

Проблема: 403 Forbidden при доступе к объектам. Решение: проверьте политику бакета и разрешения объектов; удостоверьтесь, что объект имеет публичный доступ либо CloudFront настроен с OAI/OAC.

Проблема: неправильные пути к ассетам. Решение: используйте относительные пути в index.html или настройте base href корректно.

Краткое сравнение популярных опций для статического хостинга

  • S3 + CloudFront: гибкость, масштабируемость, хорош для больших медиа.
  • Netlify/Vercel: удобство CI/CD, автоматические превью, функции serverless.
  • GitHub Pages: бесплатен и прост, но ограничен функционалом.

1‑строчный глоссарий

  • S3: облачное объектное хранилище AWS.
  • Bucket: контейнер объектов в S3.
  • CloudFront: CDN AWS для быстрой и безопасной доставки контента.
  • ACM: сервис управления SSL/TLS сертификатами в AWS.

Резюме

S3 — простой и надёжный выбор для статических сайтов: вы получаете масштабируемое хранилище, простую загрузку файлов и возможность интеграции с CDN для HTTPS и ускорения. При переходе в продакшен продумайте безопасность, политику доступа и автоматизацию деплоя.

Важное: если вы работаете с персональными данными, убедитесь в соответствии требованиям конфиденциальности и настройте шифрование и контроль доступа.

Оставайтесь внимательными к правам доступа и используйте CloudFront, если нужен HTTPS на собственном домене.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как сохранить аудиосообщения iPhone навсегда
iPhone

Как сохранить аудиосообщения iPhone навсегда

Исправить ошибку 0x80072EE4 при обновлении Windows
Windows

Исправить ошибку 0x80072EE4 при обновлении Windows

Нет звука на Roku — как исправить
Устройства

Нет звука на Roku — как исправить

Как смотреть HBO Max на Roku — руководство
Streaming

Как смотреть HBO Max на Roku — руководство

Как смотреть Twitch на Roku — руководство
Стриминг

Как смотреть Twitch на Roku — руководство

Как проверить версию Windows 11 — 5 простых способов
Windows

Как проверить версию Windows 11 — 5 простых способов