Hadoop生態圈-開啟Ambari的Kerberos安全選項
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
在完成IPA-Server服務的安裝之后,我們已經了解了他提供的基礎功能和服務,領略了其Web控制台和CLI接口的便利性,但是這寫特性好像並沒有提示平台的安全性啊。別着急,因為IPA-Server只是提供了諸如LDAP和Kerberos等重要的基礎設施,只有將IPA於Ambari進行集成才能完全顯示處它的神威。關於部署IPA-Server的部署可參考我之前的筆記:“使用FreeIPA安裝Kerberos和LDAP”。
一.集成前的准備
為了讓Hadoop相關的服務切換到Kerberos認證模式,需要將Ambari與FreeIPA集成。在正式集成之前需要做一些准備工作,大致思路如下:首先需要在IPA中新增一個ambari組,專門用於管理ambari的相關操作,接着需要在所有的集群服務器上安裝IPA-Client程序,最后需要在Ambari-Server所在的服務安裝IPA-Admin管理端工具。接下來我們開始介紹具體如何實施。
1>.新建Ambari組
首先,在Ambar-Server所在的服務器上使用Kerberos命令登錄amdin賬戶。通過遠程登錄IPA-Server的方式新建一個名為“ambari-managed-principals”的組,具體操作如下所示:
[root@node101 ~]# kinit admin Password for admin@YINZHENGJIE.COM: [root@node101 ~]# [root@node101 ~]# klist Ticket cache: KEYRING:persistent:0:0 Default principal: admin@YINZHENGJIE.COM Valid starting Expires Service principal 12/13/2018 19:16:16 12/14/2018 19:16:14 krbtgt/YINZHENGJIE.COM@YINZHENGJIE.COM [root@node101 ~]# [root@node101 ~]# ipa group-add ambari-managed-principals --------------------------------------- Added group "ambari-managed-principals" --------------------------------------- Group name: ambari-managed-principals GID: 238000003 [root@node101 ~]#
創建成功后,我們可以在IPA-Server的Web UI中查看,如下圖所示:

2>.安裝IPA-Client
[root@node103 ~]# yum -y install ipa-client Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.huaweicloud.com * extras: mirrors.huaweicloud.com * updates: mirrors.huaweicloud.com Package ipa-client-4.6.4-10.el7.centos.x86_64 already installed and latest version Nothing to do #原因是我已經安裝完畢啦! [root@node103 ~]#
[root@node102 ~]# ipa-client-install --domain=YINZHENGJIE.COM --server=node100.yinzhengjie.com --realm=YINZHENGJIE.COM --principal=admin@YINZHENGJIE.COM --enable-dns-updates #開始安裝客戶端程序,參數意思下面會詳細解釋! WARNING: ntpd time&date synchronization service will not be configured as conflicting service (chronyd) is enabled Use --force-ntpd option to disable it and force configuration of ntpd Autodiscovery of servers for failover cannot work with this configuration. If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure. Proceed with fixed values and no DNS discovery? [no]: yes #注意,這里需要輸入的是yes喲! Client hostname: node102.yinzhengjie.org.cn Realm: YINZHENGJIE.COM DNS Domain: yinzhengjie.com IPA Server: node100.yinzhengjie.com BaseDN: dc=yinzhengjie,dc=com Continue to configure the system with these values? [no]: yes #注意,這里需要輸入的是yes喲! Skipping synchronizing time with NTP server. Password for admin@YINZHENGJIE.COM: #對面的小哥哥小姐姐往這里看,這里是需要你輸入管理員的用戶名密碼,也就是你在安裝IPA-Server時配置的密碼!現在知道為什么我當時如此強調要記住他的原因了吧! Successfully retrieved CA cert Subject: CN=Certificate Authority,O=YINZHENGJIE.COM Issuer: CN=Certificate Authority,O=YINZHENGJIE.COM Valid From: 2018-12-12 11:15:53 Valid Until: 2038-12-12 11:15:53 Enrolled in IPA realm YINZHENGJIE.COM Created /etc/ipa/default.conf New SSSD config will be created Configured sudoers in /etc/nsswitch.conf Configured /etc/sssd/sssd.conf Configured /etc/krb5.conf for IPA realm YINZHENGJIE.COM trying https://node100.yinzhengjie.com/ipa/json [try 1]: Forwarding 'schema' to json server 'https://node100.yinzhengjie.com/ipa/json' trying https://node100.yinzhengjie.com/ipa/session/json [try 1]: Forwarding 'ping' to json server 'https://node100.yinzhengjie.com/ipa/session/json' [try 1]: Forwarding 'ca_is_enabled' to json server 'https://node100.yinzhengjie.com/ipa/session/json' Systemwide CA database updated. Hostname (node102.yinzhengjie.org.cn) does not have A/AAAA record. Failed to update DNS records. Missing A/AAAA record(s) for host node102.yinzhengjie.org.cn: 172.30.1.102. Missing reverse record(s) for address(es): 172.30.1.102. Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub [try 1]: Forwarding 'host_mod' to json server 'https://node100.yinzhengjie.com/ipa/session/json' Could not update DNS SSHFP records. SSSD enabled Configured /etc/openldap/ldap.conf Configured /etc/ssh/ssh_config Configured /etc/ssh/sshd_config Configuring yinzhengjie.com as NIS domain. Client configuration complete. The ipa-client-install command was successful You have new mail in /var/spool/mail/root [root@node102 ~]#
安裝客戶端工具之后就可以執行上面的“ipa-client-install”命令安裝客戶端程序。在安裝的過程中會將其所在的服務器向IPA-Server的主機服務注冊並加入到IPA域,同時也會向DNS服務注冊。接下來我們對上述配置的幾個中待你參數進行必要的說明:
domain: IPA-Server安裝時設置的域名
server:
IPA-Server服務器的FQDN
realm:
IPA-Server安裝時設置的認證管理域
principal:
IPA-Server安裝時設置的管理員賬號
溫馨提示:IPA-Clinet服務需要在所有集群服務器進行安裝,重復上述的安裝動作,只帶所有的集群服務器節點都安裝完成。
3>.安裝IPA-Admin管理工具
如果一個Ambari系統與IPA完成集成,那么通過Ambari管理的服務器都會被自動注冊成IPA的主機。不僅如此,Ambari內建的集群用戶同樣也會在IPA中創建相應的Kerberos用戶,Ambari內所有已安裝的Hadoop組件也都會在IPA中生成相應組件的服務。Ambari這種高度自動化的集成能力便是依靠IPA提供的IPA-Admin工具在背后默默完成的。所以還需要為Ambari安裝這套管理工具,安裝的方式非常簡單,執行yum -y install ipa-admintools命令即可。
[root@node103 ~]# yum -y install ipa-admintools Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.huaweicloud.com * extras: mirrors.huaweicloud.com * updates: mirrors.huaweicloud.com Package ipa-client-4.6.4-10.el7.centos.x86_64 already installed and latest version Nothing to do #這是由於我已經安裝過啦! [root@node103 ~]#
4>.開啟IPA集成選項
Ambari在默認情況下,IPA集成選項是隱藏配置,需要先將其開啟才能使用。開啟IPA集成選項非常簡單,我們只需要在ambari地址末尾加上exprimental即可,如下圖所示,在瀏覽器輸入:“http://node101.yinzhengjie.org.cn:8080/#/experimental”之后會來到一個擴展設置頁面,找到名為“enableIpa”的選項,勾選然后保存。

二.集成IPA
1>.在Ambari界面只能啟用“Kerberos”
前置准備動作全部完成之后,如下圖所示,打開瀏覽器進入Ambari的Admin菜單,可以發現目前Kerberos認證功能是處於關閉狀態的,單擊綠色的“Enable Kerberos”按鈕進入開啟Kerberos的設置導航頁面。

如下圖所示,可能會出現“YARN日志和本地dir將被刪除,ResourceManager狀態將被格式化為啟用/禁用Kerberos的一部分。”的相關提示,點擊“Proceed Anyway”。

2>.確認檢查項
如下圖所示,選擇Exiting IPA之后,會出現4個確認檢查項。如下:(這里主要觀察第一個和第四個檢查項,其實你如果按照我的博客來操作的話,就直接勾選吧~因為我已經幫你檢查過啦!)
2.1>.集群主機加入IPA域,主機注冊在DNS中
2.2>.為創建的主體或krbPasswordExpiry屬性設置沒有到期的密碼策略是可寫的
2.3>.ipa管理的krb5.conf設置default_ccache_name=/tmp/krb5cc_%{uid}
2.4>.Java加密擴展(JCE)已經安裝在AMBARI服務器主機和集群中的所有主機上。

3>.設置Kerberos信息
現在開始設置Kerberos的配置信息,如下圖所示,按照安裝IPA-Server時設置的信息填寫KDC地址,管理員賬號和Realm等信息。填寫完畢之后可以使用“Test KDC Connection”按鈕驗證配置是否正確,正確無誤之后單擊“Next”按鈕繼續。

4>.安裝和測試Kerberos客戶端
在設置完Kerberos信息之后,如下圖所示,Ambari便會開始給所有被它管控的服務器節點安裝Kerberos客戶端程序並進行一些環境測試工作,安裝並測試通過之后單擊“Next”按鈕繼續。

在這個安裝步驟的同學,如果遇到錯誤的話,我們可以按照對應的方法查看日志,詳情請參考:Ambari集成Kerberos報錯匯總。
5>.配置識別
接着會跳轉到配置確認頁面,如下圖所示。這里會讓我們確認Kerberos服務的一些配置信息,例如KDC服務的地址,KDC類型和Realm名稱等等。

溫馨提示:下面我標示的這個信息,大家應該注意和你的域名加起來字符是否超過32個,如果超過了32個長度的話請修改,否則可能會報錯!

6>.確認配置
如下圖所示,有意向非常重要的資料需要我們存檔。單擊藍色的“Doownload CSV”按鈕可以下載一份名為“Kerberos.csv”的配置文件。
下載“Kerberos.csv”的配置文件之后,請妥善保存這個CSV文件。如下圖所示,它記錄了Ambari與IPA集成后Ambari與其Hadoop相關服務生成的有所Kerberos賬號信息,包括用戶名,類型和keytab文件路徑等重要信息。

7>.完成Stop Services配置

8>.完成Kerberos Cluster配置

9>.完成Start and Test Services步驟(這個過程可能有點長,因為他需要啟動服務嘛!)

10>.Kerberos啟動成功

三.測試Kerberos認證
我們還以HDFS為例,首先通過ssh登錄到安裝了HDFS客戶端的任意服務器。
1>.查看hdfs的數據信息
[root@node101 ~]# hdfs dfs -ls / 18/12/18 14:03:33 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "node101.yinzhengjie.org.cn/172.30.1.101"; destination host is: "node101.yinzhengjie.org.cn":8020; [root@node101 ~]#
報錯分析:
大家是不是很好奇?結果沒有返回任何查詢數據,而是發生了異常錯誤,這是怎么回事呢?別着急,我們一起分析一下:從上面的異常信息可以看到“ GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]”這樣一條錯誤信息,表明當前操作系統請求找不到任何Kerberos的tgt憑證。這么一來報錯信息就很明顯了,這是由於HDFS服務現在已經開始使用Kerberos協議進行權限驗證,所以使用Linux本地用戶已經不能操作Hadoop集群中的任何服務了。換句話說,現在必須使用Kerberos用戶登錄之后才能使用相關服務,這能證明Hadoop相關服務的Kerberos認證已經生效了。恭喜你,Kerberos是真的啟用成功啦!
2>.登錄KDC服務器驗證信息。
現在轉為使用Kerberos用戶登錄,打開在集成IPA步驟中心下的Kerberos.cvs文件並找到HDFS服務對應的Kerberos用戶和它的keytab保存路徑等相關信息,如下圖所示:

如上圖所示,我們找到了keytab的路徑(“/etc/security/keytabs/hdfs.headless.keytab”)和用戶信息(“hdfs-yinzhengjie_cluster@YINZHENGJIE.COM”)。注意對應的主機(“node101.yinzhengjie.org.cn”)哈。我們登錄KDC服務器,具體操作如下:
[root@node101 ~]# kinit -kt /etc/security/keytabs/hdfs.headless.keytab hdfs-yinzhengjie_cluster@YINZHENGJIE.COM [root@node101 ~]# [root@node101 ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: hdfs-yinzhengjie_cluster@YINZHENGJIE.COM Valid starting Expires Service principal 12/18/2018 14:03:43 12/19/2018 14:03:43 krbtgt/YINZHENGJIE.COM@YINZHENGJIE.COM renew until 12/25/2018 14:03:43 [root@node101 ~]#
3>.登錄KDC服務器成功后,繼續查看hdfs的數據,發現成功啦!
[root@node101 ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: hdfs-yinzhengjie_cluster@YINZHENGJIE.COM Valid starting Expires Service principal 12/18/2018 14:03:43 12/19/2018 14:03:43 krbtgt/YINZHENGJIE.COM@YINZHENGJIE.COM renew until 12/25/2018 14:03:43 [root@node101 ~]# [root@node101 ~]# hdfs dfs -ls / Found 10 items drwxrwxrwx - yarn hadoop 0 2018-12-08 03:46 /app-logs drwxr-xr-x - yarn hadoop 0 2018-12-08 03:46 /ats drwxr-xr-x - hdfs hdfs 0 2018-12-08 03:46 /hdp drwxr-xr-x - mapred hdfs 0 2018-12-08 03:46 /mapred drwxrwxrwx - mapred hadoop 0 2018-12-08 03:46 /mr-history drwxr-xr-x - hdfs hdfs 0 2018-12-08 22:07 /ranger drwxr-xr-x - ranger hdfs 0 2018-12-09 00:53 /test drwxrwxrwx - hdfs hdfs 0 2018-12-18 13:51 /tmp drwxr-xr-x - hdfs hdfs 0 2018-12-07 16:12 /user drwxrwxrwx - hdfs hdfs 0 2018-12-07 22:19 /yinzhengjie [root@node101 ~]#
這一次終於可以正常返回數據了,一切也都符合設定的預期。將Ambari與IPA集成之后,大數據平台中所有的Hadoop相關服務都已經切換到使用Kerberos認證了。由此,Hadoop相關服務的安全隱患問題終於被徹底消除。
