zoukankan      html  css  js  c++  java
  • (转载)ranger原理

    一、业务背景

    大数据集群最基本的就是数据以及用于计算的资源,是一个公司的宝贵财富,我们需要将它们很好管理起来,将相应的数据和资源开放给对应的用户使用,防止被窃取、被破坏等,这就涉及到大数据安全。

    现状&&需求

    目前我们大数据集群的现状是处于裸奔状态,只要可以登录linux机器即可对集群继续相关操作

    所以集群安全对于我们来说迫在眉睫,主要需求有以下几个方面:

    • 支持多组件,最好能支持当前公司技术栈的主要组件,HDFS、HBASE、HIVE、YARN、STORM、KAFKA等
    • 支持细粒度的权限控制,可以达到HIVE列,HDFS目录,HBASE列,YARN队列,STORM拓扑,KAKFA的TOPIC
    • 开源,社区活跃,按照现有的集群改情况造改动尽可能的小,而且要符合业界的趋势。

    二、大数据安全组件介绍与对比

    目前比较常见的安全方案主要有三种:

    • Kerberos(业界比较常用的方案)
    • Apache Sentry(Cloudera选用的方案,cdh版本中集成)
    • Apache Ranger(Hortonworks选用的方案,hdp发行版中集成)

    1、Kerberos

    Kerberos是一种基于对称密钥的身份认证协议,它作为一个独立的第三方的身份认证服务,可以为其它服务提供身份认证功能,且支持SSO(即客户端身份认证后,可以访问多个服务如HBase/HDFS等)。

    图1

    服务名 作用
    KDC Kerberos的服务端程序,用于验证各个模块
    Client 需要访问服务的用户,KDC和Service会对用户的身份进行认证
    Service 即集成了Kerberos的服务,如HDFS/YARN/HBase等

    Kerberos协议过程主要有三个阶段,第一个阶段Client向KDC申请TGT,第二阶段Client通过获得的TGT向KDC申请用于访问Service的Ticket,第三个阶段是Client用返回的Ticket访问Service。

    优点:

    • 服务认证,防止broker datanode regionserver等组件冒充加入集群

    • 解决了服务端到服务端的认证,也解决了客户端到服务端的认证

    缺点:

    • kerberos为了安全性使用临时ticket,认证信息会失效,用户多的情况下重新认证繁琐

    • kerberos只能控制你访问或者拒绝访问一个服务,不能控制到很细的粒度,比如hdfs的某一个路径,hive的某一个表,对用户级别上的认证并没有实现(需要配合LDAP)

    2、Apache Sentry

    Apache Sentry是Cloudera公司发布的一个Hadoop安全开源组件,它提供了细粒度级、基于角色的授权.

    图2

    优点:

    • Sentry支持细粒度的hdfs元数据访问控制,对hive支持列级别的访问控制

    • Sentry通过基于角色的授权简化了管理,将访问同一数据集的不同特权级别授予多个角色

    • Sentry提供了一个统一平台方便管理

    • Sentry支持集成Kerberos

    缺点:

    • 组件只支持hive,hdfs,impala 不支持hbase,yarn,kafka,storm等

    3、Apache Ranger

    Apache Ranger是Hortonworks公司发布的一个Hadoop安全组件开源组件

    优点:

    • 提供了细粒度级(hive列级别)
    • 基于访问策略的权限模型
    • 权限控制插件式,统一方便的策略管理
    • 支持审计日志,可以记录各种操作的审计日志,提供统一的查询接口和界面
    • 丰富的组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM)
    • 支持和kerberos的集成
    • 提供了Rest接口供二次开发

    4、为什么我们选择Ranger

    • 多组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM),基本覆盖我们现有技术栈的组件
    • 支持审计日志,可以很好的查找到哪个用户在哪台机器上提交的任务明细,方便问题排查反馈
    • 拥有自己的用户体系,可以去除kerberos用户体系,方便和其他系统集成,同时提供各类接口可以调用

    综上:我们考虑到和开放平台的集成,以及我们的技术栈和集群操作的审计等几个问题最终选用了apache ranger

    三、Apache Ranger系统架构及实践

    1、架构介绍

    图3

    2、组件介绍

    • RangerAdmin

    以RESTFUL形式提供策略的增删改查接口,同时内置一个Web管理页面。

    • Service Plugin

    嵌入到各系统执行流程中,定期从RangerAdmin拉取策略,根据策略执行访问决策树,并且记录访问审计

    插件名称 安装节点
    Hdfs-Plugin NameNode
    Hbase-Plugin HMaster+HRegionServer
    Hive-Plugin HiveServer2
    Yarn-Plugin ResourceManager
    • Ranger-SDK

    对接开放平台,实现对用户、组、策略的管理

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    加载过程:

    在这里插入图片描述

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    加载过程:

    在这里插入图片描述

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    加载过程:

    在这里插入图片描述

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    加载过程:

    在这里插入图片描述

    四、Ranger实践

    1、组权限实现

    由于在调用各服务过程中使用hdfs shell、hbase-shell、hive-jdbc只能获取到用户信息,在只有组策略时会匹配不成功,认为没有权限,实现办法是加入ldap组件同步用户组信息,这样增加了系统的复杂性,我们通过改写ranger-admin代码,在客户端plugin获取策略时,将组权限赋予用户,这样就实现了组策略功能。

    原文:https://blog.csdn.net/qq475781638/article/details/90247153#Hive_227

  • 相关阅读:
    HDU 5912 Fraction (模拟)
    CodeForces 722C Destroying Array (并查集)
    CodeForces 722B Verse Pattern (水题)
    CodeForces 722A Broken Clock (水题)
    CodeForces 723D Lakes in Berland (dfs搜索)
    CodeForces 723C Polycarp at the Radio (题意题+暴力)
    CodeForces 723B Text Document Analysis (水题模拟)
    CodeForces 723A The New Year: Meeting Friends (水题)
    hdu 1258
    hdu 2266 dfs+1258
  • 原文地址:https://www.cnblogs.com/yjt1993/p/11837530.html
Copyright © 2011-2022 走看看