NIFI nipyapi.nifi.rest.ApiException: (401) Причина: неавторизован.KNOX Gateway - PullRequest
0 голосов
/ 11 декабря 2018
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sam/Documents/freenet/nifi-automation/src/compose.py", line 122, in <module>
    compose_services(env_config, types, NIFI_VERSION, False, bench)
  File "/home/sam/Documents/freenet/nifi-automation/src/compose.py", line 11, in compose_services
    pg = ProcessorGroups(NIFI_VERSION)
  File "/home/sam/Documents/freenet/nifi-automation/src/components/processor_group.py", line 9, in __init__
    processor_groups = nipyapi.canvas.list_all_process_groups(pg_id='root')
  File "/home/sam/Documents/freenet/nifi-automation/venv/lib/python3.6/site-packages/nipyapi/canvas.py", line 178, in list_all_process_groups
    root_flow = recurse_flow(pg_id)
  File "/home/sam/Documents/freenet/nifi-automation/venv/lib/python3.6/site-packages/nipyapi/canvas.py", line 64, in recurse_flow
    return _walk_flow(get_flow(pg_id))
  File "/home/sam/Documents/freenet/nifi-automation/venv/lib/python3.6/site-packages/nipyapi/canvas.py", line 85, in get_flow
    raise ValueError(err.body)
ValueError: No applicable policies could be found. Contact the system administrator.

Process finished with exit code 1

У меня есть несколько NIFI сценариев автоматизации, которые прекрасно работают, когда я работаю на незащищенном кластере (localhost / или somehwere), но я получаю эту ошибку, когда я запускаю URL-адрес, который находится за KNOX gateway .Я вижу несколько функций в nipyapi.access_api class

  • def knox_callback (** kwargs)
  • def knox_callback_with_http_info (self, ** kwargs):
  • def knox_request (self, ** kwargs):
  • def knox_request_with_http_info (self, ** kwargs):

Я не могу понять, как любой из них или в комбинациис какой-либо другой функцией из класса, которая / должна быть использована для преодоления этого?Любая идея?

EDIT1: IM с использованием функции security.py сначала является secure_login.В документах для его письменного входа в систему требуется безопасное соединение через https.Перед вызовом этого метода необходимо указать хост и настроить SSLContext (при необходимости). set_service_ssl_context эта функция служит цели, но я не уверен, нужна она мне или нет, так как для одностороннего TSL она не требуется.

Но у меня путаница.У меня есть два URL: один Knox URl с LDAP-входом, другой прямой URI (хотя он также перенаправляет на последовательность knox-Ldap). Когда я даю URL Knox, я получаю другую ошибку по сравнению с прямой.

от прямойURI я получаю

File /nipyapi/security.py", line 130, in service_login
    username=username, password=password)
nipyapi.nifi.rest.ApiException: (409)
Reason: Conflict
HTTP response body: Username/Password login not supported by this NiFi.

И в случае Knox uri он выдает то же исключение ошибки соединения на тех же строках, но

nipyapi.nifi.rest.ApiException: (404)
Reason: Not Found

Так что я предполагаю, что мне нужно использовать прямой URL.во-вторых, почему он говорит, что пользователь не для.Я могу войти в систему вручную.из последовательности LDAP.Мой текущий запрос выполняется как анонимный пользователь, поэтому я собираюсь использовать Certs и попробовать функцию set_service_ssl_context с файлами PEM.

Кстати, ниже приведены два URL.

"nifi_host": "https://****.****.net:8443/nifi-api", ПРЯМОЙ URL

" nifi_host ":" https://**** -****. ****. net: 8443 / gateway / **** - sso / nifi-api ", URL-адрес knox

РЕДАКТИРОВАТЬ 2: мой запрос принимается на сервер как анонимный даже со следующим кодом.

nipyapi.security.set_service_ssl_context(service='nifi', ca_file=None, client_cert_file="bi.keystore", client_key_file=None, client_key_password="infraop6043")
nipyapi.security.service_login(username='myuser', password='mypass')

здесь выдается ошибка соединения

nipyapi.nifi.AccessApi (). create_access_token (username = username,пароль = пароль) И показать эту ошибку Тело HTTP-ответа: Имя пользователя / пароль не поддерживаются этим NiFi

Я не уверен, как правильно использовать set_service_ssl_context. Возможно, вместо bi.keystore я должен попробовать использовать напрямуюфайл letsencrypt-root-ca: letsencrypt.org/certs/isrgrootx1.pem.txt или мои локальные системные сертификаты.

мой файл свойств для toolkit-cli был

* baseUrl = https://svc -hadoop-utilities-pre-c3-02.jamba.net: 18443

хранилище ключей = / home / jread / nifi-toolkit / bi.keystore

keystoreType = JKS

keystorePasswd = infraop6043

keyPasswd =

truststore = / usr / lib / java / jre / lib / security / cacerts

truststoreType = JKS

truststorePasswd = changeit

proxiedEntity = CN = bijobs.jamba.net *

1 Ответ

0 голосов
/ 11 декабря 2018

У вас сообщение об ошибке «Не найдено подходящих политик.Обратитесь к системному администратору. 'Обычно создается плагином Ranger, когда включена защита, а пользователь, с которым вы подключаетесь, не разрешен, я не видел, чтобы Knox производил его.

Можете ли вы подтвердить, что при включении вы не включили Ranger без политик?Knox для NiFi, и это сообщение об ошибке вы получаете?Если вы загляните в nifi-app.log, я подозреваю, что вы увидите ту же самую ошибку, которая подсказывает мне, что NiPyAPi просто передает ошибку, которую генерирует NiFi из-за неполной настройки безопасности.

...