NIFI nipyapi.nifi.rest.ApiException: (401) Причина: неавторизован. KNOX Gateway

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. Я вижу несколько функций в классе nipyapi.access_api

  • 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, password=password) И показать эту ошибку Тело 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/

= хранилище ключей / дом /jread/ Nifi-инструментарий / bi.keystore

keystoreType = JKS

keystorePasswd = infraop6043

keyPasswd =

=/ хранилище доверенного USR / Lib / Java/ JRE / Библиотека / безопасность / cacerts

truststoreType = JKS

truststorePasswd = changeit

proxiedEntity = CN = bijobs.jamba.net *

1 ответ

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

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

Другие вопросы по тегам