首页 > 解决方案 > NIFI nipyapi.nifi.rest.ApiException:(401)原因:未经授权。诺克斯网关

问题描述

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)上运行时,它们工作得非常好,但是当我针对KNOX gateway后面的 URL 运行时,我得到了这个错误。我可以在nipyapi.access_api类中看到一些函数

我无法理解如何使用这些或与类中的任何其他功能相结合来克服这个问题?任何想法?

EDIT1: 首先使用security.py 函数的IM 是secure_login。在文档中,其书面登录需要通过 https 进行安全连接。在调用此方法之前,必须指定主机并配置 SSLContext(如果需要)。 set_service_ssl_context这个函数可以达到目的,但我不确定我是否需要它,因为一种方式 TSL 不需要它。

但我有一个困惑。我有两个 URL,一个带有 LDAP 登录的 Knox URl 另一个直接 URI(尽管它也重定向到 knox-Ldap 序列)当我给 Knox 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

所以我假设我必须使用直接网址。其次,为什么它说用户不适合。我可以手动登录。来自 LDAP 序列。我当前的请求是以匿名用户身份进行的,因此我将使用 Certs 并尝试使用 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。也许我应该尝试直接使用letsencrypt-root-ca而不是bi.keystore: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

密钥库类型=JKS

keystorePasswd=infraop6043

密钥密码=

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

信任库类型=JKS

truststorePasswd=changeit

proxiedEntity=CN=bijobs.jamba.net*

标签: apache-nifiknox-gatewayapache-ranger

解决方案


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

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


推荐阅读