基于LDAP搭建NIFI集群安全模式
基于ldap搭建nifi集群的安全模式分为三步:搭建nifi集群、配置ldap登陆和用户授权,其中有一些坑,因此将过程记录下来,以备下次使用。
搭建NIFI集群
- 准备:linux机器3台(centos7)、java jdk1.8+、ldap服务器、nifi工具包nifi-toolkit-1.8.0-bin.tar.gz、nifi安装包(nifi-1.8.0)
- 在三台机器上安装java jdk
- 使用hostnamectl set-hostname node[1-3]命令,设置三台机器的hostname为node1、node2、node3
- 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
- 在当前目录下的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),在授权时对这个组授权,如此才能正常访问和操作数据。