Подключение к Ranger через REST API
Обзор
Управлять Ranger можно не только через веб-интерфейс Ranger Admin UI, но и посредством Ranger REST API. В данной статье будут представлены примеры выполнения рутинных задач управления политиками HDFS с помощью API. Полный список эндпоинтов и доступных методов можно найти в документации Ranger REST API.
Простым способом работы с запросами является curl (он и будет продемонстрирован ниже), но вы можете отправлять запросы любым удобным способом с любого хоста в кластере.
$ curl -i -u <login>:<password> -H "Content-Type: application/json" -d '<json>' -X <request_type> <ranger_host>/service/<endpoint>
где:
-
<login>— имя пользователя с правами администратора. -
<password>— пароль для<login>. -
<json>— JSON-данные, которые будут отправлены с запросом. Не требуется при запросе типаDELETE. -
<request_type>— тип HTTP-запроса (GET,POST,PUT,DELETE). Если тип запросаDELETE, то из команды следует убрать параметр-H. -
<ranger_host>— URL хоста Ranger (например, http://stikhomirov-adps2.ru-central1.internal:6080). -
<endpoint>— ресурс, к которому будет отправлен запрос.
Опция -i позволяет получить HTTP-заголовки и увидеть статус запроса.
Создание политики
Перед отправкой запроса на создание политики нужно сконструировать политику в формате JSON. Ниже представлен пример политики для сервиса HDFS:
{
"isEnabled": true,
"service": "adh-2_hdfs_id_13", (1)
"name": "test_policy", (2)
"description": "Test policy for HDFS service",
"isAuditEnabled": true,
"resources":{
"path":{
"values":["/resource"], (3)
"isExcludes":false,
"isRecursive":true
}
},
"policyItems": [{
"accesses": [
{
"type":"read", (4)
"isAllowed":true
},
{
"type":"write",
"isAllowed":true
}],
"users": ["test_user"], (5)
"groups": [],
"conditions": [],
"delegateAdmin": false
}],
"denyPolicyItems": [],
"allowExceptions": [],
"denyExceptions": [],
"dataMaskPolicyItems": [],
"rowFilterPolicyItems": []
}
| 1 | Название сервиса, для которого создается политика. |
| 2 | Название политики. |
| 3 | Ресурс, для которого создается политика. Нельзя создать несколько политик для одного ресурса. |
| 4 | Права доступа. |
| 5 | Пользователи, к которым применяются права доступа. |
|
ВАЖНО
Перед отправкой запроса приведите объект JSON в строку. Для этого можно использовать сервис JSON Minifier.
|
Соответствующая curl-команда:
$ curl -i -u <login>:<password> -H "Content-Type: application/json" -d '<json>' -X POST <ranger_host>/service/public/v2/api/policy
Ожидаемый ответ должен содержать статус 200 OK и новую политику в формате JSON:
HTTP/1.1 200 OK
Set-Cookie: RANGERADMINSESSIONID=4ED38E17D1A30D9950BCC859F890BB2F; Path=/; HttpOnly
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self'; style-src 'self' 'unsafe-inline';font-src 'self'
X-Content-Type-Options: nosniff
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 28 Dec 2023 13:38:23 GMT
Server: Apache Ranger
{"id":43,"guid":"2c2f8cf1-4ef5-449e-b9f3-978f73d1adbf","isEnabled":true,"createdBy":"Admin","updatedBy":"Admin","createTime":1703770703338,"updateTime":1703770703338,"version":1,"service":"adh-2_hdfs_id_13","name":"test_policy","policyType":0,"policyPriority":0,"description":"Test policy for HDFS service","resourceSignature":"391f2d50f6f473f28077e9fe73af7b47d918e0905025176820a2e8b540257a72","isAuditEnabled":true,"resources":{"path":{"values":["/resource"],"isExcludes":false,"isRecursive":true}},"policyItems":[{"accesses":[{"type":"read","isAllowed":true},{"type":"write","isAllowed":true}],"users":["test_user"],"groups":[],"roles":[],"conditions":[],"delegateAdmin":false}],"denyPolicyItems":[],"allowExceptions":[],"denyExceptions":[],"dataMaskPolicyItems":[],"rowFilterPolicyItems":[],"serviceType":"hdfs","options":{},"validitySchedules":[],"policyLabels":[],"zoneName":"","isDenyAllElse":false}
Проверить правильность создания политики можно в Ranger Admin UI:
Обновление политики
Иногда приходится обновлять политику, например, чтобы определенный пользователь имел права на какой-то ресурс с уже созданной для него политикой. В таком случае нужно использовать метод PUT и следующую команду curl:
$ curl -i -u <login>:<password> -H "Content-Type: application/json" -d '<json>' -X PUT <ranger_host>/service/public/v2/api/policy/<id>
где:
-
<json>— обновленная политика. -
<id>— ID политики, которую требуется обновить.
Ожидаемый ответ должен содержать статус 200 OK и новую политику в формате JSON:
HTTP/1.1 200 OK
Set-Cookie: RANGERADMINSESSIONID=85F63B544BD11D123B4E81E32492B59E; Path=/; HttpOnly
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self'; style-src 'self' 'unsafe-inline';font-src 'self'
X-Content-Type-Options: nosniff
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 28 Dec 2023 15:15:21 GMT
Server: Apache Ranger
{"id":43,"guid":"2c2f8cf1-4ef5-449e-b9f3-978f73d1adbf","isEnabled":true,"createdBy":"Admin","updatedBy":"Admin","createTime":1703770703000,"updateTime":1703776521670,"version":2,"service":"adh-2_hdfs_id_13","name":"test_policy","policyType":0,"policyPriority":0,"description":"Test policy for HDFS service","resourceSignature":"391f2d50f6f473f28077e9fe73af7b47d918e0905025176820a2e8b540257a72","isAuditEnabled":true,"resources":{"path":{"values":["/resource"],"isExcludes":false,"isRecursive":true}},"policyItems":[{"accesses":[{"type":"read","isAllowed":true},{"type":"write","isAllowed":true}],"users":["test_user","new_test_user"],"groups":[],"roles":[],"conditions":[],"delegateAdmin":false}],"denyPolicyItems":[],"allowExceptions":[],"denyExceptions":[],"dataMaskPolicyItems":[],"rowFilterPolicyItems":[],"serviceType":"hdfs","options":{},"validitySchedules":[],"policyLabels":[],"zoneName":"","isDenyAllElse":false}
В Ranger Admin UI можно увидеть, что в политике добавился пользователь.
Получение политики
Получить политику можно по её ID в Ranger или с помощью поиска по параметрам.
Команда curl при известном ID:
$ curl -i -u <login>:<password> -X GET <ranger_host>/service/public/v2/api/policy/<id>
где <id> — ID политики, которую требуется получить.
Команда для поиска (например, по имени) выглядит следующим образом:
$ curl -i -u <login>:<password> -X GET <ranger_host>/service/public/v2/api/policy?policyName=<policy_name>
где <policy_name> — имя политики в Ranger.
|
ПРИМЕЧЕНИЕ
Если проводить поиск по неуникальному параметру, то в ответе можно получить несколько политик.
|
В обоих случаях ожидаемый ответ должен содержать статус 200 OK и политику в формате JSON:
HTTP/1.1 200 OK
Set-Cookie: RANGERADMINSESSIONID=BCC2C0CA55B3330BED1ACC0700E18817; Path=/; HttpOnly
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self'; style-src 'self' 'unsafe-inline';font-src 'self'
X-Content-Type-Options: nosniff
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 28 Dec 2023 13:38:49 GMT
Server: Apache Ranger
{"id":43,"guid":"2c2f8cf1-4ef5-449e-b9f3-978f73d1adbf","isEnabled":true,"createdBy":"Admin","updatedBy":"Admin","createTime":1703770703000,"updateTime":1703770703000,"version":1,"service":"adh_hdfs_id_8","name":"test_policy","policyType":0,"policyPriority":0,"description":"Test policy for HDFS service","resourceSignature":"391f2d50f6f473f28077e9fe73af7b47d918e0905025176820a2e8b540257a72","isAuditEnabled":true,"resources":{"path":{"values":["/resource"],"isExcludes":false,"isRecursive":true}},"policyItems":[{"accesses":[{"type":"read","isAllowed":true},{"type":"write","isAllowed":true}],"users":["test_user"],"groups":[],"roles":[],"conditions":[],"delegateAdmin":false}],"denyPolicyItems":[],"allowExceptions":[],"denyExceptions":[],"dataMaskPolicyItems":[],"rowFilterPolicyItems":[],"serviceType":"hdfs","options":{},"validitySchedules":[],"policyLabels":[],"zoneName":"","isDenyAllElse":false}
Удаление политики
Чтобы удалить политику, достаточно знать её ID в Ranger.
Соответствующая curl-команда:
$ curl -i -u <login>:<password> -X DELETE <ranger_host>/service/public/v2/api/policy/<id>
где <id> — ID политики, которую требуется удалить.
Ожидаемый ответ должен содержать статус 204 No Content:
HTTP/1.1 204 No Content Set-Cookie: RANGERADMINSESSIONID=EBB540344061AEEB0485AEA9DE40E58C; Path=/; HttpOnly Cache-Control: no-cache, no-store, max-age=0, must-revalidate X-Frame-Options: DENY X-XSS-Protection: 1; mode=block Strict-Transport-Security: max-age=31536000; includeSubDomains Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self'; style-src 'self' 'unsafe-inline';font-src 'self' X-Content-Type-Options: nosniff Date: Thu, 28 Dec 2023 13:19:25 GMT Server: Apache Ranger
Удаленная политика также пропадет из Ranger Admin UI.