Hadoop生态圈-Ranger数据安全管理框架
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Ranger简介
Apache Ranger是一款被设计成全面掌握Hadoop生态系统的数据安全管理框架。它为Hadoop生态系统中众多的组件提供了一个统一的数据授权和管理界面。使得系统管理员只需面对Ranger一个系统,就能对Hadoop整个生态体系进行数据授权,数据管理与审计。详情请参考官网:http://ranger.apache.org/index.html。
Ranger从架构上看主要由三大部分组成:
1>.User sync:
Ranger系统有自己的内部用户,从门户系统的登陆到权限策略的分配都是基于这些内部用户进行的。Ranger是一个统一Hadoop生态系统的安全管理框架,所以它面对的是Hadoop生态的众多组件。而这些组件使用的是服务器上的Linux用户,所以我们需要映射一份linux用户数据成为Ranger的内部用户。用户同步服务就是专门来做这件事情的,Ranger 通过用户同步服务实时的从Linux服务器中同步用户数据。
2>.Admin Portol:
管理员门户是一个Web UI控制台,用户通过它可以创建和更新权限策略。每个组件(如HDFS,HBase等)的插件定期以轮询的方式查询这些策略。门户系统还包括一个审计系统,mooed组件的插件会定期向审计系统发送收集到的操作日志。
3>.Plugins:
Ranger通过插件机制来实现并扩展自己的能力,这些插件本质上一些嵌入在每个集群服务中的轻量级Java程序。例如Apache Hive的Ranger插件就是嵌入在HiveServer2里面。这些插件会拦截请求并进行权检查。同时这些插件还能收集用户的操作日志并发送给管理门户的审计系统。
二.安装Ranger
现在开始安装Ranger组件,我们依旧会借助Ambari来进行安装。
1>.登陆Ambari,通过点击首页左下角的Actions按钮我们会看到新建服务选项,如下图所示:
2>.点击新建服务之后会进入新建服务向导页面。我们勾选Ranger和Ranger KMS这两个服务并点击下一步,如下图所示:
3>.接着我们会看到一条提示信息,要求我们配置Ambari-Server的JDBC驱动信息,如下图所示。因为Ranger需要使用关系型数据库存储一些元数据信息,这里我们选择使用MySQL数据库。将MySQL驱动jar包上传到Ambari-Server所在的服务器,然后执行以下命令。
[root@node101 ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar Using python /usr/bin/python Setup ambari-server Copying /usr/share/java/mysql-connector-java.jar to /var/lib/ambari-server/resources If you are updating existing jdbc driver jar for mysql with mysql-connector-java.jar. Please remove the old driver jar, from all hosts. Restarting services that need the driver, will automatically copy the new jar to the hosts. JDBC driver was successfully initialized. Ambari Server 'setup' completed successfully. [root@node101 ~]#
4>.将3个服务安装在同一台机器上
5>.分配Tagsync,从客户端和客户端组件的分配。
6>.Ranger Admin的配置
[root@node101 ~]# mysql -uroot -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 71 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ambari | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec) mysql> CREATE DATABASE ranger; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON ranger.* TO 'ranger'@'node101.yinzhengjie.org.cn' IDENTIFIED BY 'yinzhengjie' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> select Host,User,Password from mysql.user where user='ranger'; +----------------------------+--------+-------------------------------------------+ | Host | User | Password | +----------------------------+--------+-------------------------------------------+ | node101.yinzhengjie.org.cn | ranger | *BD0B1F48FDC55BD27555FC2F22FF29A68A25A1D7 | +----------------------------+--------+-------------------------------------------+ 1 row in set (0.00 sec) mysql> quit Bye [root@node101 ~]#
[root@node101 ~]# mysql -h node101.yinzhengjie.org.cn -uranger -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 80 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ranger | +--------------------+ 2 rows in set (0.00 sec) mysql> quit Bye [root@node101 ~]#
7>.Ranger的配置
8>.配置RangerKMS
[root@node101 ~]# mysql -uroot -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 84 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> CREATE DATABASE rangerkms; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON rangerkms.* TO 'rangerkms'@'node101.yinzhengjie.org.cn' IDENTIFIED BY 'yinzhengjie' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec) mysql> select Host,User,Password from mysql.user where user='rangerkms'; +----------------------------+-----------+-------------------------------------------+ | Host | User | Password | +----------------------------+-----------+-------------------------------------------+ | node101.yinzhengjie.org.cn | rangerkms | *BD0B1F48FDC55BD27555FC2F22FF29A68A25A1D7 | +----------------------------+-----------+-------------------------------------------+ 1 row in set (0.00 sec) mysql> quit Bye [root@node101 ~]#
[root@node101 ~]# mysql -h node101.yinzhengjie.org.cn -urangerkms -pyinzhengjie Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 85 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | rangerkms | +--------------------+ 2 rows in set (0.00 sec) mysql> quit Bye [root@node101 ~]#
接着往下拉,需要你输入一个密码,如下图所示,输入后点击下一步:
9>.配置完毕后,会弹出一个Dependent Configurations对话框,如下图所示,点击OK即可~
10>.忽略警告(我的电脑内存有限,分配的少点仅仅用于测试)
11>.确认配置无误后,点击Depoly按钮
12>. 安装服务成功
13>.点击完成
14>.安装完成后,需要陆续重启已经部署的服务
三.配置服务
安装完毕之后我们需要配置Ranger以让它能够正常工作,通过点击Configs按钮来到配置界面。如下图所示,Ranger到配置项有很多分为了六大类,他们分别是管理员配置,用户信息配置,插件配置,审计配置,标签同步配置和高级配置。这里我们主要关注插件配置和审计配置,其他配置项保持默认即可。
1>.对Ranger的插件配置
2>.对Ranegr的审计配置
3>.保存配置信息
4>.点击保存
5>.点击Proceed Anyway
6>.点击ok
7>.如下图所示,按照提示重启相应的服务即可
8>.重启相应的服务之后,我们就可以去看看Ranger的Web UI管理控制台啦
四.Ranger功能介绍-查看Ranger用户
1>.如下图所示,通过Ambari的Quick Links功能进入Ranger的管理控制台,输入默认的用户名和密码进行登陆(默认的用户名和密码均为“admin”)。
2>.单击Settings设置按钮进入Ranger用户管理界面
3>.如下图所示,点击Setting之后,在这里可以看到Ranger的所有用户。我们发现Ranger已经预建好来一批用户,这些用户是不是很眼熟呢?他们是Ambari用户管理里面的集群组件用户如出一辙。没错,这些用户就是从Hadoop集群的Linux用户同步过来的。
Ranger将用户分为两类来源,内部用户和外部扩展用户。
内部用户:
是指Ranger自己单方面创建的用户,主要用来做系统内部管理相关工作,与外部用户没有关联。
外部用户:
是指通过同步程序从集群服务中同步而来的用户,是Ranger用户和集群服务用户的一层映射,主要用于权限策略的分配。如上图所示,admin用户属于内部用户,而所有同步过来的集群服务用户均属于外部扩展用户。
五.Ranger功能介绍-权限策略
1>.现在我们开始介绍如何通过Ranger进行数据授权。如下图所示,首先单击“Access Manager”进入服务管理页面。
2>.如下图所示,我们会看到一个格栅布局的列表,他们是Ranger目前能够支持的所有子系统。因为在安装Ranger的时候已经开启了HDFS的插件,所以我们在HDFS组件下可以看到“yinzhengjie_cluster_hadoop”服务。它是Ranger根据开启的插件预建的服务项,以Ambari集群名称 + 组件名称的规则命名。
3>.点击上图中的“yinzhengjie_cluster_hadoop”进入HDFS的权限策略列表页面。如下图所示,这里可以查看,新建,修改根删除HDFS的权限策略,单击“Add New Pollicy”进入新建策略页面:
4>.点击上图中的“Add New Pollicy”按钮后,就可以进入下图的界面,授权策略页面分为Pollicy Detail和Allow Conditions两个部分,下图中针对各个参数都进行了标注:
5>.如上图所示,点击“Add”后我们就会在HDFS的策略界面中看到对应的规则,如下图所示:
6>.接下来我们需要验证下权限策略是否生效,首先通过ssh登陆到集群服务器并切换成ranger用户。具体操作如下:
[root@node101 ~]# hostname node101.yinzhengjie.org.cn [root@node101 ~]# [root@node101 ~]# id ranger uid=1009(ranger) gid=1003(hadoop) groups=1003(hadoop),1006(ranger) [root@node101 ~]# [root@node101 ~]# su ranger [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -ls / Found 9 items drwxrwxrwx - yarn hadoop 0 2018-12-08 03:46 /app-logs drwxr-xr-x - yarn hadoop 0 2018-12-08 03:46 /ats drwxr-xr-x - hdfs hdfs 0 2018-12-08 03:46 /hdp drwxr-xr-x - mapred hdfs 0 2018-12-08 03:46 /mapred drwxrwxrwx - mapred hadoop 0 2018-12-08 03:46 /mr-history drwxr-xr-x - hdfs hdfs 0 2018-12-08 22:07 /ranger drwxrwxrwx - hdfs hdfs 0 2018-12-08 03:46 /tmp drwxr-xr-x - hdfs hdfs 0 2018-12-07 16:12 /user drwxrwxrwx - hdfs hdfs 0 2018-12-07 22:19 /yinzhengjie [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -mkdir /test mkdir: Permission denied: user=ranger, access=WRITE, inode="/test":hdfs:hdfs:drwxr-xr-x #看到没?说是权限被拒绝!这是符合我们预期的,因为我们给他ranger用户授权仅仅授权了READ。创建文件属于写操作! [ranger@node101 root]$
7>.接下来,我们需要编辑咱们之前自定义的策略,修改ranger用户的权限,如下图所示,首先点击编辑:
8>.修改ranger的策略为读写,如下图所示,别忘记点击保存哟!
9>.修改授权成功后,我们继续在之前的终端执行相同的操作(不需要退出之前的终端,只要授权修改后立即就生效啦!),发现可以成功创建文件和删除文件,具体操作如下:
[ranger@node101 root]$ hostname node101.yinzhengjie.org.cn [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -mkdir /test [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -ls / Found 10 items drwxrwxrwx - yarn hadoop 0 2018-12-08 03:46 /app-logs drwxr-xr-x - yarn hadoop 0 2018-12-08 03:46 /ats drwxr-xr-x - hdfs hdfs 0 2018-12-08 03:46 /hdp drwxr-xr-x - mapred hdfs 0 2018-12-08 03:46 /mapred drwxrwxrwx - mapred hadoop 0 2018-12-08 03:46 /mr-history drwxr-xr-x - hdfs hdfs 0 2018-12-08 22:07 /ranger drwxr-xr-x - ranger hdfs 0 2018-12-09 00:53 /test drwxrwxrwx - hdfs hdfs 0 2018-12-08 03:46 /tmp drwxr-xr-x - hdfs hdfs 0 2018-12-07 16:12 /user drwxrwxrwx - hdfs hdfs 0 2018-12-07 22:19 /yinzhengjie [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -rm /test #注意这里删除目录时,我们千万别加“-R”参数,因为我们在给ranger用户授权时,指定的路径为根路径,并没有勾选递归按钮! rm: `/test': Is a directory [ranger@node101 root]$ [ranger@node101 root]$ hdfs dfs -ls / Found 10 items drwxrwxrwx - yarn hadoop 0 2018-12-08 03:46 /app-logs drwxr-xr-x - yarn hadoop 0 2018-12-08 03:46 /ats drwxr-xr-x - hdfs hdfs 0 2018-12-08 03:46 /hdp drwxr-xr-x - mapred hdfs 0 2018-12-08 03:46 /mapred drwxrwxrwx - mapred hadoop 0 2018-12-08 03:46 /mr-history drwxr-xr-x - hdfs hdfs 0 2018-12-08 22:07 /ranger drwxr-xr-x - ranger hdfs 0 2018-12-09 00:53 /test drwxrwxrwx - hdfs hdfs 0 2018-12-08 03:46 /tmp drwxr-xr-x - hdfs hdfs 0 2018-12-07 16:12 /user drwxrwxrwx - hdfs hdfs 0 2018-12-07 22:19 /yinzhengjie [ranger@node101 root]$
六.Ranger功能介绍-审计日志
作为一个企业大数据平台,它的基础服务会被大量上层应用使用(例如HDFS,HBase等)。对平台中基础组件对操作进行追溯也是一项必不可少对功能,Ranger就能帮助实现审计日志对功能。Ranger为我们提供了四类审计日志功能,即访问日志,管理员日志,登陆会话日志,插件日志。
1>.访问日志
访问日志主要记录对是用户对资源对访问情况。还记得刚才使用ranger用户执行了那些HDFS操作吗?现在通过Audit审计菜单进入访问日志页面。
2>.管理员日志
管理员日志主要记录的是管理员的操作,例如新建用户,新建或者修权限策略这些操作都会被管理员日志记录下来。
3>.登陆会话日志
登陆会话日志会记录所有用户的登陆行为,包括登陆人,登陆方式,登陆时间,登陆人的IP地址等信息。
4>.插件日志
Ranger的插件会定期从管理门户获取权限策略,插件日志就记录了这些插件同步策略的轨迹。什么插件在哪个时间点更新何种策略都能清晰的在日志中体现。