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

Создание и удаление S3‑бакета с помощью Boto3 и Python

6 min read Cloud Обновлено 26 Nov 2025
Создание и удаление S3‑бакета через Boto3
Создание и удаление S3‑бакета через Boto3

Изображение: облачное хранилище AWS S3 и логотип Python

Кратко: в статье показано, как установить библиотеку Boto3 для Python, создать и удалить S3‑бакет через методы client.create_bucket и client.delete_bucket. Приведены готовые скрипты, рекомендации по безопасности и чеклисты для тестирования.

Что вы получите из этой статьи

  • Быстрый пошаговый пример создания и удаления S3‑бакета через Boto3.
  • Рабочие скрипты для создания и удаления бакета.
  • Объяснение важных параметров create_bucket и возможных ошибок.
  • Альтернативы, чеклист ролей, меры безопасности и критерии приёмки.

Предпосылки

  1. Аккаунт AWS (создайте, если его нет).
  2. Базовое понимание S3: объекты, бакеты, регионы.
  3. Базовые навыки Python.
  4. Установленный Python и pip на вашей машине.

План работы

  1. Установить Boto3.
  2. Ознакомиться с требуемыми методами (create_bucket, delete_bucket).
  3. Создать и удалить S3‑бакет с помощью Python‑скриптов.

Установка зависимостей Boto3

На Ubuntu Python обычно уже установлен. Проверить версию Python можно командами:

which python /usr/bin/python –version

или

python –version

Если pip отсутствует (Ubuntu), сначала обновите локальный репозиторий:

sudo apt update

Установите pip:

sudo apt install python-pip

Проверьте версию pip:

pip –version

После установки Python и pip установите Boto3:

pip install boto3

Установка boto3 через pip, вывод консоли с подтверждением успешной установки

Проверить установленную библиотеку и её версию:

pip show boto3

Вывод pip show boto3 с информацией о пакете и версии

Ознакомление с методами Boto3

Для создания бакета мы используем метод create_bucket клиента S3. Ниже — синтаксис метода с параметрами (полный список). Вы не обязаны передавать все параметры — достаточно минимального набора.

Request Syntax of create_bucket method

response = client.create_bucket(
    ACL='private'|'public-read'|'public-read-write'|'authenticated-read',
    Bucket='string',
    CreateBucketConfiguration={
        'LocationConstraint': 'EU'|'eu-west-1'|'us-west-1'|'us-west-2'|'ap-south-1'|'ap-southeast-1'|'ap-southeast-2'|'ap-northeast-1'|'sa-east-1'|'cn-north-1'|'eu-central-1'
    },
    GrantFullControl='string',
    GrantRead='string',
    GrantReadACP='string',
    GrantWrite='string',
    GrantWriteACP='string',
    ObjectLockEnabledForBucket=True|False
)

Краткие пояснения параметров:

  1. ACL: заранее определённый набор прав доступа (canned ACL). Обычно “private” по умолчанию.
  2. Bucket: имя бакета — обязательно уникально в глобальном масштабе.
  3. CreateBucketConfiguration / LocationConstraint: регион создания. По умолчанию (если не указан) используется us‑east‑1 (N. Virginia). Для других регионов обязательно указывать соответствующий LocationConstraint.
  4. GrantFullControl, GrantRead, GrantReadACP, GrantWrite, GrantWriteACP: дополнительные разрешения для грантов.
  5. ObjectLockEnabledForBucket: включение Object Lock (влияет на возможность удаления объектов).

Для удаления используется метод delete_bucket:

response = client.delete_bucket(
    Bucket='string'
)

Важно: delete_bucket удалит только пустой бакет. Если в бакете есть объекты (включая версионированные объекты), сначала нужно удалить объекты или очистить версии.

Пример: подготовка файла конфигурации

Создайте файл config.properties, в котором будут храниться ваши ключи доступа и регион. В примере используются простые переменные — не храните секреты в публичных репозиториях.

config.properties

aws_access_key_id_value='ACCESS-KEY-OF-THE-AWS-ACCOUNT'
aws_secret_access_key_value='SECRETE-KEY-OF-THE-AWS-ACCOUNT'
region_name_value='eu-west-3'

Создание файла конфигурации с ключами доступа (пример)

Важно: безопаснее использовать профили AWS CLI, переменные окружения или IAM‑роли для EC2/Lambda вместо явной записи ключей в файл.

Скрипт: создание S3‑бакета (create-s3-bucket.py)

Файл create-s3-bucket.py (ниже — исходный пример). Этот скрипт читает значения из config.properties и создаёт бакет с именем, указанным в параметре Bucket. Измените имя бакета на своё уникальное.

vim create-s3-bucket.py

import boto3

def getVarFromFile(filename):
    import imp
    f = open(filename)
    global data
    data = imp.load_source('data', '', f)
    f.close()


getVarFromFile('config.properties')

client = boto3.client(
's3',
    aws_access_key_id=data.aws_access_key_id_value,
    aws_secret_access_key=data.aws_secret_access_key_value
)

response = client.create_bucket(
    Bucket='rahul-boto3-test-delete',
    CreateBucketConfiguration={
        'LocationConstraint': 'eu-west-3',
    },
)

print (response)

Скрипт на Python для создания S3‑бакета, вывод ответов API

Примечания по коду:

  • Параметр CreateBucketConfiguration с LocationConstraint обязателен для создания бакета вне региона us‑east‑1.
  • Если вы используете профиль AWS CLI, предпочтительнее создать клиент через boto3.Session(profile_name=…) или полагаться на переменные окружения.

Альтернативный, более современный пример создания клиента с явным указанием региона:

import boto3
from botocore.exceptions import ClientError

session = boto3.Session(
    aws_access_key_id=data.aws_access_key_id_value,
    aws_secret_access_key=data.aws_secret_access_key_value,
    region_name=data.region_name_value
)

client = session.client('s3')

try:
    response = client.create_bucket(
        Bucket='my-unique-bucket-name',
        CreateBucketConfiguration={'LocationConstraint': data.region_name_value}
    )
    print('Bucket created:', response)
except ClientError as e:
    print('Ошибка создания бакета:', e)

Скрипт: удаление S3‑бакета (delete-s3-bucket.py)

Файл delete-s3-bucket.py — код для удаления бакета. Обратите внимание: бакет должен быть пустым.

vim delete-s3-bucket.py

def getVarFromFile(filename):
    import imp
    f = open(filename)
    global data
    data = imp.load_source('data', '', f)
    f.close()


getVarFromFile('config.properties')

client = boto3.client(
's3',
    aws_access_key_id=data.aws_access_key_id_value,
    aws_secret_access_key=data.aws_secret_access_key_value
)

response = client.delete_bucket(Bucket='rahul-boto3-test-delete')

print (response)

Скрипт на Python для удаления S3‑бакета, пример вывода API

Команды для запуска скриптов:

  • Создать бакет:

python create-s3-bucket.py

  • Удалить бакет:

python delete-s3-bucket.py

Важные примечания и распространённые ошибки

  • Нельзя создать бакет с именем, уже используемым в глобальном масштабе. Вы получите ошибку BucketAlreadyExists.
  • Удаление не сработает, если в бакете есть объекты или включена версионирование (требуется удаление всех версий).
  • Если включён Object Lock, удаление объектов и бакета может быть заблокировано.
  • При создании в регионе, отличном от us‑east‑1, укажите соответствующий LocationConstraint, иначе получите ошибку.
  • Никогда не храните секретные ключи в публичных репозиториях. Предпочитайте IAM‑роли и переменные окружения.

Когда это не сработает (Counterexamples)

  • Попытка удалить непустой бакет: вы получите 409 Conflict или AccessDenied. Необходимо сначала удалить объекты и версии.
  • Неправильные политики IAM: если у пользователя нет прав s3:CreateBucket или s3:DeleteBucket — операции будут отклонены.
  • Имя бакета конфликтует с политиками DNS или не соответствует правилам S3 (недопустимые символы, слишком короткое/длинное имя).

Альтернативные подходы

  • AWS CLI: aws s3 mb s3://bucket-name и aws s3 rb s3://bucket-name –force. Удобно для одноразовых задач.
  • Terraform / CloudFormation: объявьте ресурс aws_s3_bucket и управляйте инфраструктурой как кодом.
  • AWS Console: визуальный способ создать бакет с подробными настройками (версионирование, шифрование, политики).

Модель мышления и эвристики при создании бакета

  • Минимум прав: выдавайте IAM‑полномочия только тем сущностям, которые действительно должны управлять бакетом.
  • Регион ближе к пользователям/ресурсам — ниже задержка и, возможно, стоимость.
  • Версионирование ≠ резервное копирование: используйте версионирование для защиты от удаления/перезаписи, но применяйте жизненный цикл для управления запасами.

Контрольный список ролей (Role-based checklist)

  • Разработчик:
    • Проверил локальную установку Python/Boto3.
    • Запустил скрипт создания в тестовом аккаунте.
  • Администратор/DevOps:
    • Настроил IAM‑политику с принципом Least Privilege.
    • Настроил логирование доступа (S3 Server Access Logging, CloudTrail).
  • Безопасность:
    • Проверил включение шифрования на уровне бакета (SSE‑S3 или SSE‑KMS).
    • Проверил отсутствие публичного доступа, если он не требуется.

Критерии приёмки

  • Скрипт создаёт бакет с заданным именем в указанном регионе без ошибок.
  • Бакет доступен для чтения/записи согласно заданным ACL/политикам.
  • Скрипт корректно удаляет бакет, если в нём нет объектов.
  • Журнал операций (CloudTrail) содержит записи о create_bucket/delete_bucket.

Безопасность и рекомендации по защите

  • Используйте IAM‑роли для EC2/Lambda вместо встраивания ключей в код.
  • Храните секреты в AWS Secrets Manager или Parameter Store.
  • Включайте серверное шифрование (SSE) для критичных данных.
  • Настройте блокировку публичного доступа на уровне аккаунта и бакета, если публичный доступ не нужен.
  • Ограничьте доступ через политики бакета и VPC endpoint, если требуется.

Примеры тестов и сценарии приёма

  • Позитивный тест: создать бакет с уникальным именем и проверить статус ответа API 200/200‑серии.
  • Негативный тест: попробовать создать бакет с уже существующим именем — ожидается ошибка BucketAlreadyExists.
  • Удаление непустого бакета: ожидается ошибка; затем очистка объектов и успешное удаление.

Мини‑методология для рабочей процедуры

  1. Настроить безопасный доступ (IAM/роли/profiles).
  2. Тестировать создание в dev/тест‑аккаунте.
  3. Внедрять через CI/CD или Infrastructure as Code.
  4. Проверять логи и оповещения.

Пример простого плейбука

  • Шаг 1: Подготовить config.properties или профиль AWS.
  • Шаг 2: Запустить create-s3-bucket.py.
  • Шаг 3: Проверить бакет в консоли AWS и через aws s3 ls.
  • Шаг 4: Если бакет больше не нужен — очистить и запустить delete-s3-bucket.py.

Mermaid: базовый поток операций

flowchart TD
  A[Начало] --> B{Есть credentials?}
  B -- Нет --> C[Настроить профиль или переменные окружения]
  B -- Да --> D[Запустить скрипт создания]
  D --> E{Создано успешно?}
  E -- Да --> F[Проверить в консоли]
  E -- Нет --> G[Просмотреть ошибку / IAM права]
  F --> H[Использование бакета]
  H --> I[Очистка и удаление]
  I --> J[Запустить delete-s3-bucket.py]
  J --> K[Конец]

Часто задаваемые вопросы

Можно ли создать бакет без указания региона?

Да — по умолчанию бакеты создаются в регионе us‑east‑1. Но для других регионов обязательно указывать CreateBucketConfiguration с соответствующим LocationConstraint.

Что делать, если delete_bucket возвращает ошибку?

Проверьте, что бакет пустой: удалите все объекты и версии (если включено версионирование). Проверьте права IAM и Object Lock.

Безопасно ли хранить ключи в config.properties?

Нет. Это удобно для локальной разработки, но небезопасно для продакшена. Используйте IAM‑роли, переменные окружения, AWS Profiles или Secrets Manager.

Заключение

Мы показали базовый рабочий процесс создания и удаления S3‑бакета с помощью Boto3 для Python: от установки библиотеки до запуска готовых скриптов. Также рассмотрены распространённые ошибки, альтернативные подходы, рекомендации по безопасности и чеклисты для ролей.

Ключевые рекомендации:

  • Проверяйте регион (LocationConstraint) при создании.
  • Убедитесь, что бакет пуст перед удалением.
  • Не храните секреты в репозиториях; используйте IAM‑роли или Secrets Manager.

Краткое резюме:

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

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

  • S3: объектное хранилище AWS.
  • Бакет: пространство имён в S3 для хранения объектов.
  • Boto3: официальная Python‑библиотека для работы с AWS.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Как создать титульную страницу в Word
Руководство

Как создать титульную страницу в Word

Emergency SOS по спутнику на iPhone 14
Безопасность

Emergency SOS по спутнику на iPhone 14

Как определить устройства в вашей Wi‑Fi‑сети
Безопасность сети

Как определить устройства в вашей Wi‑Fi‑сети

Как лучше запоминать прочитанное
Чтение

Как лучше запоминать прочитанное

Как обновить игры PS4 до версий PS5
Игры

Как обновить игры PS4 до версий PS5

Как записать видео на Nintendo Switch
Игры

Как записать видео на Nintendo Switch