В инструкции описан процесс создания нового пользователя и предоставление ему доступа для работы с контейнером через 1cloud API и Swift API.
Алгоритм действий
Для того, чтобы новые пользователи имели доступ к определенным объектам хранилища, необходимо выдать нужные права.
- Создать пользователя с помощью 1cloud API
- Получить токен для работы с хранилищем через Swift API
- Создать контейнер с нужными правами или выдать права на существующий
- Подключиться к контейнеру через S3Browser
- Подключение к хранилищу с помощью TotalCommander
- Подключение к хранилищу с помощью CyberDuck
Создание пользователя с помощью 1cloud API
Примечание: подробнее о создании пользователя хранилища читайте в статье в разделе API.
Пример запроса:
curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer
3b7db109f556326b99ba4f57a63a85e0280158927828ad0efb24571d0ade80b4' "https://api.1cloud.ru/storage/users" -d
'{"UserName":"ConsoleUser", "PersistPassword":1}'
Пример ответа:
{ "Id": 25, "ExternalId":"f7fe83b00b004153b0e5ca97f2445c3c", "Name": "11_ConsoleUser", "Password": "fuYXKcYENPwC", "SwiftApiConnection": { "Endpoint": "https://1cloud.store:443/", "TenantId": "11", "AccessKey": "11_ConsoleUser", "Password": "fuYXKcYENPwC" } [...] }
Из ответа мы видим все необходимые данные для работы с пользователем.
Важно: из ответа так же необходимо запомнить ExternalId пользователя.
Получение токена для работы со Swift API
Для получения токена используйте следующий запрос, заменив имя пользователя, пароль и TenantId значениями из панели управления:
curl -v -s -X POST https://1cloud.store/v3/auth/tokens -H "Content-Type: application/json" -d '{
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": "имя пользователя",
"domain": {
"name": "Default"
},
"password": "пароль"
}
}
},
"scope": {
"project": {
"name": "TenantId",
"domain": {
"name": "Default"
}
}
}
}
}' | python -m json.tool
В результате вы получите такой вывод:
[...] < Date: Wed, 20 Dec 2017 15:02:34 GMT < Server: Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5 < X-Subject-Token: gAAAAABaOnuKDixHYI8nHcLKnJloa2QMHZ1q5CB2w4e32zd0cfFGwT1Kgw0S_Of9mILtINR1bumJw6QGctIf7OjIdRgJl_M_kpFUpsmj_8zwmk1gHDIgzcPrd9A_UObyw6BwG--q-bsPq2NqqNGnN2QqvjCpoSCHiI1W2f_LmY_bRK9h0bOMqkY < Vary: X-Auth-Token < x-openstack-request-id: req-d3f7fa74-3f80-45f7-8e65-4d68d5bb62ed < Content-Length: 2919 < Content-Type: application/json < Strict-Transport-Security: max-age=31536000; includeSubDomains < X-XSS-Protection: 1; mode=block < X-Content-Type-Options: nosniff < X-Frame-Options: SAMEORIGIN < Access-Control-Allow-Origin: * < Access-Control-Expose-Headers: X-Backend-Timestamp, Last-Modified, ETag, X-Timestamp [...]
Значение выделенного параметра X-Subject-Token является токеном авторизации.
Создание контейнера
Для создания контейнера нам необходимо получить ExternalId хранилища. Для этого выполните запрос просмотра хранилища с помощью 1cloud API. Пример запроса:
curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer 75bb9805c018b1267b2cf599a38b95a3a811e2ef7ad9ca5ed838ea4c6bafaf50' "https://api.1cloud.ru/storage"
Пример ответа:
{ "Id":11, "ExternalId":"41130c4975244de1ba50301b6bcbb6b1", "QuotaBytes":null, "State":"Activated", "Owner":{ [...] "Tasks":[] }
Примечание: нужный ExternalId выделен в модели.
С помощью следующего запроса swift api создайте контейнер с правами на чтение и запись для созданного пользователя, где
- XXXX и <project-id>- ExternalId хранилища;
- имя_контейнера - любое удобное для вас название
- токен - токен полученный на прошлом шаге
- <user-id>- ExternalId созданного пользователя
Запрос:
curl -i https://1cloud.store:443/v1/AUTH_XXXX/имя_контейнера -X PUT -H "X-Auth-Token: токен" -H "X-Container-Read: <project-id>:<user-id>" -H "X-Container-Write: <project-id>:<user-id>"
Пример:
curl -i https://1cloud.store:443/v1/AUTH_41130c4975244de1ba50301b6bcbb6b1/proj -X PUT -H "X-Auth-Token: gAAAAABaQOXuJxxeSAGUjn09fSSxi0vUYP50Z0B9Bk8gcYolJofeUzql7Aq998H3d1FevasylQuf-fJZ976qulIVq5oYUmUNYUWjN_IKV_o6T6AQBruV1vJvigB-6WX_i0uBrY1aiH9BzfjKW8-ibYI4TOlwQC_J3ZnUH5OYw_YUE66K0LmnWSk" -H "X-Container-Read: 41130c4975244de1ba50301b6bcbb6b1:f7fe83b00b004153b0e5ca97f2445c3c" -H "X-Container-Write: 41130c4975244de1ba50301b6bcbb6b1:f7fe83b00b004153b0e5ca97f2445c3c"
-H "X-Container-Read: .r:*,.rlistings" - с помощью этой опции все объекты Контейнера будут доступны для чтения (GET и HEAD запросы).
Например:
-H "X-Container-Read: 41130c4975244de1ba50301b6bcbb6b1:f7fe83b00b004153b0e5ca97f2445c3c, .r:*,.rlistings"
Подключение к хранилищу с помощью S3Browser
Чтобы подключиться к хранилищу в качестве созданного пользователя, нужно добавить новый аккаунт в S3Browser. В горизонтальном меню выберете Accounts->Add new account.
Примечание: о том как подключиться с помощью S3Browser читайте в нашей инструкции.
В качестве Access ID укажите имя пользователя созданного на первом шаге, в качестве Secret Key - его пароль. Сохраните настройки.
Для подключения в горизонтальном меню выберете созданный аккаунт. Перед вами появится следующее окно, нажмите Да. Это необходимо сделать, того чтобы пользователь имел доступ к своим контейнерам.
Далее введите имя контейнера на который вы давали доступ и нажмите Add External bucket.
Перед вами появится содержимое вашего контейнера.
Подключение к хранилищу с помощью TotalCommander
Чтобы подключиться к хранилищу в качестве созданного пользователя, нужно добавить новое соединение в TotalCommander. Настройка соединения происходит аналогично подключению административного пользователя, только в добавок необходимо заполнить поле Удаленный каталог, указав созданный контейнер.
Подключение к хранилищу с помощью CyberDuck
Чтобы подключиться к хранилищу в качестве созданного пользователя, нужно добавить новое соединение в CyberDuck. Настройка соединения происходит аналогично подключению административного пользователя, только в добавок необходимо заполнить поле Путь в дополнительных опциях, указав созданный контейнер.