Hadoop Sentry 学习

jopen 10年前

什么是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

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/