Hadoop Sentry 學習

什麼是Sentry?

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

Sentry下的數據訪問和受權

        經過引進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的基本架構,目前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

Sentry在Hive 中的使用方法

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

注意:若是集羣環境中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


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://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/

相關文章
相關標籤/搜索