Hadoop生態圈-開啓Ambari的Kerberos安全選項html
做者:尹正傑 java
版權聲明:原創做品,謝絕轉載!不然將追究法律責任。node
在完成IPA-Server服務的安裝以後,咱們已經瞭解了他提供的基礎功能和服務,領略了其Web控制檯和CLI接口的便利性,可是這寫特性好像並無提示平臺的安全性啊。彆着急,由於IPA-Server只是提供了諸如LDAP和Kerberos等重要的基礎設施,只有將IPA於Ambari進行集成才能徹底顯示處它的神威。關於部署IPA-Server的部署可參考我以前的筆記:「使用FreeIPA安裝Kerberos和LDAP」。json
一.集成前的準備centos
爲了讓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中查看,以下圖所示:session
2>.安裝IPA-Clientapp
[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相關服務的安全隱患問題終於被完全消除。