Hadoop Sentry 學習
什么是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 架構
圖為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 要保證以下條件:
Hive warehouse 路徑 (/user/hive/warehouse 或者是配置的hive.metastore.warehouse.dir 的路徑) 用戶和用戶組必須是Hive
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://blog.cloudera.com/blog/2013/12/how-to-get-started-with-sentry-in-hive/