大数据权限管理利器 - Ranger

1. 介绍

Ranger是HDP体系统中安全管理的重要一环。它提供了具体资源(如HBase中的具体表)权限管控、访问监控、数据加密的功能。

2. 组件介绍

2.1 整体说明

Raner是由三个部分组件:Ranger Admin 、Ranger Usersync 与Ranger plugin,它们关系如下:
大数据权限管理利器 - Ranger_第1张图片

在Ranger的官网中有对于这三个组件的说明

组件名称 说明
Admin Ranger Admin Portal是安全管理的中心接口。 用户可以创建和更新策略,这些策略存储在策略数据库中。 每个组件内的Plugins会定期轮询这些策略。Portal还包括一个审计服务器,它发送从插件收集的审计数据,以便存储在HDFS或关系数据库中
UserSync 同步实用工具来从Unix或LDAP或Active Directory中拉取用户和组。 用户或组信息存储在Ranger门户中,用于策略定义。
PlugIn 插件是嵌入每个集群组件进程的轻量级Java程序。 例如,Apache Hive的Apache Ranger插件嵌入在Hiveserver2中。 这些插件从中央服务器提取策略,并将它们本地存储在一个文件中。 当用户请求通过组件时,这些插件拦截请求并根据安全策略进行评估。 插件还可以从用户请求中收集数据,并按照单独的线程将此数据发送回审计服务器

需要说明的是这三者是独立的。后面会有详细的说明

2.2 Ranger Admin

Ranger admin它包含三个部分: Web页面、Rest消息处理服务以及数据库。 我们可以把它看成一个用来数据集中存储中心(所有的数据都集中存在这里,但是其它两个组件也可单独运行存在)。它的具体作用:
1. 接收UserSync进程传过来的用户、组信息。 并将它们保存到MySql数据库中。 需要注意:这些用户信息在配置权限策略的时候需要使用。这个很容易理解,就象领物料的时候,管理员需要登记物料的领用人,如果不是本公司的人,肯定就不会让你领了。
2. 提供创建policy策略的接口
3. 提供外部REST消息的处理接口

2.3 UserSync

UserSync是Ranger提供的一个用户信息同步接口,可以用来同步Linux用户信息与LDAP用户信息。通过配置项:
SYNC_SOURCE = LDAP/Unix
来确认是LDAP还是Unix, 默认情况是同步Unix信息。 对于UserSync有三点需要说明:
1. 这个同步是单向的。
就是说它只管从Unix上面的本地用户信息读取出来,然后上传到Ranger Admin上面。在其代码中也可以看到

    @Override
    public void updateSink(UserGroupSink sink) throws Throwable {
        isUpdateSinkSucc = true;
        buildUserGroupInfo();  // 此处user、group读取信息

        for (Map.Entry<String, List<String>> entry : user2GroupListMap.entrySet()) {
            String       user   = entry.getKey();
            List<String> groups = entry.getValue();

            try{
                sink.addOrUpdateUser(user, groups);  //此处往ranger admin发送消息
            }catch (Throwable t) {
                LOG.error("sink.addOrUpdateUser failed with exception: " + t.getMessage()
                + ", for user: " + user
                + ", groups: " + groups);
                isUpdateSinkSucc = false;
            }
        }
    }

2.UserSync不是实时同步的
如果用户新创建一个用户,但是这个用户无法立即同步到Ranger中,对于这一点,咨询Ranger社区,他们的回复:

Regarding, Is there another way to sync user info automatically?
Ranger-Usersync process syncs the added users in particular time interval which is in minutes; By default it is set to 5 minutes.The property name is “SYNC_INTERVAL”. So it will sync newly added user after that interval or you have restart ranger-usersync.
You can update this value in install.properties file and run the setup.sh script to update the value in the Usersync process, after this you will have to restart ranger-usersync process.

但是从我测试结果来看并不是太理想。因为我们系统要求用户创建后,能够马上在Ranger 上面创建策略。最终我们的解决的方案是:不使用UserSync这个进程,将Ranger中的同步代码抽取出来。利用这样来做到数据同步

<dependency>
            <groupId>org.apache.rangergroupId>
            <artifactId>unixusersyncartifactId>
            <version>0.7.0version>
        dependency>

3.不支持删除用户
Ranger暂时不支持通过同步或者代码的方式直接删除用户(Ranger 版本0.70)。社区里给出的解决方案:

To delete the user from Ranger database, you will have to delete the user from Ranger UI manually, as the Ranger-Usersync process will only add users to Ranger Database.

2.3 Plugin

因为我只读过Hdfs的插件代码,这里也是以HDFS的插件代码进行说明。

2.3.1 Ranger Plugin的工作流程

  1. NameNode启动时候,会创建一个Hdfs Plugin线程, 这个线程启动后就会读取配置信息
[root@ysbdh03 conf]# cat ranger-hdfs-security.xml 
  

    
      ranger.plugin.hdfs.policy.cache.dir
      /etc/ranger/clustersz_hadoop/policycache
    
    ... ... 
 

在这个目录中存储的就是相应的策略文件,如果这个配置文件不存,则会往Ranger admin发送消息,同步policy信息。同步过来之后,以文件方式持外化。:
大数据权限管理利器 - Ranger_第2张图片
这里还需要说明的一点的就是这个文件的名称。在上图中文件名称为hdfs_clustersz_hadoop, 这包含两个部分,其中hdfs对应的hdfs组件,而clustersz_hadoop就对应的Ranger中的Server,见图示:
大数据权限管理利器 - Ranger_第3张图片

2.同步完成后,hdfs plugin线程会每隔一段时间(30s)会往ranger admin发送一次消息,同步一次policy信息

2.3.2 HDFS Plugin的权限控制原理

1.anger的plugin会从ranger admin那里同步策略信息,并以.json的格式保存。
2.校验的时候,namenode会调用checkPermission()函数,一般是两部:
大数据权限管理利器 - Ranger_第4张图片
其具体过程如下:
1. 首先用这个用户去查找一下用户所属的组。
2. 拿到用户(kerberos的用户,包含组)信息以及需要读取(或者写入)的文件夹信息,去查看一下这个用户信息在策略文件有没有定义,如果没有给定策略信息,如果已经明确定义了,就直接返回;
3. 如果这个用户对于需要操作的文件没有定义信息上,此时,就会再调用hdfs原生的,就是我们常见的 xxx – xxx —xxx 即是否与文件在同一个组,是否有权限。
一般来说hdfs默认创建的文件权限都是类似于:
drwxr-xr-x - hdfs supergroup 0 2017-07-14 00:32 /test
即都会有读取权限,如果在创建文件夹(文件)的时候,不作修改,那么对于所有的用户都是读取权限。
如果这个校验通过了,也是返回,否则就直接抛出异常,说明没有权限.

3. 其它

3.1 Kerberos与Ranger

Kerberos与Ranger都是Hadoop安全体系中的两个部分,但是它们分工是不同的。在刚接触大数据安全的时候,我一直都不明白为啥需要两个不同组件来进行权限控制,很长一段时间之后,才会明白。联系我们每天上班然后坐到办公室的过程可能就会比较清楚
大数据权限管理利器 - Ranger_第5张图片
某个人员进入公司之前,保安需要检查它是否有工卡,如果没有工卡,保安GG就会认为你不是公司员工,而不允许你进入到公司园区。 当你进入公司园区之后,这个时候你想到某个仓库去看一下,仓库大门就会检查一下你有没有门禁,有门禁才会让你进入到仓库中。
我们可以把公司园区类比成大数据集群平台,工卡就要相当于你的Kerberos权限认证,而仓库就对应着具体的hdfs文件路径。

3.2 Ranger的数据加密

Ranger 的数据加密对应着Hadoop KMS,如果用户想直接使用Hadoop KMS也是可以的。下面说一下Ranger KMS的简单流程(以HDP集成安装的Ranger为例)

3.2.1 Ranger加密的过程

  1. 安装好ranger之后,打开ranger admin的UI连接
    大数据权限管理利器 - Ranger_第6张图片
    以用户名为keyamin(密码也是keyadmin)进入
    大数据权限管理利器 - Ranger_第7张图片

  2. 进入界面后,首先创建一个加密策略。其过程如下:
    首先选择”Encryption” –> “key Manager”
    大数据权限管理利器 - Ranger_第8张图片

  3. 进入如下页面,选择相应的Service, 然后点击”Add Policy”
    大数据权限管理利器 - Ranger_第9张图片

  4. 在弹出的配置项中进行配置:
    大数据权限管理利器 - Ranger_第10张图片
    填好之后,点击”save”保存,对应的密码策略就配置完成了。
    下面就开始配置密码策略对应的用户了。

  5. 配置方式与ranger 的hdfs策略配置相似, 即回到如下的界面,然后选择相应的service,进入之后,增加相应的用户。
    大数据权限管理利器 - Ranger_第11张图片

Hadoop侧的配置就与Hadoop KMS相同了。

3.2 审计

权限管理是Ranger的主体功能,Ranger的审计,我有点感觉象是一个半买半送的东西。
审计主要是日志审计,主要记录各个组件资料的访问信息,也就是从各个组件日志中抽到相应的登录访问信息,但是这一块没有LogSearch强(HDP另一个日志组件)。当然如果用户只需要知道一些简单的访问信息,也不想上LogSearch,用这个也是可以的。

你可能感兴趣的:(Ranger)