Hadoop集群权限框架-Apache Ranger


Apache ranger是一个Hadoop集群权限框架,提供操作、监控、管理复杂的数据权限,它提供一个集中的管理机制,管理基于yarn的Hadoop生态圈的所有数据权限。由Hortonworks公司发布的一个Hadoop开源安全组件。

Apache Ranger delivers a comprehensive approach to security for a Hadoop cluster. It provides a centralized platform to define, administer and manage security policies consistently across Hadoop components.

特点:
提供了细粒度级(hive列级别)
基于访问策略的权限模型
权限控制插件式,统一方便的策略管理
支持审计日志,可以记录各种操作的审计日志,提供统一的查询接口和界面
支持和kerberos的集成
提供了Rest接口供二次开发
多组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM)
支持审计日志,可以很好的查找到用户在机器上提交的任务明细,方便问题排查反馈
拥有自己的用户体系,可以去除kerberos用户体系,方便和其他系统集成,同时提供各类接口可以调用
Apache Ranger提供集中式的权限管理框架,可以对Hadoop生态中的HDFS、Hive、YARN、Kafka、Storm和Solr等组件进行细粒度的权限访问控制,并且提供了Web UI方便管理员操作。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问HDFS文件夹、HDFS文件、数据库、表、字段权限。这些策略可以为不同的用户和组来设置,同时权限可与hadoop无缝对接。

支持组件:
Apache Ranger 支持以下HDP组件的验证、授权、审计、数据加密、安全管理:
Apache Hadoop HDFS
Apache HBase
Apache Storm
Apache Kafka
Apache Knox
Apache Hive
Apache Solr
YARN
Apache Ranger系统架构及实践
1、架构介绍

2、组件介绍
Ranger主要由三个组件组成:
Ranger Admin
可以创建和更新安全访问策略,这些策略被存储在数据库中。各个组件的Plugin定期对这些策略进行轮询。以RESTFUL形式提供策略的增删改查接口,同时内置一个Web管理页面。
Ranger Plugins
Plugin嵌入在各个集群组件的进程里,是一个轻量级的Java程序。例如,Ranger对Hive的组件,就被嵌入在Hiveserver2里。这些Plugin定期从Ranger Admin服务端拉取策略,并把它们存储在本地文件中。当接收到来自组件的用户请求时,对应组件的Plugin会拦截该请求,并根据安全策略对其进行评估。
Ranger UserSync(SDK)
Ranger提供了一个用户同步工具。可以从Unix或者LDAP中拉取用户和用户组的信息,这些用户和用户组的信息被存储在Ranger Admin的数据库中,可以在定义策略时使用。对接开放平台,实现对用户、组、策略的管理。
3、权限模型
访问权限无非是定义了“用户-资源-权限”这三者间的关系,Ranger基于策略来抽象这种关系,进而延伸出自己的权限模型。”用户-资源-权限”的含义详解:
用户
由User或Group来表达,User代表访问资源的用户,Group代表用户所属的用户组。
资源
不同的组件对应的业务资源是不一样的,比如
HDFS的FilePath
HBase的Table,Column-family,Column
Hive的Database,Table,Column
Yarn的对应的是Queue
权限
由(AllowACL, DenyACL)来表达,类似白名单和黑名单机制,AllowACL用来描述允许访问的情况,DenyACL用来描述拒绝访问的情况,不同的组件对应的权限也是不一样的。
4、权限实现
Ranger-Admin职责:管理员对于各服务策略进行规划,分配相应的资源给相应的用户或组,存储在db中
Service Plugin职责:
定期从RangerAdmin拉取策略
根据策略执行访问决策树
实时记录访问审计
策略执行过程:

策略优先级:
黑名单优先级高于白名单
黑名单排除优先级高于黑名单
白名单排除优先级高于白名单
决策下放:
如果没有policy能决策访问,一般情况是认为没有权限拒绝访问,然而Ranger还可以选择将决策下放给系统自身的访问控制层
组件集成插件原理:
ranger通过实现各组件扩展的权限接口,进行权限验证
Hdfs实现原理
hdfs-site.xml会修改如下配置:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.inode.attributes.provider.class</name>
<value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
</property>
加载过程:

Hbase实现原理
在安装完hbase插件后,hbase-site.xml会修改如下配置:
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>
加载过程:

Hive实现原理
hiveserver2-site.xml
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
</property>
加载过程:

Yarn实现原理
yarn-site.xml
<property>
<name>yarn.acl.enable</name>
<value>true</value>
</property>
<property>
<name>yarn.authorization-provider</name>
<value>org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer</value>
</property>
加载过程:

Ranger实践
组权限实现
由于在调用各服务过程中使用hdfs shell、hbase-shell、hive-jdbc只能获取到用户信息,在只有组策略时会匹配不成功,认为没有权限,实现办法是加入ldap组件同步用户组信息,这样增加了系统的复杂性,我们通过改写ranger-admin代码,在客户端plugin获取策略时,将组权限赋予用户,这样就实现了组策略功能。
最新版本:2.1
项目主页:
https://ranger.apache.org
https://www.cloudera.com/products/open-source/apache-hadoop/apache-ranger.html

Apache Ranger delivers a comprehensive approach to security for a Hadoop cluster. It provides a centralized platform to define, administer and manage security policies consistently across Hadoop components.

特点:
提供了细粒度级(hive列级别)
基于访问策略的权限模型
权限控制插件式,统一方便的策略管理
支持审计日志,可以记录各种操作的审计日志,提供统一的查询接口和界面
支持和kerberos的集成
提供了Rest接口供二次开发
多组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM)
支持审计日志,可以很好的查找到用户在机器上提交的任务明细,方便问题排查反馈
拥有自己的用户体系,可以去除kerberos用户体系,方便和其他系统集成,同时提供各类接口可以调用
Apache Ranger提供集中式的权限管理框架,可以对Hadoop生态中的HDFS、Hive、YARN、Kafka、Storm和Solr等组件进行细粒度的权限访问控制,并且提供了Web UI方便管理员操作。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问HDFS文件夹、HDFS文件、数据库、表、字段权限。这些策略可以为不同的用户和组来设置,同时权限可与hadoop无缝对接。

支持组件:
Apache Ranger 支持以下HDP组件的验证、授权、审计、数据加密、安全管理:
Apache Hadoop HDFS
Apache HBase
Apache Storm
Apache Kafka
Apache Knox
Apache Hive
Apache Solr
YARN
Apache Ranger系统架构及实践
1、架构介绍

2、组件介绍
Ranger主要由三个组件组成:
Ranger Admin
可以创建和更新安全访问策略,这些策略被存储在数据库中。各个组件的Plugin定期对这些策略进行轮询。以RESTFUL形式提供策略的增删改查接口,同时内置一个Web管理页面。
Ranger Plugins
Plugin嵌入在各个集群组件的进程里,是一个轻量级的Java程序。例如,Ranger对Hive的组件,就被嵌入在Hiveserver2里。这些Plugin定期从Ranger Admin服务端拉取策略,并把它们存储在本地文件中。当接收到来自组件的用户请求时,对应组件的Plugin会拦截该请求,并根据安全策略对其进行评估。
插件名称 | 安装节点 |
---|---|
Hdfs-Plugin | NameNode |
Hbase-Plugin | HMaster+HRegionServer |
Hive-Plugin | HiveServer2 |
Yarn-Plugin | ResourceManager |
Ranger UserSync(SDK)
Ranger提供了一个用户同步工具。可以从Unix或者LDAP中拉取用户和用户组的信息,这些用户和用户组的信息被存储在Ranger Admin的数据库中,可以在定义策略时使用。对接开放平台,实现对用户、组、策略的管理。
3、权限模型
访问权限无非是定义了“用户-资源-权限”这三者间的关系,Ranger基于策略来抽象这种关系,进而延伸出自己的权限模型。”用户-资源-权限”的含义详解:
用户
由User或Group来表达,User代表访问资源的用户,Group代表用户所属的用户组。
资源
不同的组件对应的业务资源是不一样的,比如
HDFS的FilePath
HBase的Table,Column-family,Column
Hive的Database,Table,Column
Yarn的对应的是Queue
权限
由(AllowACL, DenyACL)来表达,类似白名单和黑名单机制,AllowACL用来描述允许访问的情况,DenyACL用来描述拒绝访问的情况,不同的组件对应的权限也是不一样的。
插件 | 权限项 |
---|---|
Hdfs | Read Write Execute |
Hbase | Read Write Create Admin |
Hive | Select Create Update Drop Alter Index Lock Read Write All |
Yarn | submit-app admin-queue |
4、权限实现
Ranger-Admin职责:管理员对于各服务策略进行规划,分配相应的资源给相应的用户或组,存储在db中
Service Plugin职责:
定期从RangerAdmin拉取策略
根据策略执行访问决策树
实时记录访问审计
策略执行过程:

策略优先级:
黑名单优先级高于白名单
黑名单排除优先级高于黑名单
白名单排除优先级高于白名单
决策下放:
如果没有policy能决策访问,一般情况是认为没有权限拒绝访问,然而Ranger还可以选择将决策下放给系统自身的访问控制层
组件集成插件原理:
Service | Extensible Interface | Ranger Implement Class |
---|---|---|
HDFS | org.apache.hadoop.hdfs.server.namenode.INodeAttributeProvider | org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer |
HBASE | org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.Interface | org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor |
Hive | org.apache.hadoop.hive.ql.security.authorization.plugin.HiveAuthorizerFactory | org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory |
YARN | org.apache.hadoop.yarn.security.YarnAuthorizationProvider | org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer |
ranger通过实现各组件扩展的权限接口,进行权限验证
Hdfs实现原理
hdfs-site.xml会修改如下配置:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.inode.attributes.provider.class</name>
<value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
</property>
加载过程:

Hbase实现原理
在安装完hbase插件后,hbase-site.xml会修改如下配置:
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>
加载过程:

Hive实现原理
hiveserver2-site.xml
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
</property>
加载过程:

Yarn实现原理
yarn-site.xml
<property>
<name>yarn.acl.enable</name>
<value>true</value>
</property>
<property>
<name>yarn.authorization-provider</name>
<value>org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer</value>
</property>
加载过程:

Ranger实践
组权限实现
由于在调用各服务过程中使用hdfs shell、hbase-shell、hive-jdbc只能获取到用户信息,在只有组策略时会匹配不成功,认为没有权限,实现办法是加入ldap组件同步用户组信息,这样增加了系统的复杂性,我们通过改写ranger-admin代码,在客户端plugin获取策略时,将组权限赋予用户,这样就实现了组策略功能。
最新版本:2.1
项目主页:
https://ranger.apache.org
https://www.cloudera.com/products/open-source/apache-hadoop/apache-ranger.html