LinxCloud предоставляет RESTful XML API для программного управления хранимыми данными с помощью стандартных HTTP-запросов. API-интерфейс совместим с API-интерфейсом Amazon AWS S3, что позволяет взаимодействовать с сервисом, используя уже известные инструменты.
Протокол для сервиса AWS S3 (Simple Storage Service), созданный Amazon Web Services, является основным протоколом доступа к объектному хранилищу. S3 API — это команд, распознаваемые хранилищем, в ответ на которые выполняются определенные операции.
Команды объектному хранилищу можно передавать через клиент S3 CLI, инструкция по его установки описана в этой статье. Подробнее о клиенте можно узнать через ресурс официальной документации.
Инструкция по созданию или поиску API ключей.
Примечание
Поддержка SOAP через HTTP устарела, однако доступна через HTTPS. Новые функции Amazon S3 не будут поддерживаться для SOAP, поэтому лучше использовать REST API или AWS SDK.
API LinxCloud S3 создан для работы с API Amazon AWS S3. Установка «конечной точки» (endpoint) или «базового» (base) URL-адреса hb.bizmrg.com и создание ключевой пары LinxCloud S3 зачастую при использовании клиентской библиотеки позволит использовать сервис Объектного хранилища LinxCloud.
С LinxCloud S3 можно выполнять операции создания, чтения, обновления и удаления бакетов и объектов и создавать списки управления доступом (ACL). Функции S3, которые поддерживаются и нет, указаны в таблице:
Функция | Поддержка | Примечание |
---|---|---|
Bucket Create, Read, Update, Delete |
+ |
|
Object Create, Read, Update, Delete |
+ |
|
Multipart Uploads |
+ |
|
Pre-Signed URLs |
+ |
Поддерживаются оба типа подписи v2 и v4 |
Bucket ACLs |
+ |
|
Object ACLs |
+ |
|
Identity and Access Management (IAM) |
— |
|
Security Token Service (STS) |
— |
|
Multi-factor Authentication |
— |
|
Public Access Block |
— |
|
Bucket Policies |
— |
|
Object Policies |
— |
|
Bucket Versioning |
— |
|
Bucket Replication |
— |
|
Bucket Notifications |
— |
|
Bucket Tagging |
— |
|
Object Tagging |
+ |
|
Request Payment |
— |
|
Bucket Lifecycle |
+ |
Поддерживаются истечение срока действия объекта и удаление неполных составных загрузок. Политики жизненного цикла, основанные на маркировке объектов, не поддерживаются. |
Bucket Inventory |
— |
|
Bucket Access Logging |
— |
|
Bucket Metrics |
— |
|
Bucket Analytics |
— |
|
Bucket Accelerate |
— |
|
Bucket Encryption Configuration |
— |
|
Bucket Websites |
— |
|
Object Torrent |
— |
|
Object Lock |
— |
При использовании функции S3, которая не поддерживается LinxCloud, будет выведен S3-совместимый ответ об ошибке NotImplemented в формате XML.
Пример на Python
Пример с указанием учетных данных в параметрах создания сессии:
Вариант с хранением учетных данных в файле.
Нужно создать файл ~/.aws/credentials в формате:
1\`\`\`console2[default] 3aws_access_key_id = YOUR_ACCESS_KEY_ID 4aws_secret_access_key = YOUR_SECRET_ACCESS_KEY 5\`\`\`Создаем сессию с указанием учетных данных в файле ~/.aws/credentials:
1\`\`\`2import boto3 3session = boto3.session.Session() 4s3_client = session.client( 5 service_name='s3', 6 endpoint_url='https://hb.bizmrg.com' 7) 8\`\`\` 1#!/usr/bin/env python3 2import boto3 3from botocore.client import Config 4 5# Инициализировать сессию к Linx S3. 6session = boto3.session.Session() 7client = session.client('s3', 8 region_name='ru-msk', 9 endpoint_url='https://hb.bizmrg.com', 10 aws_access_key_id='urvt4LXPwoSL9s6ieGTLT5', 11 aws_secret_access_key='5JogfQUsWzzBE9xG1mbBkMkgW7pxY4TGyHgefSC9n2Xx') 12 13# Создать новый бакет. 14client.create_bucket(Bucket='my-test-bucket1') 15 16# Просмотреть список бакетов в проекте. 17response = client.list_buckets() 18buckets = [bucket['Name'] for bucket in response['Buckets']] 19print("Bucket List: %s" % buckets)Пример на Go
Запросы к API LinxCloud S3 должны быть с заголовками HTTP-Authorization. Для совместимости со старыми клиентами поддерживаются типы подписи AWS v4 и AWS v2, с использованием клиентскую библиотеку подписи будут созданы по умолчанию.
Чтобы создать ключ доступа и секретный ключ следует зайти в меню «Аккаунты» сервиса «Объектное хранилище».
После создания аккаунта вы получите Access Key ID и Secret Key.
В таблице описана каждая часть подписи v4:
Параметр | Описание |
---|---|
AWS4-HMAC-SHA256 |
Подпись AWS версии 4 (AWS4) и алгоритм подписи (HMAC-SHA256) |
Credential |
Содержит ключ доступа и информацию о запросе в формате: ${ACESS_KEY}/${YYYMMDD}/${REGION_SLUG}/s3/aws4_request |
SignedHeaders |
Список в нижнем регистре имен заголовков запроса, используемых при вычислении подписи, например: host;x-amz-acl;x-amz-content-sha256;x-amz-date |
Signature |
Подписанный хэш, состоящий из хеша тела запроса, секретного ключа и информации о запросе (каноническом запросе). Для демонстрации того, как это вычисляется, предоставляется пример «псевдо-кода». |
Пример заголовка авторизации
Пример подписи (псевдо-код)
canonicalRequest = \` ${HTTPMethod}\n ${canonicalURI}\n ${canonicalQueryString}\n ${canonicalHeaders}\n ${signedHeaders}\n ${hashedPayload} \` stringToSign = "AWS4-HMAC-SHA256" + "\n" + date(format=ISO08601) + "\n" + date(format=YYYYMMDD) + "/" + "ru-msk" + "/" + "s3/aws4_request" + "\n" + Hex(SHA256Hash(canonicalRequest)) dateKey = HMAC-SHA256("AWS4" + ${SECRET_KEY}, date(format=YYYYMMDD)) dateRegionKey = HMAC-SHA256(dateKey, "ru-msk") dateRegionServiceKey = HMAC-SHA256(dateRegionKey, "s3") signingKey = HMAC-SHA256(dateRegionServiceKey, "aws4_request") signature = Hex(HMAC-SHA256(signingKey, stringToSign))Части, из которых состоит канонический запрос подписи:
Для такого запроса:
Канонический запрос будет иметь вид:
GET / acl= host:my-test-bucket1.hb.bizmrg.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20200831T221549Z host;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
В таблице представлены общие заголовки, которые могут быть использованы в большинстве запросов:
Название | Описание |
---|---|
Authorization |
Детали авторизации для запроса в формате AWS Signature Version 4 или AWS Signature Version 2 |
Content-Length |
Длина тела запроса в байтах. Требуется для запросов PUT, содержащих тело XML. |
Content-Type |
Тип MIME тела запроса (например text/plain) |
Date |
Текущая дата и время в формате всемирного координированного времени (UTC) в формате RFC 2822. Пример: Mon, 10 Jul 2017 19:05:09 +0000 |
Host |
Целевой хост для запроса (например, my-test-bucket1.hb.bizmrg.com). |
x-amz-content-sha256 |
Хэш SHA256 полезной нагрузки запроса. Требуется при использовании AWS Signature Version 4 для аутентификации. |
x-amz-date |
Текущая дата и время в формате всемирного координированного времени (UTC) с использованием формата ISO 8601: %Y%m%dT%H%M%SZ (например 20200831T172753Z). Если предоставляется, он имеет приоритет над заголовком «Дата». |
А это общие заголовки, которые могут быть получены в большинстве ответов:
Название | Описание |
---|---|
Content-Length |
Длина тела ответа в байтах |
Content-Type |
Тип MIME тела запроса (например text/plain) |
Connection |
Индикатор того, открыто или закрыто соединение с сервером |
Date |
Дата и время ответа в формате всемирного координированного времени (UTC) |
Etag |
Тег объекта, содержащий хеш MD5 объекта |
x-amz-request-id |
Уникальный идентификатор запроса |
Опишите вашу задачу, и мы поможем вам ее решить