【发布时间】:2018-12-11 14:06:10
【问题描述】:
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 网关 后面的 URL 时收到此错误。 我可以在 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: 首先使用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 序列。 我当前的请求是以匿名用户身份进行的,因此我将使用 Certs 并尝试使用 PEM 文件的 set_service_ssl_context 函数。
顺便说一句,下面是两个网址。
"nifi_host": "https://****.****.net:8443/nifi-api", 直接网址
"nifi_host": "https://****-****.****.net:8443/gateway/****-sso/nifi-api", knox url
编辑 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
keystoreType=JKS
keystorePasswd=infraop6043
keyPasswd=
truststore=/usr/lib/java/jre/lib/security/cacerts
truststoreType=JKS
truststorePasswd=changeit
proxiedEntity=CN=bijobs.jamba.net*
【问题讨论】:
标签: apache-nifi knox-gateway apache-ranger