Apache Nifi:无法找到初始管理员来设定策略

时间:2018-08-29 13:41:06

标签: authorization apache-nifi

我正在尝试在Apache Nifi 1.7.1上配置ldap身份验证。 TLS已配置,当我不尝试配置初始管理员(显然我可以管理nifi)时,ldap连接有效。

服务器无法启动,并出现以下错误:

Caused by: org.apache.nifi.authorization.exception.AuthorizerCreationException: Unable to locate initial admin adehay to seed policies
        at org.apache.nifi.authorization.FileAccessPolicyProvider.populateInitialAdmin(FileAccessPolicyProvider.java:569)
        at org.apache.nifi.authorization.FileAccessPolicyProvider.load(FileAccessPolicyProvider.java:512)
        at org.apache.nifi.authorization.FileAccessPolicyProvider.onConfigured(FileAccessPolicyProvider.java:225)
        ... 104 common frames omitted

我已经删除了每个测试之间的users.xml和authorizations.xml,如https://community.hortonworks.com/articles/81184/understanding-the-initial-admin-identity-access-po.html中所述,但是我仍然很困惑。

当我不尝试配置初始管理员时,login-identity-provider.xml的配置如下所示(我可以在nifi登录页面上连接但出现权限不足错误):

 <provider>
        <identifier>ldap-provider</identifier>
        <class>org.apache.nifi.ldap.LdapProvider</class>
        <property name="Authentication Strategy">SIMPLE</property>

        <property name="Manager DN">uid=fau_bind,cn=users,cn=accounts,dc=soft,dc=fau</property>
        <property name="Manager Password">xxx</property>

        <property name="TLS - Keystore"></property>
        <property name="TLS - Keystore Password"></property>
        <property name="TLS - Keystore Type"></property>
        <property name="TLS - Truststore"></property>
        <property name="TLS - Truststore Password"></property>
        <property name="TLS - Truststore Type"></property>
        <property name="TLS - Client Auth"></property>
        <property name="TLS - Protocol"></property>
        <property name="TLS - Shutdown Gracefully"></property>

        <property name="Referral Strategy">IGNORE</property>
        <property name="Connect Timeout">10 secs</property>
        <property name="Read Timeout">10 secs</property>

        <property name="Url">ldap://xxx:389</property>
        <property name="User Search Base">cn=users,cn=accounts,dc=soft,dc=fau</property>
        <property name="User Search Filter">uid={0}</property>

        <property name="Identity Strategy">USE_USERNAME</property>
        <property name="Authentication Expiration">12 hours</property>
    </provider>

我的authorizers.xml(安装后保持不变):

<accessPolicyProvider>
    <identifier>file-access-policy-provider</identifier>
    <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
    <property name="User Group Provider">file-user-group-provider</property>
    <property name="Authorizations File">./conf/authorizations.xml</property>
    <property name="Initial Admin Identity">adehay</property>
    <property name="Legacy Authorized Users File"></property>   
</accessPolicyProvider>

我尝试用LDAP DN替换“ adehay”,但没有好运。

nifi.properties中的映射(不管有没有),

nifi.security.identity.mapping.pattern.dn=^uid=(.*?),cn=users,cn=accounts,dc=soft,dc=fau$
nifi.security.identity.mapping.value.dn=$1

我一定错过了一些东西,但我看不到。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

这里有两个独立的部分,即身份验证和授权。

login-identity-providers.xml用于根据LDAP验证用户。

authorizers.xml用于配置授权者以授权可能来自或可能不来自LDAP的经过身份验证的用户。

当前问题是您正在告诉access-policy-provider您的初始管理员是'adehay',但是access-policy-provider对您的登录身份提供者一无所知,它只知道在authorizers.xml中定义的用户组提供者。

您可以在authorizers.xml中定义一个基于文件的用户组提供者,在此处您手动定义用户'adehay',请参见此处的“初始用户身份1”示例:

https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#initial-admin-identity

对您的情况更有意义的第二种方法是在您的authorizers.xml中定义一个LDAP用户组提供者,请参见上面链接的同一部分中的示例,其中说:“这是加载用户和LDAP中的组。”