Подключение к 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.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней