從EMR-3.43.0和EMR-5.9.0版本開始,E-MapReduce支援建立高安全類型的叢集。在這種高安全層級的叢集中,所有開源組件均採用Kerberos安全模式啟動,確保只有經過Kerberos認證的用戶端能夠訪問叢集提供的服務(例如HDFS)。
背景資訊
叢集開啟Kerberos之後:
用戶端:可以對可信任的用戶端提供認證,使得可信任用戶端能夠正確提交作業,惡意使用者無法偽裝成其他使用者侵入到叢集當中,能夠有效防止惡意冒充用戶端提交作業的情況。
服務端:叢集中的服務都是可以信任的,叢集服務之間使用密鑰進行通訊,避免了冒充服務的情況。
開啟Kerberos能夠提升叢集的安全性,但是也會增加使用者使用叢集的複雜度:
提交作業的方式與沒有開啟Kerberos前會有一些區別,需要對作業進行改造,增加Kerberos認證的相關內容。
開啟Kerberos前需要使用者對Kerberos的原理、使用有一些瞭解,才能更好地使用Kerberos。
由於叢集服務間的通訊加入了Kerberos認證機制,認證過程會有一些輕微的時間消耗,相同作業相較於沒有開啟Kerberos的同規格叢集執行速度會有一些下降。
Kerberos身份認證原理
Kerberos是一種基於對稱金鑰技術的身份認證協議,可以為其他服務提供身份認證功能,且支援SSO(即用戶端身份認證後,可以訪問多個服務,例如HBase和HDFS)。
Kerberos組成內容如下:
KDC:Kerberos的服務端程式。
Client:需要訪問服務的使用者(Principal),KDC和Service會對使用者的身份進行認證。
Service:整合了Kerberos的服務。例如,HDFS、YARN和HBase。
Kerberos協議認證過程如下圖所示。
Kerberos協議認證過程主要有以下兩個階段:
第一階段:KDC對Client進行身份認證
當用戶端使用者(Principal)訪問一個整合了Kerberos的服務之前,需要先通過KDC的身份認證。
如果身份認證通過,則用戶端會擷取到一個TGT(Ticket Granting Ticket),後續就可以使用該TGT去訪問整合了Kerberos的服務。
第二階段:Service對Client進行身份認證
當使用者擷取TGT後,就可以繼續訪問Service服務。
使用TGT以及需要訪問的服務名稱(例如HDFS)去KDC擷取SGT(Service Granting Ticket),然後使用SGT去訪問Service。Service會利用相關資訊對Client進行身份認證,認證通過後就可以正常訪問Service服務。
開啟Kerberos
建立叢集時,在軟體配置頁面的進階設定地區中,開啟Kerberos身份認證開關。
EMR-3.43.1及後續版本,EMR-5.9.1及後續版本支援選擇KDC來源。
您可以選擇以下KDC來源:
本群自建KDC(預設):當前叢集為您建立KDC。
外部KDC:您外部自建的KDC,需要填寫相關的資訊,詳情請參見EMR對接外部KDC。
相關文檔
如需瞭解Kerberos的基礎使用,詳情請參見Kerberos基礎使用。
如需對接外部KDC,詳情請參見EMR對接外部KDC。