文 | 谢海红
Apache Ranger是一个支持、监控和管理整个Hadoop集群数据安全的框架,它的愿景是在Apache Hadoop生态系统中提供全面的安全性。随着Apache YARN的出现,Hadoop平台现在可以支持一个真正的数据湖体系结构。企业可以在多租户环境中运行多个工作负载,因此, Hadoop中的数据安全性需要发展。
Apache Ranger总体架构
Ranger的总体架构如下图所示,主要由三个部分构成:
AdminServer:提供REST接口来对服务、策略、用户信息等进行增删改查,同时内置了一个Web界面进行管理。
AgentPlugin:嵌入到各个Hadoop组件中,定期从AdminServer拉取策略,根据策略执行访问决策树,并且定期记录访问审计。
UserSync:定期从LDAP/File等中加载用户,上报给AdminServer,实现用户同步功能。

Apache Ranger支持组件及版本
Ranger支持的服务有HDFS、HBase、Hive、YARM、Strom、Kafka、Knox、Solr、Nifi等,但要注意各个组件的版本,官网提供的版本如下:

Apache Ranger权限模型
访问权限即定义”用户-资源-权限“这三者间的关系,Ranger基于策略来抽象这种关系,进而延伸出自己的权限模型。为了便于理解,我简化了模型,用以下表达式来描述它:
Policy = Service + List<Resource>+ AllowACL + DenyACL
AllowACL =List<AccessItem> allow + List<AccssItem> allowException
DenyACL =List<AccessItem> deny + List<AccssItem> denyException
AccessItem =List<User/Group> + List<AccessType>
接下来从”用户-资源-权限”的角度来详解上述表达:
用户:由User或Group来表达;User代表访问资源的用户,Group代表用户所属的用户组。
资源:由(Service,Policy)二元组来表达;一条Policy唯一对应一个Service,但一个Service可以创建对应多个Policy。
权限:由(AllowACL,DenyACL)二元组来表达,用户在AllowACL中表示允许执行,而DenyACL中表示拒绝执行。
下表列出了几种常见系统的模型实体枚举值:
举个例子,现在一条Policy有(allow,allowException, deny, denyException)这么四组AccessItem,那么判断用户最终权限的决策过程是怎样的? 总体来说,这四组AccessItem的作用优先级由高到低依次是: denyException > deny > allowException > allow 用户访问决策树可以用以下流程图来描述:
Apache Ranger系统插件 定期从AdminServer拉取策略 根据策略执行访问决策树 定期记录访问审计 以上执行逻辑是通用的,可由所有系统插件引用,因此剩下的问题是如何把这些逻辑嵌入到各个系统的访问决策流程中去。目前Ranger里有两种做
前文已经提到,系统插件主要负责三件事: