Использование 1cloud API и Swift API для работы пользователей с хранилищем

В инструкции описан процесс создания нового пользователя и предоставление ему доступа для работы с контейнером через 1cloud API и Swift API.

Алгоритм действий

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

Создание пользователя с помощью 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 создайте контейнер с правами на чтение и запись для созданного пользователя, где

  1. XXXX и <project-id>- ExternalId хранилища;
  2. имя_контейнера - любое удобное для вас название
  3. токен - токен полученный на прошлом шаге
  4. <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.

 

Add new account..

 

Примечание: о том как подключиться с помощью S3Browser читайте в нашей инструкции.

В качестве Access ID укажите имя пользователя созданного на первом шаге, в качестве Secret Key - его пароль. Сохраните настройки.

 

Edit account

 

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

 

Add External Bucket

 

Далее введите имя контейнера на который вы давали доступ и нажмите Add External bucket.

 

Add new account..

 

Перед вами появится содержимое вашего контейнера.

Подключение к хранилищу с помощью TotalCommander

Чтобы подключиться к хранилищу в качестве созданного пользователя, нужно добавить новое соединение в TotalCommander. Настройка соединения происходит аналогично подключению административного пользователя, только в добавок необходимо заполнить поле Удаленный каталог, указав созданный контейнер.

 

Настройка FTP-соединения

 

Подключение к хранилищу с помощью CyberDuck

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

 

Новое подключение

 

Средняя оценка: 5,0, всего оценок: 1