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

Объектное хранилище S3

Объектное хранилище S3 позволяет сохранять данные разного формата и объема в облаке провайдера. Это может быть полезно в следующих случаях:

  • долгосрочное хранение больших объемов данных: резервных копий или логов;
  • одновременный доступ к файлам большого количества пользователей;
  • предоставление хранилища для сторонних сервисов, например, CMS.

Начало работы

Чтобы начать работу с хранилищем, нужно создать пользователя. На текущий момент доступно только создание через запрос к Public API. Также для активации доступа к хранилищу необходим положительный баланс аккаунта в размере не менее 300 руб.

Для создания пользователя необходимо выполнить шаги:

1. Создание токена для работы с Public API. Для доступа к Public API необходимо наличие токена авторизации. Создать его можно в личном кабинете в настройках аккаунта: в левом меню поле «Аккаунт» — вкладка «Токены API» — кнопка «Добавить токен».

2. Получение ID проекта. Для создания пользователя также вам потребуется ID вашего проекта. Получить его вы можете с помощью запроса ниже. При отправке запроса, например, через Postman, выбирайте авторизацию Token Bearer.

GET https://api.clo.ru/v1/projects

В ответе вам нужна строка id:

{
   "code": 200,
   "title": "OK",
   "results": [
     {
       "status": "ACTIVE",
       "summary": {
         "servers": 3,
         "volumes": 2,
         "floating_ips": 1,
         "networks": 1
       },
       "name": "visionary-fractal-tench",
       "id": "81de94b0-5749-4dea-aa2d-f8a0d328dfcc",
       "stopping_reason": null
     }
   ],
   "count": 1
 }

3. Создание пользователя. С помощью токена отправьте запрос на создание пользователя. При выполнении запроса ID сущности передается в URL. Остальные параметры передаются в теле запроса в формате JSON. Пример:

POST https://api.clo.ru/v1/projects/{{PROJECT_ID}}/s3_users
 {   
     "name":  "my_new_user",
     "canonical_name": "my_new_user_s3_storage",
     "max_buckets": 1,
     "user_quota": {
         "max_size": 1000000,
         "max_objects": 1000
     },
     "bucket_quota": {
         "max_size": 10000000,
         "max_objects": 1000
     },
     "default_bucket": true
 }

В ответе на запрос вы получите данные вашего пользователя. Дальше потребуется идентификатор пользователя — строка id

{
     "code": 201,
     "title": "Created",
     "result": {
         "id": "81de94b0-5749-4dea-aa2d-f8a0d328dfcc",
         "quotas": [
             {
                 "max_size": 1000000,
                 "type": "user",
                 "max_objects": 1
             },
             {
                 "max_size": 10000000,
                 "type": "bucket",
                 "max_objects": 1
             }
         ],
         "tenant": "visionary-fractal-tench",
         "status": "CREATING",
         "max_buckets": 1,
         "canonical_name": "my_new_user_s3_storage",
         "name": "my_new_user"
     }
 }

4. Получение ключей доступа к S3. Используйте полученный ID пользователя, чтобы сгенерировать ключи доступа с помощью запроса:

POST https://api.clo.ru/v1/s3_users/{{S3_USER_ID}}/keys

5. Подключение к S3 c данными пользователя. Дальнейшая работа с хранилищем выполняется через API S3. Для этого потребуется специальное ПО или библиотеки, если доступ к хранилищу осуществляется с помощью кода. Рекомендуем использовать Cyberduck для повседневной работы. Список других утилит приведен ниже

Подключение на примере Cyberduck:

  1. Откройте окно подключения по кнопке «Новое подключение»;
  2. Выберите тип подключения: Amazon S3;
  3. Укажите:
    1. Сервер: storage.clo.ru
    2. Порт: 443
    3. Access Key ID — ключ пользователя
    4. Secret Access Key — секретный ключ пользователя
  4. Подключитесь к вашему хранилищу под выбранным пользователем.

Принципы работы

Пользователи

После создания пользователя необходимо создать связку ключей доступа access/secret keys. Эти ключи используются для подключения к хранилищу и однозначно идентифицируют пользователя.

Каждый пользователь создается в рамках аккаунта и имеет доступ к заданному в лимитах пространству хранилища. Имя каждого пользователя в проекте должно быть уникальным. Имя пользователя в рамках хранилища формируется по схеме

Имя каждого пользователя в проекте должно быть уникальным. Имя пользователя в рамках хранилища формируется по схеме:

имя_проекта$имя_пользователя

Бакеты

Объекты хранятся в бакетах — аналог директории. Для сохранения файла в хранилище необходимо создать бакет.

Для доступа к файлу вам понадобится имя вашего проекта, который можете посмотреть на внутренней странице (в разделе «Дополнительные характеристики») любого вашего сервера. При вводе имени профиля замените все знаки тире на нижнее подчеркивание.

Доступ к файлу осуществляется по URL, который формируется по схеме:

https://storage.clo.ru/имя_проекта:имя_бакета/имя_файла

Например:

https://storage.clo.ru/my_beautiful_project:new_bucket/brand_2022_03_13_13_17_39.txt

Инструменты для работы

Предпочтительные инструменты и библиотеки для работы с хранилищем:

Лимиты пользователя

Кроме общих лимитов на проект, есть возможность настроить дополнительные ограничения с помощью лимитов для каждого пользователя.

Существуют следующие типы ограничений:

  • Максимально допустимое количество бакетов у пользователя;
  • Максимально допустимое количество объектов у пользователя (не учитывая бакеты);
  • Максимально допустимый объем данных пользователя;
  • Максимально допустимое количество объектов в бакете;
  • Максимально допустимый объем данных в бакете.

Списки контроля доступа

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

имя_проекта$имя_пользователя

В списках контроля доступа можно реализовать следующие права:

  • полный доступ;
  • только чтение;
  • только запись (только для бакетов);
  • чтение прав доступа;
  • запись прав доступа.

Лимиты и ограничения

Общие лимиты

  • 20 бакетов и общий объем хранилища 5 Тб. Данный лимит распространяется на весь аккаунт.

Технические ограничения

  • Следующая функциональность не реализована:
    • жизненные циклы;
    • классы хранения;
    • web-hooks;
    • S3 CDN.
  • Имя бакета не должно содержать спецсимволов;
  • 10 000 — максимальный размер частей при составной (multipart) загрузке;
  • 5 MiB — минимальный размер части при составной (multipart) загрузке (кроме последней);
  • Не больше 5 Гб — размер файла за один put-запрос;
  • 16 Кб — максимальный размер заголовков.
Назад к базе знаний