NIFI nipyapi.nifi.rest.ApiException:(401)原因:未经授权。诺克斯网关

时间:2018-12-11 14:06:11

标签: apache-nifi knox-gateway apache-ranger

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 /或某处)上运行时,它们运行得很好。 当我在 KNOX网关后面的URL上运行时,出现此错误。 我可以在 nipyapi.access_api

中看到一些功能
  • def knox_callback(** kwargs)
  • def knox_callback_with_http_info(自己, ** kwargs):
  • def knox_request(self,** kwargs):
  • def knox_request_with_http_info(self,** kwargs):

我不明白如何使用这些或与此类中的其他任何功能组合使用来克服这个问题?有什么主意吗?

EDIT1: 首先使用security.py函数的IM是secure_login。在文档中,其书面登录要求通过https安全连接。在调用此方法之前,必须指定主机并配置SSLContext(如有必要)。 set_service_ssl_context 此功能用于此目的,但是我不确定是否需要它,因为不需要TSL。

但是我很困惑。我有两个URL,一个使用LDAP登录的Knox URl,另一个是直接的URI(尽管它也重定向到knox-Ldap序列)。当我提供Knox URL时,与直接的URL相比,我会遇到不同的错误。

我从直接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序列开始。 我当前的请求将以匿名用户身份进行,因此我将使用证书并尝试将PEM文件与set_service_ssl_context函数一起使用。

下面是两个网址。

“ nifi_host”:“ https://****.****.net:8443 / nifi-api”,直接网址

“ nifi_host”:“ https://****-****.****.net:8443 / gateway / ****-sso / nifi-api”,诺克斯网址

编辑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或我的本地系统ca-certs。

我的toolkit-cli属性文件为

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

keystore = / home / jread / nifi-toolkit / bi.keystore

keystoreType = JKS

keystorePasswd = infraop6043

keyPasswd =

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

truststoreType = JKS

truststorePasswd =更改it

proxiedEntity = CN = bijobs.jamba.net *

1 个答案:

答案 0 :(得分:0)

您的错误消息“找不到适用的策略。请与系统管理员联系。”通常是由Ranger插件在启用安全性并且不允许与您连接的用户生成时产生的,我还没有看到Knox生成它。

当您为NiFi启用Knox时,您是否可以确认没有策略就没有启用Ranger,这就是您得到的错误消息? 如果您查看nifi-app.log,我怀疑您会看到同样的错误,这可能会告诉我NiPyAPi只是在传输由于安全设置不完整而产生的NiFi错误。