Apache Ranger:统一授权管理框架

by 伊布

May 12, 2016
in Tech
  • 1、功能

    • 支持组件
    • 用户/组管理
    • 授权
    • 审计
  • 2、机制
    • 组件plugin

前一篇文章介绍了hive的授权模型和spark支持hive的现状,可以看到目前授权管理各自为政:HDFS,hive,yarn,storm等都有自己的授权模型,需要到具体产品下进行修改,比较分散,不利于统一管理,需要有一个集中控制的工具(更准确的应该叫做框架)

目前已有的统一授权管理的开源框架为Ranger和Sentry。前者由hortonworks主推,从目前的情况来看其功能更为全面(例如可以支持hive的列级授权,支持审计Audit);后者由Cloudera开发,可能更有后劲。另外Cloudera在酝酿一个安全平台。

其他还有knox安全网关这种剑走偏锋的工具,简要说明可以参见五种安全工具对比。 这里简要介绍下Ranger的功能,以及其大致机制。

1、功能

我用的是Hortonworks的sandbox,略过了ranger的安装部署过程(具体部署可以参考这篇文章,后面有时间还是再做一次部署)。

先介绍几个概念:

  • user: Ranger自己管理的用户,分为internal和external,前者为Ranger自己的用户,例如admin;后者为linux或者LDAP的用户,在操作系统/LDAP里新增用户后会同步到Ranger。
  • group: Ranger自己管理的用户组,也有内外之分,与user类似,设置与LDAP同步后会将LDAP的组同步过来,该组为外部组;如果是Ranger自己的用户新增的组,则为internal组。
  • Service: 即授权管理服务,每个组件可以设置多个Service。
  • Policy: 每个Service中可以有多条Policy,组件不同,Policy授权模型不同

支持组件

已经支持的有HDFS/HBASE/HIVE/YARN/KNOX/STORM/SOLR/KAFKA。有的资料上说Ranger后面会支持spark,比较好奇最终会怎么实现。

用户/组管理

Ranger的用户/组的设计跟linux基本一致。Ranger可以把操作系统新增的用户同步到Ranger内。Ranger支持Role,但没有看到完善的RBAC的功能,只有Admin/User两个角色。用户可以属于多个组,但是一旦新建后就不能修改还是挺不好用的。

授权

以Hive为例。

1、编辑Service的属性

也可以删掉新建。默认沙箱里只给ambari-qa授权,不过我这里之前给hive做过授权,所以填了hive。需要保证Hive Service可用。

2、编辑Policy

Ranger支持的权限比较细,授权对象可以是DB、表、列、UDF,权限类型包括select/update/create/drop/alter/index等等。 可以选择对某一用户授权,也可以对某一用户组授权。我这里给hive授予了一个表的所有权限。

3、验证

在beeline中使用hive连上hive服务,验证其权限,略。

注意,不经过Ranger,用户A直接连接到hive上向用户B授权,也是可以的;插件会将该配置向上同步给Ranger,因此最终也可以生效。

Hive跟HDFS不一样。HDFS可以设置二级认证,先Ranger如果失败再走一次HDFS,Hive应该只走Ranger。

下面是最终的Policy,第三条即为向上同步的grant(grant select on xademo.table1 to user xxx;)。

审计

Ranger提供4个方面的审计:

  • Access:记录各个服务的接入信息
  • Admin:记录Ranger的管理信息,例如新建了service,新建了用户等
  • Login Sessions:记录用户登录Ranger的信息,例如用户如果包里破解ranger web UI的登录密码会留下记录
  • Plugins:记录各个Plugin的同步信息

Ranger不提供认证的功能,需要搭配Kerbose。

2、机制

分为如下几部分:

  • ranger-admin:提供web server以及Ranger管理
  • ranger-usersync:与linux或LDAT同步用户。注意这个过程有个时间差,最快1分钟。
  • ranger-xxx-plugin为针对各组件的插件。

组件plugin

Ranger会将各个组件的plugin编译成jar包,并将jar包配置文件拷贝到对应的组件。以hdfs为例,插件enable的时候,会将rangerplugin.jar拷贝的hadoop的lib中,将ranger*.xml拷贝到./etc/hadoop/中,并修改hdfs-site.xml,增加授权provider:

    <property><name>dfs.namenode.inode.attributes.provider.class</name><value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value></property>

RangerHdfsAuthorizer即为权限检查的类,作为一个钩子,可以截取权限请求以做鉴权。不同的组件,使用对应组件的鉴权模型。

官方的自定义plugin的编码指南在这里,其中最关键的是定义鉴权模型,例如hive的这个:

{"id":3,"name": "hive","implClass": "org.apache.ranger.services.hive.RangerServiceHive","label": "Hive Server2","description": "Hive Server2","guid": "3e1afb5a-184a-4e82-9d9c-87a5cacc243c","resources":[{"itemId": 1,"name": "database","type": "string",
..."matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher","matcherOptions": { "wildCard":true, "ignoreCase":true },
...},{"itemId": 2,"name": "table","type": "string","level": 20,"parent": "database",
...},{"itemId": 3,"name": "udf","type": "string","level": 20,"parent": "database",
...},{"itemId": 4,"name": "column","type": "string","level": 30,"parent": "table",
...}],"accessTypes":[{"itemId": 1,"name": "select","label": "select"},{"itemId": 2,"name": "update","label": "update"},{"itemId": 3,"name": "create","label": "Create"},
...{"itemId": 8,"name": "all","label": "All","impliedGrants":["select","update","create","drop","alter","index","lock"]}],"configs":[{"itemId": 1,"name": "username","type": "string",
...},{"itemId": 2,"name": "password","type": "password",
...},{"itemId": 3,"name": "jdbc.driverClassName",
..."defaultValue": "org.apache.hive.jdbc.HiveDriver"},{"itemId": 4,"name": "jdbc.url","type": "string",
...}
}

各个组件的定义方式基本是按照资源、访问类型、配置等几个方面来定义的,hive的相对复杂,像hdfs就比较简单,只有1个资源(路径),3种访问类型(rwx)。从0.5开始Ranger支持stack-model,只要按照这个套路来定义自定义插件鉴权,就可以做到不需要修改Ranger自己的代码。官方以YARN为例做了编码说明,还是比较清晰的,就不费事翻译了,对照源码走读下还比较容易懂。 我的障碍是不管yarn还是hdfs看到鉴权最后都只有这个:

public class RangerYarnAuthorizer extends YarnAuthorizationProvider {..@Overridepublic boolean checkPermission(AccessType accessType, PrivilegedEntity entity, UserGroupInformation ugi) {RangerYarnPlugin       plugin       = yarnPlugin;RangerAccessResult     result       = null;if(plugin != null) {..result = plugin.isAccessAllowed(request, auditHandler);}

而plugin是基于RangerBasePlugin的,isAccessAllowed也是父类的方法,怎么做到不同的组件用同一个方法的呢?其实,对于Ranger来说它看到的只有资源和访问请求,最多资源有层级关系,访问请求有交并,完全可以忽略实际的组件抽象出来一个统一的鉴权方式的。核心实现应该比较有趣,有机会应该仔细拜读一下。

当然了,最关键的是组件要有一套自定义鉴权的机制,目前spark sql的鉴权也许只能从hdfs和yarn来做数据隔离和资源隔离了(求打脸)。

参考资料: Ranger官方

Related posts

  • Spark(十):Hive on Spark配置
  • Kerberos从入门到放弃(一):HDFS使用kerberos
  • 为ndsl换触摸屏
  • Zeppelin配置spark interpreter on yarn
  • Kerberos从入门到放弃(二):YARN、Spark、Hive使用kerberos

Tags: ranger


上一篇:Spark(八):多租户隔离下一篇:Spark(七):Hive的授权

Subscribe via RSS

Apache Ranger:统一授权管理框架相关推荐

  1. 使用Apache Ranger提供授权 -- 02

    文章目录 基于资源的服务和策略 配置资源的服务 配置一个基于资源的服务:HBase 配置一个基于资源的服务:HDFS 配置一个基于资源的服务:Hive 配置一个基于资源的服务:Kafka 配置一个基于 ...

  2. Apache Ranger、业务背景、现状与需求、大数据安全组件介绍与对别、系统架构及实践、ranger admin、UserSync、plugin、权限模型、权限实现等

    26.2.1业务背景 26.2.1.1现状&&需求 26.2.2大数据安全组件介绍与对比 26.2.2.2 Apache Sentry 26.2.2.3 Apache Ranger 2 ...

  3. 【转载】Apache Ranger剖析:Hadoop生态圈的安全管家

    前言 2016年,Hadoop迎来了自己十周岁生日.过去的十年,Hadoop雄霸武林盟主之位,号令天下,引领大数据技术生态不断发展壮大,一时间百家争鸣,百花齐放.然而,兄弟多了不好管,为了抢占企业级市 ...

  4. Apache ranger 简介、原理、安装部署

    一.Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计.它可以对Hadoop生态的组件如HDFS.Yarn.Hive.Hbase等进行细粒度的数据访问控制.通过 ...

  5. Apache Ranger原理与应用实践

    文章目录 一.业务背景 现状&&需求 二.大数据安全组件介绍与对比 1.Kerberos 2.Apache Sentry 3.Apache Ranger 4.为什么我们选择Ranger ...

  6. Apache Ranger初识

    1.Apache ranger简介 Apache ranger是一个Hadoop集群权限框架,提供操作.监控.管理复杂的数据权限,它提供一个集中的管理机制,管理基于yarn的Hadoop生态圈的所有数 ...

  7. Apache Ranger源码编译及使用

    Ranger源码编译.使用手册 1 Ranger简介 Apache Ranger提供一个集中式安全管理框架,它可以对Hadoop生态的组件如Hive,Hbase进行细粒度的数据访问控制.通过操作Ran ...

  8. Apache Ranger插件的美丽简洁

    如果您在这里,您已经知道什么是Apache Ranger . 它是管理Hadoop框架中安全性的最流行(即使不是唯一)的方法. 它与Active Directory,Kerberos和其他各种身份验证 ...

  9. Apache Ranger——Hadoop ACL控制工具

    本文主要通过ranger在hdfs acl中的应用以及原理介绍一下ranger的使用,另外介绍一下实际使用过程中碰到的问题. 上篇文章回顾:时间服务器-NTP 目前公司内部大多通过数据工场来管理hdf ...

  10. Apache Ranger 是什么?

    前言 本文隶属于专栏<大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 WHAT Apache Ra ...

最新文章

  1. boost::hana::scan_right用法的测试程序
  2. html的文档类型三种,XHTML文档类型
  3. Java Web之filter、listener、Interceptor
  4. java 9 module_Java 9:欢迎来到Module World
  5. 看新闻的时间用的太多了
  6. th:text为null报错_为什么建议你用nullptr而不是NULL?
  7. 二十五、JAVA多线程(五、线程生命周期)
  8. python数据库操作批量sql执行_python 批量远程执行SQL SERVER 脚本
  9. java 动态修改prooper_java中OOP自己总结的知识点
  10. oracle应付模块中的ov,oracle常用dba命令和知识下
  11. 计算机网络tcp/ip协议,UDP,HTTP/HTTPS基础知识
  12. 刘汝佳第二章习题(前四)
  13. mysql规格单位转化_存储单位的换算(KB, MB, GB)
  14. python计算平均数、众数、中位数、极差、方差、标准差……
  15. 下载哔哩哔哩网页上的视频
  16. 车载BlueTooth通话机制原理及开发
  17. linux服务器开机提示f1,Dell的Linux服务器开机按F1解决方法
  18. 《ERP高级计划》书的解读- APS算法分析之四约束规划CP(蔡颖)(转)
  19. .NET AutoCAD二次开发之路(二、直线篇)
  20. 无人驾驶技术架构、方向及技能要求

热门文章

  1. 隐马尔科夫模型HMM自学
  2. c++坦克大战小游戏
  3. 钝    生_拔剑-浆糊的传说_新浪博客
  4. js initialize
  5. 第四十九篇: JAVA加密解密之凯撒加密(Caesar cipher)算法
  6. Java+MySQL实现网络爬虫程序
  7. 月薪11970元的网络运维工程师需要掌握哪些必备技能?
  8. 自然语言处理3 -- 词性标注
  9. 关于SharePoint中文翻译的吐槽
  10. 用Python做数据分析之数据统计