Подключение к 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_hdfs_id_8", (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> -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":42,"guid":"2c2f8cf1-4ef5-449e-b9f3-978f73d1adbf","isEnabled":true,"createdBy":"Admin","updatedBy":"Admin","createTime":1703770703338,"updateTime":1703770703338,"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}
Проверить правильность создания политики можно в 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":42,"guid":"2c2f8cf1-4ef5-449e-b9f3-978f73d1adbf","isEnabled":true,"createdBy":"Admin","updatedBy":"Admin","createTime":1703770703000,"updateTime":1703776521670,"version":2,"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","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":42,"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.