從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身份认证開關。
Kerberos 服務只能在建立叢集時開啟,叢集建立以後不能開啟或關閉。需要手動在每台節點上添加 Linux 使用者,否則 Yarn 任務運行會失敗,推薦使用引導指令碼來實現。
EMR-3.43.1及後續版本,EMR-5.9.1及後續版本支援選擇KDC來源。
您可以選擇以下KDC來源:
-
本群自建KDC(預設):當前叢集為您建立KDC。
-
外部KDC:您外部自建的KDC,需要填寫相關的資訊,詳情請參見EMR對接外部KDC。
相關文檔
-
如需瞭解Kerberos的基礎使用,詳情請參見Kerberos基礎使用。
-
如需對接外部KDC,詳情請參見EMR對接外部KDC。