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

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

New Documentation

Подробный гайд по принципам работы с 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 для разных языков

Была ли статья полезна?

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону