首頁>技術>

一、業務背景

大資料叢集最基本的就是資料以及用於計算的資源,是一個公司的寶貴財富,我們需要將它們很好管理起來,將相應的資料和資源開放給對應的使用者使用,防止被竊取、被破壞等,這就涉及到大資料安全。

現狀&&需求

目前我們大資料叢集的現狀是處於裸奔狀態,只要可以登入linux機器即可對叢集繼續相關操作

所以叢集安全對於我們來說迫在眉睫,主要需求有以下幾個方面:

支援多元件,最好能支援當前公司技術棧的主要元件,HDFS、HBASE、HIVE、YARN、STORM、KAFKA等

支援細粒度的許可權控制,可以達到HIVE列,HDFS目錄,HBASE列,YARN佇列,STORM拓撲,KAKFA的TOPIC

開源,社群活躍,按照現有的叢集改情況造改動儘可能的小,而且要符合業界的趨勢。

二、大資料安全元件介紹與對比

目前比較常見的安全方案主要有三種:

Kerberos(業界比較常用的方案)

Apache Sentry(Cloudera選用的方案,cdh版本中整合)

Apache Ranger(Hortonworks選用的方案,hdp發行版中整合)

1、Kerberos

Kerberos是一種基於對稱金鑰的身份認證協議,它作為一個獨立的第三方的身份認證服務,可以為其它服務提供身份認證功能,且支援SSO(即客戶端身份認證後,可以訪問多個服務如HBase/HDFS等)。

服務名作用KDCKerberos的服務端程式,用於驗證各個模組Client需要訪問服務的使用者,KDC和Service會對使用者的身份進行認證Service即集成了Kerberos的服務,如HDFS/YARN/HBase等

Kerberos協議過程主要有三個階段,第一個階段Client向KDC申請TGT,第二階段Client透過獲得的TGT向KDC申請用於訪問Service的Ticket,第三個階段是Client用返回的Ticket訪問Service。

優點:

服務認證,防止broker datanode regionserver等元件冒充加入叢集

解決了服務端到服務端的認證,也解決了客戶端到服務端的認證

缺點:

kerberos為了安全性使用臨時ticket,認證資訊會失效,使用者多的情況下重新認證繁瑣

kerberos只能控制你訪問或者拒絕訪問一個服務,不能控制到很細的粒度,比如hdfs的某一個路徑,hive的某一個表,對使用者級別上的認證並沒有實現(需要配合LDAP)

2、Apache Sentry

Apache Sentry是Cloudera公司釋出的一個Hadoop安全開源元件,它提供了細粒度級、基於角色的授權.

優點:

Sentry支援細粒度的hdfs元資料訪問控制,對hive支援列級別的訪問控制

Sentry透過基於角色的授權簡化了管理,將訪問同一資料集的不同特權級別授予多個角色

Sentry提供了一個統一平臺方便管理

Sentry支援整合Kerberos

缺點:

元件只支援hive,hdfs,impala 不支援hbase,yarn,kafka,storm等

3、Apache Ranger

Apache Ranger是Hortonworks公司釋出的一個Hadoop安全元件開源元件

優點:

提供了細粒度級(hive列級別)

基於訪問策略的許可權模型

許可權控制外掛式,統一方便的策略管理

支援審計日誌,可以記錄各種操作的審計日誌,提供統一的查詢介面和介面

豐富的元件支援(HDFS,HBASE,HIVE,YARN,KAFKA,STORM)

支援和kerberos的整合

提供了Rest介面供二次開發

4、為什麼我們選擇Ranger

多元件支援(HDFS,HBASE,HIVE,YARN,KAFKA,STORM),基本覆蓋我們現有技術棧的元件

支援審計日誌,可以很好的查詢到哪個使用者在哪臺機器上提交的任務明細,方便問題排查反饋

擁有自己的使用者體系,可以去除kerberos使用者體系,方便和其他系統整合,同時提供各類介面可以呼叫

綜上:我們考慮到和開放平臺的整合,以及我們的技術棧和叢集操作的審計等幾個問題最終選用了apache ranger

三、Apache Ranger系統架構及實踐

1、架構介紹

2、元件介紹

RangerAdmin

以RESTFUL形式提供策略的增刪改查介面,同時內建一個Web管理頁面。

Service Plugin

嵌入到各系統執行流程中,定期從RangerAdmin拉取策略,根據策略執行訪問決策樹,並且記錄訪問審計

外掛名稱安裝節點Hdfs-PluginNameNodeHbase-PluginHMaster+HRegionServerHive-PluginHiveServer2Yarn-PluginResourceManager

Ranger-SDK

對接開放平臺,實現對使用者、組、策略的管理

3、許可權模型

訪問許可權無非是定義了”使用者-資源-許可權“這三者間的關係,Ranger基於策略來抽象這種關係,進而延伸出自己的許可權模型。”使用者-資源-許可權”的含義詳解:

使用者

由User或Group來表達,User代表訪問資源的使用者,Group代表使用者所屬的使用者組。

資源

不同的元件對應的業務資源是不一樣的,比如

HDFS的FilePath

HBase的Table,Column-family,Column

Hive的Database,Table,Column

Yarn的對應的是Queue

許可權

由(AllowACL, DenyACL)來表達,類似白名單和黑名單機制,AllowACL用來描述允許訪問的情況,DenyACL用來描述拒絕訪問的情況,不同的元件對應的許可權也是不一樣的。

外掛許可權項HdfsRead Write ExecuteHbaseRead Write Create AdminHiveSelect Create Update Drop Alter Index Lock Read Write AllYarnsubmit-app admin-queue

4、許可權實現

Ranger-Admin職責:

管理員對於各服務策略進行規劃,分配相應的資源給相應的使用者或組,儲存在db中

Service Plugin職責:

定期從RangerAdmin拉取策略

根據策略執行訪問決策樹

實時記錄訪問審計

策略執行過程:

策略優先順序:

黑名單優先順序高於白名單

黑名單排除優先順序高於黑名單

白名單排除優先順序高於白名單

決策下放:

如果沒有policy能決策訪問,一般情況是認為沒有許可權拒絕訪問,然而Ranger還可以選擇將決策下放給系統自身的訪問控制層

元件整合外掛原理:

ranger透過實現各元件擴充套件的許可權介面,進行許可權驗證

Hdfs實現原理

hdfs-site.xml會修改如下配置:

 <property> <name>dfs.permissions.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>true</value> </property> <property> <name>dfs.namenode.inode.attributes.provider.class</name> <value>org.apache.ranger.authorization .hadoop.RangerHdfsAuthorizer</value> </property>

載入過程:

Hbase實現原理

在安裝完hbase外掛後,hbase-site.xml會修改如下配置:

 <property> <name>hbase.security.authorization</name> <value>true</value> </property> <property> <name>hbase.coprocessor.master.classes</name> <value>org.apache.ranger.authorization.hbase .RangerAuthorizationCoprocessor </value> </property> <property> <name> hbase.coprocessor.region.classes </name> <value>org.apache.ranger.authorization.hbase .RangerAuthorizationCoprocessor </value> </property>

載入過程:

Hive實現原理

 <property> <name>hive.security.authorization.enabled</name> <value>true</value> </property> <property> <name>hive.security.authorization.manager</name> <value>org.apache.ranger.authorization.hive.authorizer .RangerHiveAuthorizerFactory </value> </property> 

載入過程:

Yarn實現原理

yarn-site.xml

 <property> <name>yarn.acl.enable</name> <value>true</value> </property> <property> <name>yarn.authorization-provider</name> <value> org.apache.ranger.authorization.yarn.authorizer .RangerYarnAuthorizer </value> </property>

載入過程:

四、Ranger實踐

1、組許可權實現

由於在呼叫各服務過程中使用hdfs shell、hbase-shell、hive-jdbc只能獲取到使用者資訊,在只有組策略時會匹配不成功,認為沒有許可權,實現辦法是加入ldap元件同步使用者組資訊,這樣增加了系統的複雜性,我們透過改寫ranger-admin程式碼,在客戶端plugin獲取策略時,將組許可權賦予使用者,這樣就實現了組策略功能。

21
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • MIMO的通道模型