Kerberos概述
本章節將為您介紹什么是Kerberos,及Kerberos開啟、使用的流程。
背景信息
集群開啟Kerberos認證之后:
對客戶端而言,在訪問集群服務(如HDFS,YARN等)之前,必須先通過Kerberos認證,未經認證的客戶端無法訪問集群服務,只有經過認證的可信客戶端才能訪問集群服務、提交作業,有效防止惡意用戶冒充客戶端向集群提交作業的情況;
對服務端而言,集群的服務都是可以信任的,避免了冒充服務的情況。
開啟Kerberos認證能夠提升集群的安全性,但也增加了集群的使用和維護難度:
開啟Kerberos前,用戶需要對Kerberos的原理、使用有一定的了解,才能更好的使用Kerberos;
開啟Kerberos后,提交作業的方式與沒有開啟Kerberos有一些區別,需要對作業進行改造,增加一些Kerberos認證的內容;
開啟Kerberos后,由于對集群服務的訪問加入了Kerberos認證機制,會帶來一定的時間開銷,相同作業相較于未開啟Kerberos的同規格集群執行速度有所下降。
開啟Kerberos
在CDP購買-硬件配置頁面中,開啟Kerberos身份認證。
Kerberos身份認證原理
Kerberos Principal (Kerberos主體)
每個需要使用Kerberos認證服務的用戶或者服務都需要一個Kerberos principal,kerberos主體是用戶或者服務的唯一標識。
啟用Kerberos之后,每個訪問集群服務的用戶都需要證明自己是Kerberos的某個主體,然后才能使用集群服務。
不但用戶需要創建Kerberos principal,服務也需要,CDP會自動為集群中的服務都創建principal,而用戶的principal就需要Kerberos管理員去創建了。
Kerberos Keytabs
Keytab 文件包含了principal 以及該principal 的加密密鑰,通過該文件,集群的服務或者用戶可以不需要任何交互即被認證為合法的principal。
Kerberos協議的認證過程?
第一階段:KDC對client進行身份認證
KDC是kerberos的服務端程序,客戶端在訪問集成了kerberos的服務之前,需要先通過KDC的認證。
當通過KDC的認證之后,KDC會向客戶端頒發一個TGT(Ticket Granting Ticket)。
如果把集群想象為一棟大樓,TGT就相當于該棟大樓的門禁,只有獲得TGT,才能進一步訪問大樓中入駐的企業。
第二階段:Service對client的身份認證
當客戶端獲取到TGT之后,就獲取到訪問集群服務的資格。
但是,在訪問服務之前,客戶端需要攜帶TGT和需要訪問的服務名稱向KDC獲取SGT(Service Granting Ticket),然后攜帶SGT去訪問service。
Kerberos使用
登錄到Utility節點上,執行命令:
kadmin.local
進入KDC的管理控制界面創建一個用戶principal:
addprinc jack
密碼設置為:123456
結合Principal的原理,創建完Principal之后,您就可以以該用戶的身份向KDC獲取TGT了,具體的獲取方式為:
鍵入
quit
退出KDC管理控制界面
執行
kinit jack
,并鍵入密碼123456
即可獲取到TGT,執行命令klist
即可查看TGT的緩存位置,以及當前默認的principal
在集群的所有主機中添加用戶jack:
useradd jack
訪問集群中的服務,如 HDFS:
hdfs dfs -ls /