Apache Sentry权限管理框架

Source

一、背景

   市面上流行的大数据权限管理框架主要有:Apache Sentry和Apache Ranger 等。这些框架兼容了大部分基于hadoop生态圈的组件,包括hive,hbase,kafka,hdfs和yarn等。

二、组件介绍

2.1 什么是Apache Sentry?

  Apache Sentry是由Cloudera公司内部开发的开源的大数据权限管理框架。Apache Sentry对存储在HDFS上数据的管理有着很好的支持性,目的是为了让用户能够细粒度的控制Hadoop系统中(这里主要包含HDFS, Impala,Solr ,Hive/Hcatalog 等)的数据。

2.2 Apache Sentry的特点

1 )Apache Sentry是基于角色的授权模型(RBAC , role-based access control )实现了权限的控制。通过角色的权限控制,大大降低系统对大量用户的直接ACL控制。目前可以做到数据列级别的权限管理。
​ 2 )Apache Sentry是一个高度模块化的权限工具, 可以支持Hadoop中各种数据模型的授权 。 允许用户自定义授权规则以验证用户或应用程序对Hadoop资源的访问请求 。
3 )Apache Sentry能够做到统一授权。数据访问规则一旦定义,则可以跨多个数据访问工具工作。
​4 )Apaceh Sentry对数据的权限定义需要基于Hue协调框架做可视化配置使用。

2.3Apache Sentry架构

Apaceh Sentry的体系结构中有三个重要的组件:一是Binding;二是Policy Engine;三是Policy Provider。
在这里插入图片描述
源码结构如下图:
在这里插入图片描述

2.3.1 Sentry-binding

Sentry-binding通过Thrift服务的RPC方式请求实现了对不同查询引擎的授权。Sentry通过将内部Hook函数插入到各SQL引擎的编译、执行的不同阶段实现过滤器和授权接管的作用。一方面只放行具有相应数据对象访问权限的SQL查询,另一方面使用了Sentry之后,grant/revoke管理的权限完全被Sentry接管,grant/revoke的执行也完全在Sentry中实现。对于所有引擎的授权信息也存储在由Sentry设定的统一的数据库中(如下图所示)。这样所有引擎的权限就实现了集中管理。

2.3.2 Sentry-Policy-Engine

  Sentry授权的核心组件。Policy-Engine判定从binding层获取的输入的权限要求与服务提供层已保存的权限描述是否匹配。 

2.3.3 Sentry-Provider

Sentry策略存储和服务将角色和权限以及组合角色的映射可以存储至文件或者数据库中。Sentry-Provider负责从文件或者数据库中读取出原先设定的访问权限。

​ 基于文件的提供者使用的是ini格式的文件保存元数据信息,这个文件可以是一个本地文件或者HDFS文件 。 基于文件的方式不易于使用程序修改,在修改过程中会存在资源竞争,不利于维护 。
在这里插入图片描述
基于数据库提供者使用的是一个关系数据库并提供编程的API接口方便创建、查询、更新和删除。这允许Sentry的客户端并行和安全地获取和修改权限。
在这里插入图片描述
主要通过5张表来做到数据权限认证,这5张表的结构如下:
创建角色表:
在这里插入图片描述
创建用户组(用户)表:
在这里插入图片描述
用户组与角色的映射关系表:
在这里插入图片描述
角色与数据库关联关系表:
在这里插入图片描述
数据库权限定义表:
在这里插入图片描述

2.3.4 Hue-Sentry-Hive集成

Sentry策略引擎通过hook的方式插入到hive中 ,Hook 函数获取查询以读写模式访问的对象列表。
Sentry-Hive- Binding 将此转换为基于SQL权限模型的授权请求 。管理员需要通过Hue协调框架来具体
实现对Hive库,表和字段的权限定义。用户在访问Hive时,Sentry通过Hook函数来对访问请求进行拦
截,通过对SQL的解析,编译,校验和执行完成权限对象的数据库的读写请求等。目前Sentry只支持对
Hive的jdbc请求做权限拦截。
在这里插入图片描述

2.3.5 Sentry UI展示

1:库名;2:表名;3:具体权限控制信息。
​ 下图具体表示的含义信息为:hive用户对db_test01库下的t_user_test01表有查询权限;sentry_test02用户对db_test01库下的t_user_test01表下的user_name,user_code和company_code有查询权限;
在这里插入图片描述