- tocdepth
2
Начало работы c API Object Storage
Чтобы получить доступ к Object Storage API сгенерируйте API-ключ. Для работы с Object Storage API можно использовать техническую учетную запись — сервисный аккаунт или личную учетную запись с персональным API-ключом.
Endpoint для методов API — s3.cloud.ru.
Генерация API-ключа
Чтобы получить ключи доступа к Object Storage API:
Авторизуйтесь в личном кабинете.
Выполните одно из следующих действий:
Создайте сервисный аккаунт и сгенерируйте и ключи доступа.
Создайте персональный API-ключ.
Сохраните key ID и key Secret (пароль).
Генерирование подписи
Многие API-запросы к Object Storage аутентифицируются на стороне сервиса. При отправке запроса пользователю необходимо его подписать.
В разделе описаны процессы генерации подписи AWS Signature V4 и добавления подписи к API-запросу.
Чтобы получить подпись для API-запроса:
Генерирование подписывающего ключа
Чтобы получить подписывающий ключ SigningKey
, необходимо закодировать с помощью алгоритма HMAC-SHA256 дату, регион и сервис.
Результат каждого вызова хеш-функции используется для следующего вызова.
DateKey = HMAC-SHA256("AWS4"+"<KeySecret>", "<YYYYMMDD>")
DateRegionKey = HMAC-SHA256(DateKey, "ru-central-1")
DateRegionServiceKey = HMAC-SHA256(DateRegionKey, "s3")
SigningKey = HMAC-SHA256(DateRegionServiceKey, "aws4_request")
Параметры для первого вызова хеш-функции:
Параметр |
Описание |
---|---|
|
Key Secret, сгенерированный на шаге Генерация API-ключа. |
|
Текущая дата. |
Создание канонического запроса
Для вычисления подписи понадобится строка, которая генерируется с помощью канонического запроса.
Создайте канонический запрос CanonicalRequest
в формате:
CanonicalRequest = \`
<HTTPMethod>\n
<CanonicalURI>\n
<CanonicalQueryString>\n
<CanonicalHeaders>\n
<SignedHeaders>\n
<HashedPayload>
\`
Описание параметров:
Параметр |
Описание |
---|---|
|
HTTP-метод запроса: |
|
Путь к ресурсу, к которому относится URI-запрос.
Путь начинается с косой черты Например, для URL-запроса |
|
Параметры строки запроса — все, что следует за вопросительным знаком Если в запросе нет параметров, оставьте строку пустой Например, для URL-запроса |
|
Заголовки и их значения, разделенные символом новой строки Например: host:s3.cloud.ru
x-amz-content-sha256:e3b0c...
x-amz-date:20230101T220855Z
|
|
Имена заголовков без значений, отсортированные в алфавитном порядке, в нижнем регистре и через точку с запятой Например: host;x-amz-content-sha256;x-amz-date
|
|
Хэш SHA256 тела запроса Hex(SHA256Hash()). Если тела запроса нет, рассчитайте хэш от пустой строки Hex(SHA256Hash("")). |
Пример канонического запроса:
GET
/s3.cloud.ru/my-bucket/my-file.txt
host:s3.cloud.ru
x-amz-content-sha256:e3b0c...
x-amz-date:20230101T220855Z
host;x-amz-content-sha256;x-amz-date
e3b0c...
Генерирование строки для подписи
Получите строку для подписи StringToSign
:
StringToSign = "AWS4-HMAC-SHA256" + "\n" +
<timeStampISO8601Format> + "\n" +
<Scope> + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))
Описание параметров:
Параметр |
Описание |
---|---|
|
Алгоритм шифрования. |
|
Текущее время UTC в формате ISO 8601. Например, |
|
Строка в формате |
|
Подпись строки
Подпись вычисляется как хэш HMAC-SHA256 строки для подписи и подписывающего ключа.
Signature = HMAC-SHA256(SigningKey, StringToSign)
Добавление подписи к запросу
Если запрос требует аутентификации, подпишите его в HTTP-заголовке Authorization или параметрах query.
Аутентификация через HTTP-заголовок Authorization
Использование заголовка Authorization является одним из вариантов аутентификации.
Authorization: AWS4-HMAC-SHA256
Credential=<TENANT_ID>:<KEY_ID>/<YYYYMMDD>/ru-central-1/s3/aws4_request,
SignedHeaders=host;range;x-amz-date,
Signature=73325...
Описание параметров:
Параметр |
Описание |
---|---|
|
Версия подписи (AWS4) и алгоритм, который использовался для генерации подписи (HMAC-SHA256). |
|
Информация о запросе в формате:
|
|
Список имен заголовков, которые использовались при вычислении подписи. В нижнем регистре, через точку с запятой. |
|
Вычисленная подпись. |
Аутентификация через параметры query
Используйте аутентификацию через query-параметры, если нужно указать все параметры запроса в URL. Этот метод так же обозначается как подписанный URL (Presigned URL).
https://s3.cloud.ru/my-bucket/my-file.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=<TENANT_ID>:<KEY_ID>/<YYYYMMDD>/ru-central-1/s3/aws4_request
&X-Amz-Date=20230101T220855Z
&X-Amz-Expires=86400
&X-Amz-SignedHeaders=host
&X-Amz-Signature=73325...
Описание параметров:
Параметр |
Описание |
---|---|
|
Версия подписи (AWS4) и алгоритм, который использовался для генерации подписи (HMAC-SHA256). |
|
Информация о запросе в формате
|
|
Время UTC в формате ISO 8601. Например, |
|
Время в секундах, в течение которого сгенерированный подписанный URL будет действителен. Например, 86400 секунд (1 день). Допустимые значения: целые числа от 1 до 604800 (7 дней). |
|
Список имен заголовков, которые использовались при вычислении подписи. Следующие заголовки обязательны:
Для дополнительной безопасности рекомендуется подписывать все заголовки. |
|
Вычисленная подпись. |
для Dev & Test