Прежде, чем я начну своё повествование о процессе, хочу отметить, что выступаю не в качестве специалиста в области сервисов Amazon, а в качестве разработчика, которому пришлось в моменте столкнуться с технологией, и к сожалению, некогда было детально разбираться c довольно громоздкой панелью управления. Гайд подойдёт для тех, кто ещё не сталкивался с AWS, но хотел бы попробовать его для своих личных проектов, либо обучиться самим технологиям. Мы рассмотрим с вами создание простого пользователя IAM, необходимую конфигурацию для работы, и простой пример работы с библиотекой Boto3.

Шаг первый (создание пользователя IAM)

Amazon рекомендует не совершать подключение через root пользователя, чтобы не допустить неприятных ситуаций с безопасностью, а вместо этого, рекомендует создать пользователя IAM, и наделить его конкретными правами.

Первым делом, после регистрации на сервисе, необходимо открыть меню в верхнем правом углу, и выбрать раздел Security Credentials:

Необходимый раздел Security credentials
Необходимый раздел Security credentials

Далее, на открывшейся странице, необходимо выбрать раздел Access managment -> Users:

Необходимый раздел Users
Необходимый раздел Users

Отлично, мы оказались на странице, где отображён список уже созданных пользователей.
Следующий шаг — нажать на кнопку Add users:

Необходимо нажать на кнопку Add users
Необходимо нажать на кнопку Add users

Мы оказались на странице создания IAM пользователя. После того как имя пользователя было указано, нам предлагают выбрать тип пользователя. Я выбрал второй вариант, так как не располагал временем изучать дополнительный сервис Identity Center для настройки и управления пользователями. Следующим шагом станет создание пароля для пользователя, на этой же странице:

Желательно всё-таки выбирать первый вариант
Желательно всё-таки выбирать первый вариант

Следующий, и не менее важный этап —  настройка доступов. Я выбрал третий вариант, так как не располагаю настроенными группами пользователей, и не хочу копировать настройки раннее созданного пользователя:

Выбираем Attach polices directly
Выбираем Attach polices directly

Ниже выбираем необходимую политику в зависимости от сервиса, с которым мы будем работать. Напоминаю, что в нашем случае мы рассматриваем S3. Опять же, так как мне нет необходимости прописывать политики для пользователя детально, я выбираю полный доступ.

Выбираем AmazonS3FullAccess
Выбираем AmazonS3FullAccess

Обратите внимание на кнопку Create policy. В этой статье я не буду рассматривать такую возможность. Тем не менее, вы можете скорректировать json файл с политиками под себя, настроив учётную запись максимально гибко, для выполнения всевозможных задач с сервисами Amazon.

Далее необходимо подтвердить создание юзера, и мы вновь оказываемся в разделе Users, где в списке доступных IAM пользователей можем наблюдать новую учётную запись. Нажмите на имя вашего пользователя, чтобы перейти в раздел управления учётной записью. Нас будет интересовать Security credentials.

Выбираем Security Credentials
Выбираем Security Credentials

Обратите внимание на раздел Access keys, который находится ниже. Это следующее, что мы должны сделать. Эти ключи понадобятся нам, чтобы взаимодействовать с сервисами Amazon.

Не стесняемся нажать на create access key
Не стесняемся нажать на create access key

Среди множества вариантов, я выбрал второй, так как буду использовать эти ключи в .env файле. Выбирайте нужный вариант в зависимости от поставленных перед вами задач.

Выбирайте наиболее подходящий вам вариант
Выбирайте наиболее подходящий вам вариант

Обязательно сохраните секретные ключи и позаботьтесь о том, чтобы они остались в целости и сохранности, так как без них доступ к сервисам через API невозможен.

Не терять!
Не терять!

Поздравляю! С первым этапом мы справились, ещё немного!

Шаг второй ( Создание S3 Bucket)

После того как пользователь был создан, мы с вами создадим bucket, в котором будут храниться наши файлы. Для этого перейдите в раздел S3, который вы с лёгкостью сможете отыскать в поисковой строке сайта.

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

Нажимай Create bucket
Нажимай Create bucket

Если вы не "продвинутый" пользователь, оставляйте все настройки без изменений, чтобы не напортачить, и всё точно работало (только обязательно обратите внимание на регион). А теперь переходим к последнему этапу подготовки.

Шаг третий (Amazon CLI и SDK Boto3)

Интерфейс командной строки AWS (AWS CLI) – это единый инструмент для управления сервисами AWS. В нашем случае, он необходим для того, чтобы добавить наши Security Cretentials, и получить доступ к сервисам Amazon. Установить Amazon CLI можно по ссылке с GitHub. Я пользуюсь venv, поэтому устанавливаю таким образом:

$ python -m pip install awscli

Нас с вами, пока что, интересует только одна команда в терминале:

$ aws configure
AWS Access Key ID: MYACCESSKEY
AWS Secret Access Key: MYSECRETKEY
Default region name [us-west-2]: us-west-2
Default output format [None]: json

Как вы можете видеть из вывода. При запуске команды aws configure, сервис запрашивает те самые секретные данные, которые мы создали для IAM пользователя. Данные автоматически подтянутся в ~/.aws/credentials или в %UserProfile%\.aws/credentials, если вы пользователь Windows.

Также, вы можете указать эти данные в .env файле, если не используете расширения AWS Toolkit от Amazon.

AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"
AWS_DEFAULT_REGION="us-west-2"

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

pip install boto3

Вуаля! Мы с вами выполнили необходимые действия по настройке, а теперь можем смело приступать к написанию кода. Ниже, приведу пример использования библиотеки boto3:

import os
from dotenv import load_dotenv
import boto3

# С помощью библиотеки python-dotenv загружаем данные из .env файла
load_dotenv()

aws_access_id = os.environ.get("AWS_ACCESS_KEY_ID")
aws_secret_key = os.environ.get("AWS_SECRET_ACCESS_KEY")

# Далее, нам необходимо создать клиента. Подробнее об этом после примера.
client = boto3.client("s3",
                      aws_access_key_id=aws_access_id,
                      aws_secret_access_key=aws_secret_key)


# Хардкодно указанная директория, только для примера, не рекомендую так делать
path = "../new-topics/new-bot/datatopics/simple"

# Проходим по всем файлам на пути, который мы указали,
# и загружаем файлы с расширением ".txt" в наш с вами bucket
for file in os.listdir(path):
    if ".txt" in file:
        file_path = os.path.join(path, file)
        upload_file_bucket = "bucket-example"
        # Если в бакете есть папка "text", файлы будут загружены туда,
        # в противном случае можно оставить только str(file)
        upload_file_key = "text/" + str(file)
        # Непосредственно загружаем
        client.upload_file(file_path,
                           upload_file_bucket,
                           upload_file_key)

Файлы успешно загружены!

Немного слов о создании клиента. Amazon предлагает возможность использовать API на низком уровне, используя client, и на более высоком resource. Подробнее об этом можно прочитать в специализированной документации для Boto3.

Подведем итог

Мы совершили с вами простую настройку пользователя IAM для работы с ресурсами AWS, провели необходимые установки и конфигурацию, а также разобрали простой пример использования boto3.

Удобно, что библиотека позволяет работать практически со всеми ресурсами AWS, не переключаясь между инструментами, что повышает скорость разработки. А объект Session (читай документацию), позволяет настроить конфигурацию сразу для нескольких сервисов, если присутствует необходимость подключения разных DB к вашему сервису.

Спасибо за внимание!

Комментарии (2)


  1. Gadd
    16.07.2023 14:01

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

    Думаю, начинающим будет крайне интересна вот эта ссылка: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html
    А в ней уже есть ссылки на нужные AWS доки


    1. heretic_ded Автор
      16.07.2023 14:01

      Согласен с дополнением????????