Лаб. работа 2 — AWS S3

Цель работы: Познакомиться с базовыми операциями работы в AWS через веб-консоль и командную строку, научиться настраивать хостинг статического веб-сайта в S3 и управлять доступом к бакету.

Шаг 1: Вход в веб-консоль AWS через IAM-аккаунт

  1. Перейдите на AWS Management Console.

  2. Введите учетные данные IAM-пользователя (логин и пароль).

Шаг 2: Создание бакета S3 со включенным ACL

  1. Откройте сервис S3 в веб-консоли AWS.

  2. Нажмите Create bucket.

  3. Укажите имя бакета (например, <группа>-<фамилия>).

  4. Выберите регион.

  5. Отключите блокировку публичного доступа (поставьте галочку согласия).

  6. Включите ACL (Access Control Lists) и добавьте разрешение на чтение для всех (Everyone, List и Read).

  7. Создайте бакет.

Шаг 3: Создание и загрузка файла index.html

  1. Локально создайте файл index.html со следующим содержимым:
    <!DOCTYPE html>
    <html>
    <head><title>Мой сайт</title></head>
    <body>
       <h1>Добро пожаловать!</h1>
    </body>
    </html>
    
  2. В веб-консоли AWS откройте созданный бакет.

  3. Перейдите во вкладку Objects и загрузите index.html.

  4. Вернитесь в списке объектов (файлов), выделите загруженный index.html и выберите ActionsMake public using ACL, подтвердите действие.

Шаг 4: Включение хостинга веб-сайтов и проверка работы

  1. В настройках бакета выберите PropertiesStatic website hosting.

  2. Включите хостинг и укажите index.html как Index document.

  3. Сохраните настройки.

  4. Скопируйте выданный в разделе Static website hosting URL (вида http://<bucket>.s3-website-<region>.amazonaws.com) и откройте его в браузере. Помните, что адрес использует http, а не https.

Шаг 5: Отключение ACL и настройка доступа через политики

  1. В настройках бакета отключите ACL (Access Control Lists).

  2. Откройте PermissionsBucket policy и вставьте следующую JSON-политику:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::<имя бакета>/*"
        }
      ]
    }
    

    Не забудьте изменить <имя бакета> на имя созданного ранее бакета.

  3. Сохраните политику и убедитесь, что сайт продолжает работать в браузере.

Шаг 6: Создание ключа доступа для CLI в веб-консоли

  1. В веб-консоли AWS, в правом верхнем углу нажмите на ссылку своего пользователя.

  2. Откройте Security credentials и создайте новый Access key (для Command Line Interface (CLI)).

  3. Сохраните Access Key ID и Secret Access Key.

⚠️ Access Key ID и Secret Access Key — это чувствительные данные, эквивалентные логину и паролю. Не сохраняйте их в открытых файлах, не публикуйте в общих репозиториях. После завершения лабораторной работы удалите ключ (см. Шаг 11).

Шаг 7: Установка AWS CLI на локальный компьютер

  1. Скачайте и установите AWS CLI (инструкции).

  2. Проверьте установку командой:

    aws --version
    
  3. Настройте AWS CLI командой:

    aws configure
    

    Введите сохраненные Access Key ID и Secret Access Key.

Шаг 8: Проверка списка бакетов и файлов через командную строку

  1. Выведите список бакетов:
    aws s3 ls
    
  2. Выведите список файлов в бакете:
    aws s3 ls s3://<имя бакета>/
    

Шаг 9: Модификация index.html и загрузка его через командную строку

  1. Измените index.html, добавив строку:
    <p>Новая версия сайта</p>
    
  2. Загрузите файл в S3:
    aws s3 cp --content-type "text/html" index.html s3://<имя бакета>/
    
  3. Откройте сайт в браузере и убедитесь, что изменения применились. Если открывается старая версия, попробуйте обновить с очисткой кеша (для этого нажмите Ctrl+Shift+R либо Cmd+Shift+R либо Ctrl+F5).

Шаг 10: Удаление бакета через командную строку

  1. Удалите все файлы в бакете:
    aws s3 rm s3://<имя бакета>/ --recursive
    
  2. Удалите сам бакет:
    aws s3 rb s3://<имя бакета>/
    

Шаг 11: Удаление ключа доступа CLI

После завершения работы с AWS CLI рекомендуется удалить созданный access key, если он больше не нужен. Хранение неиспользуемых ключей доступа повышает риск их утечки и несанкционированного использования.

  1. Перейдите в веб-консоль AWS → своё имя пользователя (правый верхний угол) → Security credentials.
  2. В разделе Access keys найдите ключ, созданный в Шаге 6.
  3. Нажмите ActionsDelete, подтвердите удаление.
  4. Убедитесь, что ключ больше не отображается в списке.

Важно: Access Key ID и Secret Access Key дают полный доступ к тем действиям, которые разрешены вашему IAM-пользователю. Если ключ не используется — его следует деактивировать (ActionsDeactivate) или удалить. Никогда не публикуйте ключи в открытом коде, репозиториях (например, на GitHub) или сообщениях — это одна из самых частых причин компрометации AWS-аккаунтов.

Контрольные вопросы

  1. Чем отличается управление доступом через ACL от управления через bucket policy? Какой способ рекомендует AWS сегодня и почему?
  2. Что такое Block Public Access и почему его нужно отключить, прежде чем сделать бакет/объект публичным?
  3. Чем отличается URL объекта (s3.amazonaws.com/...) от endpoint статического сайта (s3-website-....amazonaws.com)?
  4. Почему статический сайт на S3 endpoint нельзя открыть по HTTPS напрямую и как это можно исправить?
  5. Что произойдёт, если в bucket policy указать "Principal": "*" без ограничения Action? В чём риск такой политики?
  6. Какие данные нужны для настройки AWS CLI командой aws configure, и где их получить в консоли?
  7. Чем отличается aws s3 cp от aws s3 sync? Когда стоит использовать второй вариант?
  8. Что произойдёт при попытке aws s3 rb для бакета, в котором ещё остались объекты? Как это исправить?
  9. Почему после обновления index.html через CLI браузер может показывать старую версию страницы, и как это проверить/обойти?
  10. Почему созданные для лабораторной работы Access Key рекомендуется удалять после завершения работы?