Перейти к основному содержимому

Справочник API

Аутентификация — это способ убедиться, что запрос исходит от доверенного пользователя или сервиса.

Основные типы аутентификации

ТипОписание
Access Key / Secret KeyПара ключей, которая используется для подписи запросов. Сервис проверяет подпись и разрешает доступ.
IAM (Identity and Access Management)Централизованное управление пользователями, группами и ролями. Позволяет выдавать права доступа к ресурсам и управлять временными токенами.
Временные токеныИспользуются для временного доступа к ресурсам, например, через STS (Security Token Service).
Pre-signed URLВременная ссылка, которая позволяет анонимному пользователю получить доступ к объекту без прямой аутентификации.

Механизм проверки подписи

  1. Клиент формирует строку с параметрами запроса.
  2. Подписывает ее с помощью Secret Key.
  3. Сервис проверяет подпись и сравнивает с ожидаемой.
  4. Если подпись верна, запрос разрешен.

Примеры запросов аутентификации

Пример GET-запроса (через curl)

curl -X GET "https://my-bucket.storage.turbocloud.ru/example.txt"   -H "Authorization: AWS4-HMAC-SHA256 Credential=ACCESS_KEY/20251015/ru-central1/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=SIGNATURE"   -H "x-amz-date: 20251015T120000Z"
  • ACCESS_KEY / SECRET_KEY — ключи, выданные сервисом;
  • SIGNATURE — генерируется на основе запроса и Secret Key с указанием внутреннего региона.

Пример pre-signed URL

import boto3

s3_client = boto3.client(
's3',
endpoint_url='https://storage.turbocloud.ru',
aws_access_key_id='ACCESS_KEY',
aws_secret_access_key='SECRET_KEY'
)

url = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': 'my-bucket', 'Key': 'example.txt'},
ExpiresIn=3600
)

print(url)

Примечание: endpoint_url указывает на S3-совместимый сервис.

Пример GET-запроса получения объекта для AWS S3 (через curl)

curl -X GET "https://my-bucket.s3.amazonaws.com/example.txt"   -H "Authorization: AWS4-HMAC-SHA256 Credential=ACCESS_KEY/20251015/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=SIGNATURE"   -H "x-amz-date: 20251015T120000Z"
  • ACCESS_KEY / SECRET_KEY — ваши ключи доступа;
  • SIGNATURE генерируется на основе запроса и Secret Key;
  • x-amz-date — дата запроса в формате UTC.

Пример pre-signed URL для AWS S3 (Python)

import boto3

s3_client = boto3.client('s3', region_name='us-east-1')

url = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': 'my-bucket', 'Key': 'example.txt'},
ExpiresIn=3600
)

print(url)

Примечание: любой пользователь с этой ссылкой сможет скачать объект example.txt в течение 1 часа.


gRPC и REST для работы с объектным хранилищем

gRPC

Протокол удаленного вызова процедур на базе HTTP/2, который использует бинарный формат передачи данных (Protobuf).

  • Преимущества: высокая производительность, поддержка стриминга;
  • Недостатки: сложнее дебажить вручную, требует генерации клиентских библиотек.

REST

Протокол на базе HTTP/1.1 или HTTP/2, который использует текстовый формат (JSON/XML) для передачи данных.

  • Преимущества: простота использования, легко отлаживать работу программ через браузер или командную утилиту curl;
  • Недостатки: чуть больше нагрузка на сеть, нет встроенной поддержки стриминга.

Когда что использовать?

ПротоколКогда использовать
RESTВнешние API, интеграции с клиентами, совместимость с Amazon S3.
gRPCВысокопроизводительные системы, стриминг данных, внутренняя коммуникация между сервисами.

Методы REST

REST API позволяет работать с бакетами и объектами через HTTP-запросы.

HTTP-методСубъектОписание
GETSERVICEПолучение списка всех бакетов пользователя.
GETBUCKETПолучение списка объектов в бакете.
PUTBUCKETСоздание нового бакета.
DELETEBUCKETУдаление бакета.
HEADBUCKETПолучение метаданных бакета.
PUTOBJECTЗагрузка объекта в бакет.
POSTOBJECTЗагрузка объекта через HTML-форму.
GETOBJECTСкачивание объекта из бакета.
DELETEOBJECTУдаление объекта.
HEADOBJECTПолучение метаданных объекта.
PUTOBJECT_COPYСоздание копии объекта внутри бакета.
GETOBJECT_ACLПолучение списка управления доступом (ACL) для объекта.
PUTOBJECT_ACLУстановка ACL для объекта.
PUTBUCKET_ACLЗагрузка списка управления доступом для бакета.
GETBUCKET_ACLПолучение ACL бакета.
PUTBUCKET_LIFECYCLEНастройка правил жизненного цикла объектов.
GETBUCKET_LIFECYCLEПолучение правил жизненного цикла.
DELETEBUCKET_LIFECYCLEУдаление правил жизненного цикла объектов.
PUTBUCKET_CORSНастройка CORS для бакета.
GETBUCKET_CORSПолучение конфигурации CORS.
DELETEBUCKET_CORSУдаление конфигурации CORS.
PUTBUCKETPOLICYПрименение политики доступа к бакету.
GETBUCKETPOLICYПолучение политики доступа бакета.
DELETEBUCKETPOLICYУдаление политики доступа бакета.
PUTBUCKET_TAGGINGНазначение меток бакету.
GETBUCKET_TAGGINGПолучение меток бакета.
DELETEBUCKET_TAGGINGУдаление меток бакета.
GETMULTIPARTПолучение списка составных загрузок.
POSTINIT_MULTIPARTИнициализация составной загрузки.
POSTCOMPLETE_MULTIPARTЗавершение составной загрузки.
DELETEABORT_MULTIPARTПрерывание составной загрузки и удаление частей.
PUTUPLOAD_PARTЗагрузка части объекта.
PUTUPLOAD_PART_COPYКопирование части объекта.
GETUPLOAD_PARTПолучение списка загруженных частей.

Методы gRPC

gRPC использует удаленные вызовы процедур через HTTP/2 и Protobuf. Вместо стандартных HTTP-методов здесь есть операции с четко определенными сервисами и сообщениями.

Операция gRPCПояснение
CreateBucket(CreateBucketRequest)Создает новый бакет.
DeleteBucket(DeleteBucketRequest)Удаляет бакет.
ListBuckets(ListBucketsRequest)Возвращает список всех бакетов пользователя.
GetBucketMetadata(GetBucketMetadataRequest)Получение метаданных бакета.
PutObject(PutObjectRequest)Загрузка объекта в бакет.
GetObject(GetObjectRequest)Получение объекта.
DeleteObject(DeleteObjectRequest)Удаление объекта.
CopyObject(CopyObjectRequest)Копирование объекта внутри бакета.
ListObjects(ListObjectsRequest)Получение списка объектов в бакете.
GetObjectACL(GetObjectACLRequest)Получение списка управления доступом (ACL) объекта.
PutObjectACL(PutObjectACLRequest)Установка ACL для объекта.
ListMultipartUploads(ListMultipartUploadsRequest)Получение списка составных загрузок.
InitMultipartUpload(InitMultipartUploadRequest)Инициализация составной загрузки.
UploadPart(UploadPartRequest)Загрузка части объекта.
CompleteMultipartUpload(CompleteMultipartUploadRequest)Завершение составной загрузки.
AbortMultipartUpload(AbortMultipartUploadRequest)Прерывание составной загрузки.

Примечание: gRPC использует бинарные сообщения и стриминг, что позволяет передавать большие объемы данных быстрее, чем REST.


REST, совместимый с AWS S3

REST API, совместимый облачным хранилищем файлов AWS S3, поддерживает стандартные операции на бакетах и объектах. Это позволяет клиентам, рассчитанным на AWS S3, работать с вашим хранилищем без изменений.

Особенности совместимого REST

  • Поддержка всех стандартных операций Amazon S3;
  • Использование заголовков AWS для подписи запросов (Authorization, x-amz-date, x-amz-content-sha256);
  • Совместимость с клиентскими SDK AWS;
  • Поддержка версионирования объектов и классов хранения;
  • Возможность использовать pre-signed URL.

Основные методы

HTTP-методСубъектОписание
GETSERVICEСписок всех доступных бакетов.
GETBUCKETПолучение списка объектов в бакете.
PUTBUCKETСоздание бакета.
DELETEBUCKETУдаление бакета.
HEADBUCKETПолучение метаданных бакета.
PUTOBJECTЗагрузка объекта.
GETOBJECTПолучение объекта.
DELETEOBJECTУдаление объекта.
HEADOBJECTПолучение метаданных объекта.
PUTOBJECT_COPYКопирование объекта.
GETOBJECT_ACLПолучение списка управления доступом для объекта.
PUTOBJECT_ACLУстановка ACL для объекта.