Sentry 是Cloudera 公司發佈的一個Hadoop開源組件,它提供細粒度基於角色的安全控制html
經過引進Sentry,Hadoop目前可在如下方面知足企業和政府用戶的RBAC(role-based acess control)需求:shell
安全受權: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協議會被擴展到其它組件。ide
圖爲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中,以便複製和審計。oop
CDH 4.4 以上版本Impala 1.1以上版本可使用Sentryspa
注意:若是集羣環境中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
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
groups 選項匹配用戶和角色;
roles 選項匹配角色和權限;
databases 是可選的, 提供數據庫和per-database policy file 文件的匹配。
參考資料:
http://blog.cloudera.com/blog/2013/12/how-to-get-started-with-sentry-in-hive/