首页 > 技术文章 > 基于LDAP搭建NIFI集群安全模式

it-abang 2021-01-22 10:17 原文

基于LDAP搭建NIFI集群安全模式

基于ldap搭建nifi集群的安全模式分为三步:搭建nifi集群、配置ldap登陆和用户授权,其中有一些坑,因此将过程记录下来,以备下次使用。

搭建NIFI集群

  1. 准备:linux机器3台(centos7)、java jdk1.8+、ldap服务器、nifi工具包nifi-toolkit-1.8.0-bin.tar.gz、nifi安装包(nifi-1.8.0)
  2. 在三台机器上安装java jdk
  3. 使用hostnamectl set-hostname node[1-3]命令,设置三台机器的hostname为node1、node2、node3
  4. tar –zxvf nifi-toolkit-1.8.0-bin.tar.gz解压,然后进入其中的bin目录下,执行命令./tls-toolkit.sh standalone -c ca.nifi.com -n 'node[1-3]' -o './target',各个参数的意义可以自行查看官方文档。生成证书相关文件keystore.jks、truststore.jks、nifi.properties、nifi-cert.pem、nifi-key.key
  5. 在当前目录下的target下执行命令:
scp node1/* /work/bin/nifi-1.8.0/conf

scp node2/* root@node2:/work/bin/nifi-1.8.0/conf

scp node3/* root@node3:/work/bin/nifi-1.8.0/conf

 

将node下产生的相关文件放到nifi的conf目录下,已有的替换

6.vim nifi.properties,修改以下属性:

nifi.state.management.embedded.zookeeper.start=true

nifi.cluster.is.node=true

nifi.zookeeper.connect.string=node1:2181,node2:2181,node3:2181

 

7.vim zookeeper.properties,修改以下属性:

server.1=node1:2888:3888

server.2=node2:2888:3888

server.3=node3:2888:3888

 

8.在nifi根目录下执行命令mkdir –p state/zookeeper,然后执行echo 1 > state/zookeeper/myid,其中1为当前节点的索引。同样的node2和node3分别为2和3。

9.进入conf目录下,vim state-management.xml,修改以下属性:

<property name="Connect String">node1:2181,node2:2181,node3:2181</property>

 

10.vim /etc/hosts,添加以下属性,其中id地址为三台机器的ip

192.5.52.1 node1

192.5.52.2 node2

192.5.52.3 node3

11.步骤6、7、8、9、10,在三个节点上都需要执行。至此,nifi集群搭建完毕,且开启了https。

配置LDAP登陆

以下操作,在三个节点上都需要执行,且需要保证一样:

1.vim nifi.properties,修改以下属性:

nifi.security.user.login.identity.provider=ldap-provider

 

2.vim login-identity-providers.xml,修改以下属性,不需要修改的地方,已经省略

<provider>

        <identifier>ldap-provider</identifier>

        <class>org.apache.nifi.ldap.LdapProvider</class>

        <property name="Authentication Strategy">SIMPLE</property>

        <property name="Manager DN">uid=test,ou=user,dc=nifi</property>

        <property name="Manager Password">123456</property>

        <property name="Url">ldap://ip:10389</property>

        <property name="User Search Base">ou=user,dc=nifi</property>

        <property name="User Search Filter">uid={0}</property>

</provider>

 

3.至此,完成ldap的集成。

用户授权

经过以上两步操作,集群已经可以启动并且ldap的用户可以登录集群,但是用户没有权限,因此无法做操作,接下来进行用户的授权操作,以下操作,在三个节点上都需要执行,且需要保证一样:

1.vim authorizers.xml,修改以下属性:

<userGroupProvider>

        <identifier>file-user-group-provider</identifier>

        <class>org.apache.nifi.authorization.FileUserGroupProvider</class>

        <property name="Users File">./conf/users.xml</property>

        <property name="Legacy Authorized Users File"></property>

        <property name="Initial User Identity 1">uid=test,ou=user,dc=nifi</property>

        <property name="Initial User Identity 2">CN=node1, OU=NIFI</property>

        <property name="Initial User Identity 3">CN=node2, OU=NIFI</property>

        <property name="Initial User Identity 4">CN=node3, OU=NIFI</property>

</userGroupProvider>

 

注意:CN=node, OU=NIFI之间有一个空格

<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">uid=test,ou=user,dc=nifi</property>

        <property name="Legacy Authorized Users File"></property>

        <property name="Node Identity 1">CN=node1, OU=NIFI</property>

        <property name="Node Identity 2">CN=node2, OU=NIFI</property>

        <property name="Node Identity 3">CN=node3, OU=NIFI</property>

        <property name="Node Group"></property>

    </accessPolicyProvider>

 

2.至此,nifi集群的安全模式搭建完成,依次启动三个节点,此时登录nifi集群,使用test/123456进行登录,提示:Untrusted proxy CN=node1, OU=NIFI,表示权限不足,需要在users.xml中添加如下属性:

<user identifier="dc759f41-2928-35ca-a52b-d744dd3338ba" identity="CN=node1, OU=NIFI"/>

<user identifier="dc759f41-2928-35ca-a522-1744dd00d8ba" identity="CN=node2, OU=NIFI"/>

<user identifier="dc759f41-2928-35ca-a52b-d7df3400d8ba" identity="CN=node3, OU=NIFI"/>

 

然后在authorizations.xml中添加如下属性:

<policy identifier="nifi-cluster-write" resource="/proxy" action="W">

      <user identifier="dc759f41-2928-35ca-a52b-d744dd00d8ba"/>

      <user identifier="dc759f41-2928-35ca-a52b-d744dd3338ba"/>

      <user identifier="dc759f41-2928-35ca-a522-1744dd00d8ba"/>

      <user identifier="dc759f41-2928-35ca-a52b-d7df3400d8ba"/>

</policy>

 

根据错误提示可知CN=node1, OU=NIFI没有代理权限,因此需要在三个节点上添加相应的身份,然后给这些身份授予代理的权限,至于为什么用test/123456登录却需要CN=node1, OU=NIFI的代理权限,官方解释在ldap用户登录时,会使用该节点使用的证书中的相应的用户身份进行代理,而我们在前面生成证书时,默认身份就是CN=节点, OU=NIFI。

3.访问https://node1:9443/nifi时,会提示访问不到,可以将前面产生的nifi-cert.pem导入浏览器中,然后存储到受信任的列表中,最后在访问地址的机器的hosts中添加192.5.52.1 node1,此时再访问,则能访问,且不报不安全。

4.访问nifi集群节点中的数据时可能会提示权限不足,此时可以添加对组件的操作权限,记得需要把test以及node1、node2、node3这四个用户创建一个组(如admin),在授权时对这个组授权,如此才能正常访问和操作数据。

推荐阅读