Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Описание принципов работы с S3

Подробный гайд по принципам работы с S3-хранилищем. 

Реквизиты подключения

Данные для подключения к S3 можно найти в панели управления в настройках нужного бакета.

Кластер s3.timeweb.com

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

  • в качестве Access Key используется логин аккаунта;
  • в качестве Secret Key используется пароль администратора хранилища;
  • в качестве Region используется ru-1;
  • URL для доступа (endpoint_url) — https://s3.timeweb.com.

На текущий момент реализована поддержка AWS Signature V4.

Для подтверждения личности запрашивающего все запросы должны иметь подпись, которую можно создать с помощью Access Key и Secret Key.

Кластер s3.timeweb.cloud

В конфигурационном файле используйте логин и пароль созданного пользователя:

  • в качестве Access Key используется логин аккаунта;
  • в качестве Secret Key используется пароль администратора хранилища;
  • в качестве Region используется ru-1;
  • URL для доступа (endpoint_url) — https://s3.timeweb.cloud.

На текущий момент реализована поддержка AWS Signature V2 и AWS Signature V4.

Для подтверждения личности запрашивающего все запросы должны иметь подпись, которую можно создать с помощью Access Key и Secret Key.

Вычисление подписи

Вычисление подписи состоит из трех шагов:

  1. Получение ключа подписи (SigningKey)
  2. Получение строки для подписи (StringToSign)
  3. Подпись строки с помощью ключа

Получение ключа для подписи (SigningKey)

Для получения подписывающего ключа закодируйте с помощью алгоритма HMAC-SHA256 следующие данные:

DateKey = HMAC-SHA256("AWS4"+"<SecretKey>", "<YYYYMMDD>")
DateRegionKey = HMAC-SHA256(<DateKey>, "<aws-region>")
DateRegionServiceKey = HMAC-SHA256(<DateRegionKey>, "<aws-service>")
SigningKey = HMAC-SHA256(<DateRegionServiceKey>, "aws4_request")

Мы поддерживаем метод подписи запросов через HTTP-заголовок Authorization.

Использование заголовка Authorization является наиболее частным методом аутентификации пользователя.

Общий вид запроса:

Authorization: AWS4-HMAC-SHA256
Credential=12345_USER/20180524/ru-1/s3/aws4_request,
SignedHeaders=host;range;x-amz-date,
Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

Описание параметров запроса:

Параметр

Описание

AWS4-HMAC-SHA256

Подпись AWS версии 4 (AWS4) и алгоритм подписи (HMAC-SHA256)

Credential

Содержит ключ доступа и информацию о запросе в формате: ${ACCESS_KEY}/${YYYYMMDD}/${REGION}/s3/aws4_request

SignedHeaders

Список в нижнем регистре имен заголовков запроса, используемых при вычислении подписи

Signature

Подписанный хэш, состоящий из хэша тела запроса, секретного ключа и информации о запросе (каноническом запросе)

Получение строки для подписи

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

<HTTPMethod>\n
<CanonicalURI>\n
<CanonicalQueryString>\n
<CanonicalHeaders>\n
<SignedHeaders>\n
<HashedPayload>

Где:

  • HTTPMethod — один из HTTP-методов, например GETPUTHEAD и DELETE;
  • CanonicalURI — URI-кодированная часть адреса, которая начинается после домена, с первым «/», например для https://s3.timeweb.com/bucket/sample.txt будет выглядеть следующим образом: /bucket/sample.txt;
  • CanonicalQueryString — параметры строки запроса;
  • CanonicalHeaders — список заголовков и их значений, разделенных новой строкой, в нижнем регистре и без пробелов;
  • SignedHeaders — список имен заголовков без значений, отсортированных по алфавиту, в нижнем регистре и через точку с запятой. Например: host;x-amz-content-sha256;x-amz-date;
  • HashedPayload — хэш SHA256 тела запроса Hex(SHA256Hash()). В случае, если тела запроса нет, хэш необходимо посчитать от пустой строки Hex(SHA256Hash(“”)).

Подпись строки с помощью ключа

Строка для подписи представляет собой конкатенацию следующих строк:

"AWS4-HMAC-SHA256" + "\n" +
timeStampISO8601Format + "\n" +
<Scope> + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))

Где:

  • AWS4-HMAC-SHA256 — данная строка определяет алгоритм шифрования, который вы используете;
  • timeStampISO8601Format — текущее UTC-время в формате ISO 8601 (например, 20130524T000000Z);
  • Scope — строка формата date.Format(<YYYYMMDD>) + "/" + <region> + "/" + <service> + "/aws4_request", например “20130606/ru-1/s3/aws4_request”, привязывает полученную подпись к определенной дате, региону или сервису. В случае привязки к дате, подпись будет действовать 15 минут.

Подробнее о способе аутентификации через заголовок Authorization читайте в официальной документации Amazon S3 API.

Поддержка методов S3

Кластер s3.timeweb.com

Облачное хранилище Timeweb Cloud обеспечивает совместимость с методами AWS S3: Bucket CRUDBucket LocationObject CRUDObject Copy.

Поддерживаемые методы для работы с бакетами

Метод

Описание

GET Service

Получение списка бакетов

GET Bucket (List Objects)

Получение списка объектов в бакете

GET Bucket Location

Получение региона бакета

DELETE Bucket

Удаление бакета

HEAD Bucket

Получение статуса бакета

PUT Bucket

Создание бакета

Поддерживаемые методы для работы с объектами

Метод

Описание

GET Object

Получение объекта

HEAD Object

Получение метаданных объекта

PUT Object

Создание объекта

PUT Object — Copy

Копирование объекта

DELETE Object

Удаление объекта

Кластер s3.timeweb.cloud

Основные методы S3, которые поддерживает хранилище Timeweb Cloud, перечислены ниже. Список всех функций и дополнительную информацию можно найти в официальной документации.

Методы для работы с бакетами

Метод

Описание

GET Service (List Buckets)

Получение списка бакетов

GET Bucket (List Objects)

Получение списка объектов в бакете

GET Bucket Location

Получение региона бакета

DELETE Bucket

Удаление бакета

HEAD Bucket

Получение статуса бакета

PUT Bucket

Создание бакета

GET Bucket ACL

Получение списка управления доступом (access control list)

PUT Bucket ACL

Назначение списка управления доступом

GET Bucket Multipart Uploads

Получение списка текущих составных загрузок

PUT Bucket Versioning (Enable / Suspend)

Включение или выключение версионирования бакета

GET Bucket Versioning

Получение статуса версионирования (метод не вернет статус, если состояние версионирования не было ранее установлено методом PUT)

PUT Notification

Включение уведомлений о событиях для бакета

DELETE Notification

Удаление уведомлений о событиях для бакета

GET Notification

Получения списка уведомлений для бакета

GET Bucket Lifecycle

Получение конфигурации жизненного цикла бакета

DELETE Bucket Lifecycle

Удаление конфигурации жизненного цикла бакета

PUT Bucket Tagging

Добавление меток бакету

GET Bucket Tagging

Получение меток бакета

DELETE Bucket Tagging

Удаление меток бакета

GET Bucket Policy

Получение политики доступа для бакета

PUT Bucket Policy

Применение политики доступа для бакета

DELETE Bucket Policy

Удаление политики доступа для бакета

Методы для работы с объектами

Метод

Описание

PUT Object

Создание объекта

PUT Object — Copy

Копирование объекта

DELETE Object

Удаление объекта

GET Object

Получение объекта

HEAD Object

Получение метаданных объекта

GET Object ACL

Получение списка управления доступом для объекта

PUT Object ACL

Назначение списка управления доступом для объекта

POST Multipart Upload

Запуск составной загрузки

PUT Multipart Upload Part

Загрузка части объекта

GET Multipart Upload Parts

Получение загруженных частей составной загрузки

POST Multipart Upload (Complete)

Завершение составной загрузки

DELETE Multipart Upload

Прерывание составной загрузки

PUT Object Tagging

Добавление меток для объекта

GET Object Tagging

Получение меток объекта

DELETE Object Tagging

Удаление меток объекта

Примеры использования AWS SDK для разных языков

Была ли статья полезна?
Ваша оценка очень важна
Комментарии 5
Евгения
30.09.2024, 19:36

10 дней работал S3 как хранилище редкоиспользуемых видеофайлов. После это перестал. Поддержка подсказала, что проблема в разрешении политик CORS: No 'Access-Control-Allow-Origin' header is present on the requested resource. Не могли бы вы добавить статью как правильно и, главное, безопасно применять политики? Имеющиеся применительно к Amazon приемы пока не понятно как реализуемы (не разобралась вечерами).

Timeweb Cloud
Timeweb Cloud
01.10.2024, 19:50

Добрый день!

Мы подготовили статью, в которой подробно описали, как правильно настроить политики CORS для S3-бакетов. Вы можете ознакомиться с ней по ссылке.

Если после настройки CORS проблема сохранится, напишите, пожалуйста, нам повторно в тикете.

Евгения
02.10.2024, 12:02

Помогло! Спасибо огромное! На 5 баллов!

TEO
TEO
14.06.2024, 03:01

Добрый день! нужен пример еще на Golang

Команда Timeweb Cloud
Команда Timeweb Cloud
01.07.2024, 02:32

Добрый день! Передали пожелание коллегам, постараемся добавить в будущем 👌