Thank you for reading this post, don't forget to subscribe!
Работаем с бакетом из приложения на ЕС2
начнём работу с Simple Storage Service с создания контейнера для файлов - так называемого бакета. В рамках этого задания мы должны создать бакет, куда мы сможем загружать файлы, доступные для скачивания кому угодно, то есть публичное хранилище.
Для начала перейдём в службу S3 и нажмём на Create Bucket. В первом шаге надо ввести уникальное имя и выбрать регион:
Снимите галку с чекбокса “Block all public access” - эти файлы должны быть доступны для скачивания без авторизации. Подтвердите такой доступ галкой в окне предупреждения внизу.
Включим версионирование, так что старые версии перезаписанных файлов будут нам доступны:
Шифрование здесь нам не понадобится:
Закончим создание бакета. Изучите вкладки управления и загрузите пару файлов.
Как будете готовы, давайте продолжим и настроим правила для файлов (Lifecycle rules). Они настраиваются во вкладке Management. Создадим новое правило:
Введите любое подходящее имя и задайте область действия правила. В этом примере я хочу задать правило для всех объектов бакета, поскольку он хранит однотипные объекты с одинаковой политикой:
Теперь выберу настройку “Transit previous versions of objects”, она позволит менять классы хранения для прошлых версий файлов.
Такие версии я буду считать устаревшими и не подлежащими активному скачиванию. Поэтому в разделе настройки этого правила укажу два следующих перехода:
- Перевести в One Zone-IA через 30 дней (меньше нельзя)
- Перевести в Glacier Deep Archive через 60 дней
Чуть ниже можно увидеть действующие правила: справа для актуального версий файлов, слева - для устаревших. Заметьте, что эти настройки имеют смысл только при включенном версионировании.
Продолжим настройки правил классов хранения - теперь я хочу переключить класс и для действующей версии файла: спустя два месяца после загрузки она должна уходить в Infrequent Access (Подразумевается, что файл активно скачивается только первые два месяца после загрузки)
Теперь Timeline Summary (сводка правил) выглядит так:
Такой подход неплох, но имеет очевидный недостаток: файлы будут храниться вечно, постоянно требуя денег за хранение. Чтобы предотвратить ненужные расходы, я хочу удалять старые версии через год после их устаревания.
Поставим ещё одну галку, добавив правило для удаления прошлых версий: “Permanently Delete previous versions”
И установим отсрочку в 365 дней:
Проверим Timeline Summary:
Работаем с бакетом из приложения на ЕС2
Мало создать бакет, надо ещё и с ним поработать, а для этого придётся соответствующим образом настроить безопасность. Для выполнения этого задания нам потребуются бакет S3 и инстанс EC2. Пожалуйста, создайте их сами, используя следующие данные:
- Бакет с отключенным публичным доступом
- Инстанс EC2: простой Amazon Linux 2 на базе T2.Micro вполне подойдёт.
Теперь надо создать роль, а значит нужно перелогиниться - вы ведь не работаете под учётной записью рута? Заходите в root-аккаунт и переходите в сервис IAM.
Во вкладке Roles таится заветная кнопка Create Role. В начале выберем тип роли: AWS Service и подключим нужный сервис (EC2).
В следующем шаге нужно присоединить существующую политику или создать новую. Мы создадим новую:
В режиме создания политики, выберите вкладку JSON и добавьте следующую политику:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::BUCKETNAME"] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::BUCKETNAME/*"] } ] } |
Изучите этот файл. Не забудьте поменять BUCKETNAME на имя вашего бакета!
Затем нам придётся назвать эту политику и сохранить её:
Теперь надо вернуться на вкладку создания роли и обновить список политик - наша новая будет уже там. Для простоты поиска можно указать название политики в поиске:
В завершении процесса, нужно указать имя роли:
Теперь подключимся к нашему инстансу. Используйте EC2 Connect или SSH, для данного упражнения это не имеет значения.
Попробуем просмотреть список файлов в бакете при помощи команды aws s3 ls s3://BUCKETNAME
Сейчас это невозможно, поскольку AWS Cli не настроен, и этот инстанс не сможет использовать наш бакет. Вернёмся к списку инстансов, выберем наш и изменим IAM роль: Actions -> Security -> Modify IAM Role.
В коротком списке допустимых ролей выберем новую роль:
И повторим прошлый запрос, в ответ ничего не должен выдать:
aws s3 ls s3://BUCKETNAME
Готово. Теперь попробуйте загрузить любой файл при помощи команды copy и проверить его наличие предыдущей командой.
aws s3 cp FILE s3://BUCKET