Взаимодействие с S3 через API
В инструкции будут рассмотрены примеры по взаимодействию с S3 через API с помощью ПО Bruno и Postman.
1. Создайте Environment
Создание набора переменных в Bruno или Postman.
Переменные Environment
s3_endpoint: https://s3.example.local — Адрес RGW без / в конце.
s3_access_key: ACCESS_KEY — S3 Access Key.
s3_secret_key: SECRET_KEY — S3 Secret Key.
s3_region: default или ru-central1 — Region вашего S3/RGW стенда.
s3_service: s3 — Имя сервиса для AWS Signature V4.
bucket: api-test-bucket-001 — имя bucket.
2. Настройка Bruno
Создайте Collection.
Откройте Environments → Create и создайте environment.
Добавьте в Environment все переменные из предыдущего раздела.
Выберите ваш созданый ранее Environment как активный.
Откройте настройки авторизации Collection и выберите AWS Sig V4.
Консоль1.2.3.4.Access Key ID: {{s3_access_key}} Secret Access Key: {{s3_secret_key}} Service Name: {{s3_service}} AWS Region: {{s3_region}}Советдля запросов внутри Collection используйте наследование авторизации, чтобы не дублировать ключи в каждом запросе.Создайте запрос проверки подключения.
Консоль1.GET {{s3_endpoint}}Нажмите Send.
При корректных endpoint и подписи RGW возвращает HTTP 200 и XML со списком bucket текущего пользователя.
3. Настройка Postman
Откройте Environments → Create Environment и создайте.
Добавьте в Environment все переменные из предыдущего раздела.
Выберите ваш созданый ранее Environment как активный.
Создайте Collection.
Откройте Authorization коллекции и выберите Auth Type = AWS Signature.
Консоль1.2.3.4.AccessKey: {{s3_access_key}} SecretKey: {{s3_secret_key}} AWS Region: {{s3_region}} Service Name: {{s3_service}}Во всех запросах внутри Collection выберите Inherit auth from parent.
Создайте запрос проверки подключения.
Консоль1.GET {{s3_endpoint}}Нажмите Send.
При корректных endpoint и подписи RGW возвращает HTTP 200 и XML со списком bucket текущего пользователя.
5. Выполните базовые S3-запросы
5.1. Получить список bucket
Результат: HTTP 200. В ответе XML со списком bucket текущего пользователя.
5.2. Создать bucket
Результат: Bucket {{bucket}} создан.
5.3. Получить список объектов
Результат: HTTP 200. Для нового bucket список объектов пуст.
5.4. Загрузить объект
Результат: Объект {{object_key}} появляется в bucket {{bucket}}.
5.5. Получить объект
Результат: HTTP 200. В body ответа содержимое загруженного объекта.
5.6. Получить метаданные объекта
Результат: HTTP 200. Тело ответа отсутствует; метаданные доступны в response headers.
5.7. Скопировать объект
Результат: В bucket появляется {{copy_object_key}}. Body не требуется.
5.8. Удалить копию объекта
Результат: Объект {{copy_object_key}} удалён.
5.9. Удалить основной объект
Результат: Объект {{object_key}} удалён.
5.10. Удалить bucket
Результат: HTTP 204 No Content. Bucket удалён.
8. Если запрос не работает
403 AccessDenied
Проверьте права пользователя на bucket/object, ACL и policy.
403 SignatureDoesNotMatch
Проверьте Access Key, Secret Key, region, endpoint и системное время. После исправления повторите GET {{s3_endpoint}}.
404 NoSuchBucket
Проверьте значение {{bucket}} и активный environment.
404 NoSuchKey
Проверьте {{object_key}} и выполните List Objects.
409 BucketAlreadyExists
Измените значение {{bucket}} на уникальное имя.
409 BucketNotEmpty
Удалите объекты из bucket и повторите DELETE.