Hadoop Sentry 學習

jopen 10年前發布 | 32K 次閱讀 Hadoop 分布式/云計算/大數據

什么是Sentry?

         Sentry 是Cloudera 公司發布的一個Hadoop開源組件,它提供細粒度基于角色的安全控制

Sentry下的數據訪問和授權

        通過引進Sentry,Hadoop目前可在以下方面滿足企業和政府用戶的RBAC(role-based acess control)需求:

安全授權Sentry可以控制數據訪問,并對已通過驗證的用戶提供數據訪問特權。

細粒度訪問控制Sentry支持細粒度的Hadoop數據和元數據訪問控制。在Hive和Impala中Sentry的最初發行版本中,Sentry在服務器、數據庫、表和視圖范圍提供了不同特權級別的訪問控制,包括查找、插入等——允許管理員使用視圖限制對行或列的訪問。管理員也可以通過Sentry和帶選擇語句的視圖或UDF,根據需要在文件內屏蔽數據。

基于角色的管理Sentry通過基于角色的授權簡化了管理,你可以輕易將訪問同一數據集的不同特權級別授予多個組。例如,對于某特定數據集,你可以分配給反欺詐小組查看所有列的特權,給分析師查看非敏感或非PII(personally identifiable information)列的權限,給數據接收流插入新數據到HDFS的權限。

多租戶管理Sentry允許為委派給不同管理員的不同數據集設置權限。在Hive/Impala的情況下,Sentry可以在數據庫/schema級別進行權限管理。

統一平臺Sentry為確保數據安全,提供了一個統一平臺,使用現有的Hadoop Kerberos實現安全認證。同時,通過Hive或Impala訪問數據時可以使用同樣的Sentry協議。未來,Sentry協議會被擴展到其它組件。

Sentry 架構

 

 Hadoop Sentry 學習

       圖為Sentry的基本架構,目前Sentry支持 Hive(憑借HiveServer2的基于thrift 的RPC 接口) 和Impala 。但是Sentry 具有高度模塊化和可擴展的機制,它可以擴展到其它基于Hadoop的應用中去。Sentry 的授權核心層主要分兩部分,結合層(Hive bindings and Impala bindings)和 核心授權提供者(Policy engine and Policy abstractions )。結合層提供一個可插拔的接口,實現與協議引擎的對話 。Policy engine 與bingdings 合作,對訪問請求進行評估檢驗,如果允許訪問,通過 Policy abstractions 來訪問底層數據。

目前已經實現了基于文件的提供者,可以理解具體協議文件格式。協議文件可被存儲在本地文件系統或HDFS中,以便復制和審計。

Sentry在Hive 中的使用方法

        CDH 4.4 以上版本Impala 1.1以上版本可以使用Sentry

注意:如果集群環境中Hive 和Impala 都存在, Sentry 生效的時候,必須保證 Hive 和Impala 都生效。

在Hive 中配置Sentry 要保證以下條件:

  1.  Hive warehouse 路徑 (/user/hive/warehouse 或者是配置的hive.metastore.warehouse.dir 的路徑) 用戶和用戶組必須是Hive

  2.  warehouse 權限所有者必須滿足

770 on the directory itself (for example, /user/hive/warehouse)

770 on all subdirectories (for example, /user/hive/warehouse/mysubdir)

All files and directories should be owned by hive:hive

例如

$ sudo -u hdfs hdfs dfs -chmod -R 770 /user/hive/warehouse
$ sudo -u hdfs hdfs dfs -chown -R hive:hive /user/hive/warehouse

Sentry 使用 Policy file 定義對Hive 訪問權限的控制,創建 Policy file sentry-provider.ini 作為HDFS文件。

需要注意的是 這個文件用戶和用戶組必須為hive 權限為 640。

默認路徑為  /user/hive/sentry

 Policy file 例子:

Global policy file:

[groups]
admin_group = admin_role
dep1_admin = uri_role

[roles] admin_role = server=server1 uri_role = hdfs:///ha-nn-uri/data

[databases] db1 = hdfs://ha-nn-uri/user/hive/sentry/db1.ini</pre>

Per db policy file: (at hdfs://ha-nn-uri/user/hive/sentry/db1.ini):

[groups]
dep1_admin = db1_admin_role
dep1_analyst = db1_read_role

[roles] db1_admin_role = server=server1->db=db1 db1_read_role = server=server1->db=db1->table=*->action=select</pre>

groups 選項匹配用戶和角色;

roles 選項匹配角色和權限;

databases 是可選的, 提供數據庫和per-database policy file 文件的匹配。

 

參考資料:

http://www.cloudera.com/content/cloudera-content/cloudera-docs/CM4Ent/latest/Cloudera-Manager-Managing-Clusters/cmmc_sentry_config.html

http://blog.cloudera.com/blog/2013/12/how-to-get-started-with-sentry-in-hive/

 

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!