天天看點

雲上基于Kerberos的大資料安全實踐

本文主要介紹E-MapReduce基于Kerberos的大資料安全實踐,包括邊界安全/認證/授權/審計/加密,其中重點介紹了身份認證,采用了阿裡雲和Intel合作開發的基于Kerberos插件式可擴充認證的HAS架構,友善使用者與已經存在的使用者認證系統相結合,使得安全管理人員不需要在使用者賬号系統和Kerberos的資料庫之間遷移和同步,如将阿裡雲的RAM/LDAP等外部的身份認證系統接入Kerberos。

身份認證(Authentication)是用于識别使用者身份的過程,隻有通過身份認證的使用者才有可能通路某些服務。

它涉及三個主體,即使用者、認證、服務,他們的關系如下:

雲上基于Kerberos的大資料安全實踐

平時生活中有很多身份認證的場景:

<code>儲戶</code>首先在銀行開戶提供了相關的<code>身份資訊</code>(身份證/手機号/密碼等),當去銀行取錢時需要提供與開戶時相同的身份資訊[如身份證/銀行卡/密碼], <code>銀行</code>對這些資訊進行<code>認證</code>通過後才能提供取錢服務等;

<code>乘客</code>需要提供<code>身份證</code>去購買機票/火車票等,身份證<code>認證</code>通過後才能購票;

<code>遊樂場</code>會對<code>遊客</code>提供的<code>票</code>進行身份認證,隻有遊樂場發售的票才能通過<code>認證</code>,冒充的假票是無法進入遊樂園;

上述幾種身份認證的場景:

使用者主體是儲戶/乘客/遊客

認證主體有銀行/航空/鐵路公司/遊樂場,他們對使用者提供的身份資訊進行認證,認證可以分為二方認證,即服務的提供者(如銀行等),還有

第三方認證(如身份證認證即為第三方認證。銀行/航空公司等需要調用政府提供的認證接口對身份證進行認證)

服務主體是取錢服務/購票服務/遊玩服務等

身份認證在生活中非常普遍,它是很多系統/工程能夠正常安全的運轉的最基本保障。

身份認證在生活中無處不在,那大資料領域是否也需要身份認證呢?答案是肯定的。

大資料叢集最基本的就是資料,以及用于計算的資源,是一個公司的寶貴财富,顯然需要将它們好好管理起來,開放給相關使用者使用,防止被竊取/被破壞等,這就涉及到大資料安全。

一般在使用者在通路大資料叢集會經過如下幾個次元的安全防護:

雲上基于Kerberos的大資料安全實踐

邊界安全

如設定防火牆/VPC網絡隔離/安全組控制端口等,特别是公有雲環境上的叢集,一定要注意相關服務的端口是否暴露在公網環境中;

認證

叢集中的元件服務開啟身份認證功能,隻有使用者提供了合法的身份資訊才有可能通路服務,它是後續授權的基礎,沒有身份認證的授權是有漏洞容易被冒充的。

認證有很多形式,如服務元件自身提供了簡單的使用者名/密碼認證方式,比較通用的是使用Kerberos協定,叢集上啟動的多個服務元件可以通過使用同一個第三方的Kerberos認證服務,對使用者進行身份認證;

授權

通過身份認證的使用者并不能通路服務的所有資源,需要通過授權機制對使用者通路服務中實際的資源進行控制;

審計

使用者對服務資源的通路,需要利用審計日志進行監控/跟蹤,便于問題/風險的排查;

加密

涉及資料傳輸加密/資料存儲加密,防止資料被竊取/竊取後被破解等。

上述的幾種次元,身份認證處于第二道防護,而且内層的權限控制(Authorization)是依賴于身份認證,沒有身份認證的權限控制是很容易被冒充的。

大資料叢集中的身份認證作用如下:

服務身份認證

大資料有很多元件服務,如HDFDS/YARN/HBase,這些服務會在叢集的節點上啟動相關服務程序,如NameNode/DataNode等。

如果某人新加一台機器并且配置啟動DataNode加入了HDFS叢集,則這台DataNode就會接受到資料,進而導緻這台DataNode資料被别人非法擷取了。

那如果HDFS服務以開啟了身份認證的方式(如Kerberos)啟動,則除非新增加的機器配置了有關身份認證的資訊啟動,否則無法加入叢集。

雲上基于Kerberos的大資料安全實踐

使用者身份認證

有了權限控制,如設定某人不能通路HDFS中某些資料/不能送出作業到yarn,這樣不就保護相關資料/資源了,還需要身份認證幹嘛?

大資料元件中基于user/group等做權限控制,而且user是來自用戶端,即隻要用戶端這邊使用某個user去通路服務,那麼服務就用該user進行權限校驗。

是以用戶端這邊基本上零成本可以冒充相關權限的使用者,如HDFS的超級賬号。

有了身份認證之後,就可以防止使用者冒充,即隻有提供了合法身份資訊,通過了身份認證之後的使用者,才能通路叢集。

雲上基于Kerberos的大資料安全實踐

Kerberos是一種網絡認證協定,它使用對稱加密的技術實作網絡中的身份認證。

Kerberos以第三方服務的方式提供身份認證,即獨立于相關的服務元件;

Kerberos協定有很多實作版本,如<code>MIT Kerberos</code>/<code>Azure AD</code>,以及下面介紹的由阿裡雲和Intel合作開發Intel開發的<code>HAS</code>;

多個元件服務可以使用同一個第三方的Kerberos服務,實作SSO(Single Sign On,單點登入),即隻要使用者通過Kerberos認證擷取到TGT後,可以使用該TGT通路多個元件服務,類似購買到遊樂場票後可以使用該票在遊樂場裡面玩多個項目;

很多大資料服務元件都預設內建了Kerberos,均可以開啟Kerberos身份啟動服務。

<a href="http://web.mit.edu/kerberos/">Kerberos</a>

<a href="http://blog.csdn.net/wulantian/article/details/42418231">轉載CSDN部落格,介紹的比較詳細</a>

當一個使用者需要通路某個被Kerberos保護的服務時,Kerberos認證過程可以分為兩個階段(其中第一個階段是第二個階段的基礎):

這個過程類似于去遊樂場首先需拿身份證購票,使用者提供了身份證,遊樂場對身份證資訊進行認證,然後提供票據給遊客,遊客可以憑票進入遊樂園。

同理,當使用者去通路某個以Kerberos方式啟動的元件服務時,首先需要拿着自己的身份資訊去Kerberos服務端進行認證,擷取到TGT(票據)。

雲上基于Kerberos的大資料安全實踐

上圖中的身份資訊,如提前管理者在Kerberos服務端注冊的使用者名(principal)/密碼,管理者将principle/密碼提供給某個使用者使用,該使用者後續就使用使用者名/密碼來作為身份資訊,去Kerberos的AS進行身份認證,然後擷取TGT。

備注:使用者端實際傳輸到AS的并不會直接傳輸密碼,而是使用用戶端對稱加密資訊,Kerberos服務端對稱解密的方式來進行身份認證。

這個過程類似于遊客進入遊樂園後,遊玩某個項目時需拿這個購買的票據給從業人員進行認證,有效的票(如是否過期,是否是假票等)才能玩相關項目。

雲上基于Kerberos的大資料安全實踐

上圖中使用者拿着第一階段擷取到的TGT(票據)以及要通路服務的名稱等資訊,去請求Kerberos服務端的Ticket-Granting Service,TGS會傳回給使用者一個SGT(Service Granting Tickect,SGT使用元件服務以Kerberos方式啟動時在Kerberos服務端注冊的身份資訊/密鑰進行加密,是以SGT隻有元件服務才能使用對稱密鑰進行解密),然後使用者拿着SGT以及使用者的Authenticator(封裝了使用者名等資訊)去請求元件服務,元件服務會對稱解密SGT資訊并完成對使用者的Authenticator進行認證,如果通過認證則使用者成功通路元件服務的相關資源。

備注: 第一階段擷取的TGT可以緩存在用戶端(有失效時間),隻要TGT未失效,使用者都可以直接使用該TGT直接走第二階段通路服務,而且可以通路多個元件服務(SSO)。

大資料元件(如HDFS/YARN/HBase/Hive/Kafka/Spark等等)基本上都預設支援Kerberos身份認證。

它們在啟動之前需要在Kerberos的服務端注冊相關的principal并導出keytab檔案,然後在服務的配置檔案中開啟身份認證并配置principal/keytab路徑等(如在core-site.xml/yarn-site.xml等檔案中),最後啟動的服務即支援Kerberos的身份認證,後續使用者需要通過Kerberos認證才能正常通路服務。

一般大資料叢集服務元件的Kerberos的部署方式如下:

雲上基于Kerberos的大資料安全實踐

如上圖所示,

叢集以Kerberos的方式啟動了HDFS/YARN等服務

同一個叢集内啟動的多個元件服務共用一個Kerberos服務

示例中以Gateway的方式使用元件服務的用戶端工具通路叢集服務,使用者也可以寫java代碼,在代碼中設定Kerberos相關的配置,通路叢集服務

備注:

如果使用者有兩個Kerberos服務,每個Kerberos服務上都啟動了各自的元件服務,需要進行相關的跨域的配置,實作跨域的服務互訪。

雲上基于Kerberos的大資料安全實踐

不需要提前在Kerberos服務端錄入使用者的身份資訊

一個HAS服務端可以支援多種方式的認證,服務端會根據用戶端的參數來選擇某種認證插件進行認證

可以實作身份資訊的統一管理,多個系統隻需要維護一份身份資訊即可

如RAM的身份資訊可以用于通路阿裡雲的産品(如ECS/OSS等),如果将RAM以插件的方式接入HAS,則RAM的身份資訊也可以用于通路HDFS/YARN/HBase等;

如Hue/Knox等系統也可以與Kerberos共享一套LDAP來管理使用者資訊。

HAS也支援類似MIT Kerberos的使用方式,相容MIT Kerberos用戶端工具,如kinit/klist等

HAS支援跨域

HAS的插件式認證主要展現在<code>3.2.1</code>節的Kerberos認證的第一個階段。

它的實作架構如下:

雲上基于Kerberos的大資料安全實踐

從上述可以看出,如果要将某個現成的外部身份認證系統接入HAS,則隻需要實作兩個插件,即用戶端插件和服務端插件。

用戶端插件擷取需要進行認證的身份資訊,身份資訊來自外部身份認證系統

服務端插件對用戶端請求的身份資訊進行認證,認證過程是通過調用外部身份認證系統進行認證,HAS擷取認證結果,傳回TGT

當用戶端擷取到TGT後,後續流程完全按照<code>3.2.2</code>節的元件服務對使用者的認證流程,未做任何改造。

HAS除了圖中插件的方式,還預設支援類似MIT Kerberos的認證方式,即在Kerberos服務端提前錄入使用者principal/密碼等資訊,也支援MIT Kerberos的用戶端工具,如kinit/klist等

<a href="https://yq.aliyun.com/articles/311543?spm=5176.blogshare311543.0.0.lMlUwe">HAS-插件式Kerberos認證架構</a>

E-MapReduce産品在<code>2.2.1</code>節提到的企業級大資料叢集安全的幾個次元都有相應的功能支援。

建立叢集時候可選擇vpc網絡

叢集有安全組控制開放端口

使用者也可根據需求在叢集節點上面設定iptables

元件服務配置Kerberos非常複雜,而且又很多元件需要配置。

E-MapReduce産品中<code>隻需要</code>在建立叢集頁面打開<code>高安全</code>模式,建立出來的叢集中的元件都會配置好以Kerberos的方式啟動,打開身份認證,非常的友善。

雲上基于Kerberos的大資料安全實踐

E-MapReduce中的Kerberos使用的上面介紹的HAS架構,E-MapReduce實作了RAM/LDAP/EMR三種插件認證方式,即可以使用RAM的AccessKey、LDAP的使用者資訊、以及從E-MapReduce的控制台執行計劃送出作業通路啟動了Kerberos的安全叢集。

E-MapReduce叢集的開源元件可按照元件的官方文檔進行相關的權限配置。

可以在E-MapReduce控制台的叢集配置管理頁面友善的進行配置并重新開機各項服務,無需登入叢集操作。

權限配置詳見E-MapReduce 授權文檔

E-MapReduce叢集預設開啟了HDFS/HBase的audict log, 其它相關元件後續會陸續開啟。

使用者可選擇啟動使用HDFS的資料加密KMS服務。

<code>有興趣或者有需求的使用者可以關注一下E-MapReduce的安全相關的功能,有問題及時聯系和回報。</code>

雲上基于Kerberos的大資料安全實踐

繼續閱讀