Содержание
1. Введение
S3 API — API на базе Amazon S3 API, предназначенный для работы с ресурсами объектного хранилища.
С помощью S3 API можно:
- Просматривать информацию о количестве и объеме контейнеров и объектов в рамках аккаунта;
- Создавать и удалять контейнеры;
- Загружать, просматривать, копировать, перемещать, скачивать и удалять объекты в контейнерах;
- Управлять сегментированной загрузкой объектов;
- Управлять CORS и т.д.
2. Доступ к S3 API в Selectel
К S3 API возможен только авторизованный доступ.
Для доступа к контейнеру через S3 API у пользователя должна быть роль с доступом к объектному хранилищу.
2.1. Аутентификация
Аутентификация в S3 API происходит с помощью подписи запросов.
Для формирования подписи потребуются ключи доступа, которые можно получить при выдаче S3-ключа пользователю:
Access Key ID
— значение поля Access key из S3-ключа;Secret Access Key
— значение поля Secret key из S3-ключа.
2.2. Как выдать S3-ключ?
Выдавать S3-ключи (EC2-ключи) можно только сервисным пользователям с ролью с доступом в объектное хранилище.
Выдать S3-ключ сервисному пользователю может только Владелец аккаунта или Администратор пользователей.
Получить S3-ключ самостоятельно сервисный пользователь не может.
Для каждого проекта необходимо создавать отдельный ключ. На один проект можно выпустить несколько ключей.
- В панели управления в правом верхнем углу откройте меню (номер аккаунта) и выберите Профиль и настройки.
- Перейдите в раздел Управление пользователями → вкладка Сервисные пользователи.
- Откройте страницу сервисного пользователя.
- В блоке S3 ключи нажмите Добавить ключ.
- Введите имя ключа.
- Выберите проект, для которого будет работать ключ.
- Нажмите Сгенерировать. Будет сгенерировано два значения:
Access key
— Access Key ID, идентификатор ключа;
Secret key
— Secret Access Key, секретный ключ. - Нажмите Скопировать и сохраните ключ — после закрытия окна его нельзя будет просмотреть.
2.3. Настройка прав на хранилище
На контейнер надо выставить класс «холодное» и установить политики доступа как показано на скриншоте ниже.
3. Доступ к S3 API в VK Cloud
3.1. Создайте бакет, например
Дополнительная информация доступна по ссылке.
3.2. Перейдите в созданный бакет и создайте ключ
Потребуется сохранить Access Key ID
и Secret Key
для дальнейшего использования.
4. Реализация переноса текущих данных на примере rclone
4.1. Скачайте и установите rclone, например, командой:
Для deb:
wget https://downloads.rclone.org/v1.70.3/rclone-v1.70.3-linux-amd64.deb apt-get install ./rclone-v1.70.3-linux-amd64.deb
Для rpm:
wget https://downloads.rclone.org/v1.70.3/rclone-v1.70.3-linux-amd64.rpm apt-get install ./rclone-v1.70.3-linux-amd64.rpm
4.2. Настройте адресацию к бакету в файле /root/.config/rclone/rclone.conf
Selectel:
[Selectel] type = s3 provider = Other access_key_id = ******************************* secret_access_key = ******************************* region = ru-msk endpoint = https://s3.ru-1.storage.selcloud.ru
VK Cloud:
[vk] type = s3 provider = Other access_key_id = ******************************* secret_access_key = ******************************* region = ru-msk endpoint = https://hb.ru-msk.vkcloud-storage.ru
Для проверки подключения создайте файл в бакете и проверьте командой на сервере наличие файла:
Selectel:
rclone ls Selectel:diskstorage
VK Cloud:
rclone ls vk:test2-forcs24
Где:
rclone ls
— название_конфигурации_из_конфигурации_rclone.conf:имя_бакета.
4.3. Для переноса данных каталога filestorage:
Selectel:
rclone copy --progress /var/r7-office/filestorage/ Selectel:diskstorage/
VK Cloud:
rclone copy --progress /var/r7-office/filestorage/ vk:test2-forcs24/
4.4. Для синхронизации данных если были сгенерированы еще файлы в момент копирования:
Selectel:
rclone sync --progress /var/r7-office/filestorage/ Selectel:diskstorage/
VK Cloud:
rclone sync --progress /var/r7-office/filestorage/ vk:test2-forcs24/
Примечание: рекомендуется остановить сервисы Корпоративного сервера при финальной синхронизации.
supervisorctl stop all
5. Настройка работы Корпоративного сервера с S3
Для настройки работы Корпоративного сервера 2024 с S3 хранилищем необходимо добавить секцию «s3» с соответствующими параметрами в файлы:
/opt/r7-office/Api/appsettings.json /opt/r7-office/Processing/appsettings.json
Секция «s3»:
Selectel:
"s3": { "key": "*******************************", "secret": "****************************", "region": "ru-1", "bucket": "diskstorage", "url": "https://s3.ru-1.storage.selcloud.ru" },
VK Cloud:
"s3": { "key": "*******************************", "secret": "****************************", "region": "ru-msk", "bucket": "test2-forcs24", "url": "https://hb.ru-msk.vkcloud-storage.ru" },
Где:
key
– Access Key ID, идентификатор ключа;secre
t – Secret Access Key, секретный ключ;region
– пул, в котором находится объектное хранилище;bucket
– название контейнера, куда будут сохраняться объекты;url
– домен S3 API с Path-Style адресацией.
Рекомендуется добавление после секции ConnectionStrings
. Пример добавленной секции:
... "ConnectionStrings": { "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=*;Host=localhost;Port=5432;", "R7StorageServer": "Database=cddisk;Username=cddisk;Password=*;Host=localhost;Port=5432;", "CommunityRepository": "Server=localhost;UserID=root;Password=*;Database=r7-office", "Payments": "Database=Payments;Username=cddisk;Password=*;Host=localhost;Port=5432;", "GeoNames": "Database=GeoNames;Username=cddisk;Password=*;Host=localhost;Port=5432;" }, "s3": { "key": "*******************************", "secret": "****************************", "region": "ru-1", "bucket": "diskstorage", "url": "https://s3.ru-1.storage.selcloud.ru" }, "rabbitMq": { "host": "localhost", "username": "guest", "password": "guest", "timeout": 10 }, ...
5.1. Перезагрузка сервисов
После внесения изменений в конфигурационные файлы appsettings.json
необходимо перезапустить сервисы командой:
supervisorctl restart all
6. Использование
После перезагрузки сервисов созданные и редактируемые файлы на портале Корпоративного сервера 2024 будут храниться в S3 хранилище:
В объектном хранилище S3 можно наблюдать появление данных файлов:
Selectel:
VK Cloud: