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/

相关文章
相关标签/搜索