天天看點

基于Kerberos的NIFI叢集安全登陸模式

本文檔旨在說明如何在NIFI叢集模式下中配置kerberos安全登陸模式。

一、版本資訊

OS:CentOS7.2

JDK : 1.8.0_65

NIFI : 1.3.0

ZooKeeper: 3.4.6

二、作業系統配置

2.1 配置每個節點各自的網絡靜态IP位址

vi /etc/sysconfig/network-scripts/ifcfg-enoXXX(該檔案可能會因環境而異)
           

2.2 配置每個節點的主機名

方法一 hostnamectl set-hostname ***
方法二 vi /etc/hostname  把原來的主機名修改為需要設定的主機名,例如:node1
           

2.3配置每個節點的IP映射檔案

vi /etc/hosts
  192.168.1.1  node1
  192.168.1.2  node2
  192.168.1.3  node3
           

2.4 關閉每個節點的防火牆

>setenforce 0
>vi /etc/selinux/config
      SELINUX=disabled  #修改内容為disabled
>systemctl stop firewalld.service
>systemctl disable firewalld.service
>firewall-cmd --state  #檢視防火牆狀态(關閉顯示not running,開啟顯示running)
           

2.5 同步每個節點的時間

ntpdate 0.centos.pool.ntp.org 同步時間
           

三、配置kerberos server 

參考 上一篇文章 nifi基于Kerberos的單節點安全登陸配置

配置好Kerberos server端以後(可單獨配置一台機器,也可配置在一台nifi節點上),在其他節點安裝Kerberos的client端,并能連通(參考Kerberos主從架構設計)

配置Kerberos的client端--在每個client端執行

1.通過線上安裝的方式安裝KDC用戶端 

yum -y install krb5-libs krb5-workstation krb5-auth-dialog
           

2.配置kerberos用戶端的/etc/krb5.conf檔案

配置成kerberos服務端一樣的内容就可以,為了友善可直接拷貝kerberos服務端的檔案直接覆寫就可以。

3.驗證kerberos用戶端是否聯通,利用kinit指令驗證kerberos用戶端是否可以通信服務端。

kinit login/[email protected]
           

四、證書生成以及配置

利用Toolkit工具生成證書,Nifi官方提供了一個工具使用者生成相關的證書,參考文檔 Apache NiFi Admin Guide 的 TLS Generation Toolkit子產品:

下載下傳位址:http://nifi.apache.org/download.html

下載下傳後解壓安裝nifi-toolkit-1.3.0-bin.zip (或tar.gz格式),配置好環境變量友善使用.

生成相關證書

為node[1-3]節點生成密鑰庫,truststore,nifi.properties以及具有給定DN的用戶端證書。

tls-toolkit.sh standalone -c ca.nifi.com -n 'node[1-3]' -o './target'
           

其中 

-n,-hostnames要生成證書的主機名清單(以逗号分隔),可指定多次,支援範圍和執行個體模式。

-c, -certificateAuthorityHostname 為Hostname of NiFi Certificate Authority。

-o, -outputDirectory 指定生成證書的路徑

分發證書

把node1目錄下的檔案拷貝到node1節點下nifi的安裝目錄的conf檔案下,重複的檔案選擇覆寫,同樣把node2目錄下的檔案拷貝到node2節點下nifi的安裝目錄的conf檔案下,把node3目錄下的檔案拷貝到node3節點下nifi的安裝目錄的conf檔案下。

scp ./node1/* /opt/nifi-1.3.0/conf/
scp ./node2/* [email protected]:/opt/nifi-1.3.0/conf/
scp ./node3/* [email protected]:/opt/nifi-1.3.0/conf/
           

五、NIF配置-Kerberos認證

1. 配置nifi常用參數

采用nifi-toolkit工具生成的證書,在生成證書的過程中已經生了一個nifi.properties配置檔案,把不同目錄下的證書檔案拷貝到不同節點nifi的conf目錄下,重複的檔案選擇覆寫

然後修改nifi.properties中的一些參數

nifi.state.management.embedded.zookeeper.start=true
nifi.cluster.protocol.is.secure=true
nifi.cluster.is.node=true 
nifi.zookeeper.connect.string=node1:2181,node2:2181,node3:2181
           

采用了nifi中的自帶zookeeper,設定三個節點的zookeeper.

修改配置了zookeeper節點的nifi安裝目錄下的/conf/state-management.xml 

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

修改每個節點的/conf/zookeeper.properties 

server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
           

建立myid檔案,主要根據zookeeper.properties檔案的的dataDir=./state/zookeeper參數确定位置

在此檔案夾下(沒有則建立)不同節點分别執行

echo 1 > ./state/zookeeper/myid
echo 2 > ./state/zookeeper/myid
echo 3 > ./state/zookeeper/myid
           

2. 配置kerberos參數

vi nifi.properties

nifi.remote.input.secure=true
nifi.security.user.login.identity.provider=kerberos-provider
# kerberos # 
nifi.kerberos.krb5.file=/etc/krb5.conf
nifi.kerberos.service.principal=test/[email protected] #配置的服務主體
nifi.kerberos.keytab.location=/opt/test-NIFI.keytab #配置服務主體的keytab
           

把配置服務主體的/opt/test-NIFI.keytab拷貝到每個節點的/opt目錄下

scp test-NIFI.keytab [email protected]:/opt/
scp test-NIFI.keytab [email protected]:/opt/
           

3. 配置nifi登陸資訊

vi login-identity-providers.xml 

<provider> 
  <identifier>kerberos-provider</identifier> 
  <class>org.apache.nifi.kerberos.KerberosProvider</class> 
  <property name="Default Realm">NIFI.COM</property> 
  <property name="Authentication Expiration">12 hours</property> 
</provider>
           

放開kerberos-provide的配置,把相關注釋部分取消,然後配置成你前面設定的Realm。

4. 配置用于登陸的使用者資訊 vi authorizers.xml

<authorizer>
        <identifier>file-provider</identifier>
        <class>org.apache.nifi.authorization.FileAuthorizer</class>
        <property name="Authorizations File">./conf/authorizations.xml</property>
        <property name="Users File">./conf/users.xml</property>
        <!--這裡配置的是用于頁面登陸的使用者-->
        <property name="Initial Admin Identity">login/[email protected]</property>
        <property name="Legacy Authorized Users File"></property>
       <!-- Provide the identity (typically a DN) of each node when clustered. 注意空格-->
        <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> 
</authorizer>
           

5. 啟動服務,登陸web頁面 配置完成後,每個節點啟動nifi:nifi.sh start,啟動完成後用jps檢視相關程序,或用curl指令來驗證nifi是否啟動:curl --insecure https://node1:9443/nifi

每個節點都能登陸通路web頁面

Hosts:設定的ip

Port: 9443(預設,或者你修改的端口)

User: login/server

Password: ****(前面kerberos配置的使用者名和密碼)