1.Ranger简介
Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。
优点:
提供了细粒度级(hive列级别)
基于访问策略的权限模型
权限控制插件式,统一方便的策略管理
支持审计日志,可以记录各种操作的审计日志,提供统一的查询接口和界面
丰富的组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM)
支持和kerberos的集成
提供了Rest接口供二次开发
为什么我们选择Ranger
多组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM),基本覆盖我们现有技术栈的组件
支持审计日志,可以很好的查找到哪个用户在哪台机器上提交的任务明细,方便问题排查反馈
拥有自己的用户体系,可以去除kerberos用户体系,方便和其他系统集成,同时提供各类接口可以调用
2.Ranger系统架构
1、架构介绍
2、组件介绍
-
RangerAdmin
以RESTFUL形式提供策略的增删改查接口,同时内置一个Web管理页面。
-
Service Plugin
嵌入到各系统执行流程中,定期从RangerAdmin拉取策略,根据策略执行访问决策树,并且记录访问审计
-
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用来描述拒绝访问的情况,不同的组件对应的权限也是不一样的。
4、权限实现
Ranger-Admin职责:
- 管理员对于各服务策略进行规划,分配相应的资源给相应的用户或组,存储在db中
Service Plugin职责:
- 定期从RangerAdmin拉取策略
- 根据策略执行访问决策树
- 实时记录访问审计
策略执行过程:
策略优先级:
- 黑名单优先级高于白名单
- 黑名单排除优先级高于黑名单
- 白名单排除优先级高于白名单
决策下放:如果没有policy能决策访问,一般情况是认为没有权限拒绝访问,然而Ranger还可以选择将决策下放给系统自身的访问控制层
5.Ranger 安装
5.1 官网下载源码包
wget http://mirrors.tuna.tsinghua.edu.cn/apache/ranger/2.0.0/apache-ranger-2.0.0.tar.gz
5.2 下载maven
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压,并添加环境变量,同时修改maven的Java堆内存最大值,避免编译内存溢出
# tar -zxvf apache-maven-3.6.2-bin.tar.gz
# vim /etc/profile
export MAVEN_HOME=/opt/app/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
MAVEN_OPTS=-Xmx2048m
export JAVA_HOME MAVEN_HOME MAVEN_OPTS JAVA_BIN PATH CLASSPATH
# source profile
修改maven源为阿里源或其他源
在maven 的conf目录下的settings.ximl文件中添加如下内容
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>alimaven</id>
<mirrorof>central</mirrorof>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorof>central</mirrorof>
<name>JBoss Public Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
</mirrors>
5.3 编译Ranger
# cd /home/apache-ranger-2.0.0
# mvn clean compile package assembly:assembly install -DskipTests -Drat.skip=true
这里首次编译需要很长时间,也可能出现一系列问题,如果没有编译成功,这边可以下载编译好的一些包:【资源】Ranger 2.0 编译包下载_ranger-admin、hdfs、hive2.0.0下载-CSDN博客
如果编译成功,据说会在当前目录下的target会生成相应的tar包文件,如下:(我这里也没有编译成功)
5.4 Ranger-admin安装部署
准备:
a 检测是否安装python2(这里版本必须为2)
如果没有检测到python2,则执行下面的命令 # yum -y install python
b postgres数据库安装以及下载驱动包
postgres 数据库安装:Docker - 安装并持久化PostgreSQL数据 - 简书
驱动包下载(从maven源库):Central Repository: org/postgresql/postgresql/42.2.8
把postgresql-42.2.8.jar下载,并创建 /usr/share/java/ 目录,最后转移到该目录下
# wget https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.8/postgresql-42.2.8.jar
# mkdir -p /usr/share/java
# mv postgresql-42.2.8.jar /usr/share/java/
数据库安装完后,手动创建数据库ranger(下面操作会用到):create database ranger
c 解压ranger-admin软件包
# tar -zxvf ranger-2.0.0-admin.tar.gz
d 修改install.properties文件
# cd /home/ranger-2.0.0-SNAPSHOT-admin
# vim install.properties
修改install.properties文件,这里使用的数据库是postgres,不安装solr服务
1)数据库配置(支持多种数据库,这里以postgresql为例)
DB_FLAVOR=POSTGRES #指明使用数据库类型
SQL_CONNECTOR_JAR=/usr/share/java/postgresql-42.2.8.jar #数据库连接驱动
db_root_user=postgres #数据库root用户名
db_root_password=postgres #数据库主机
db_host=192.168.4.54:5432 #数据库密码
# 以下三个属性是用于设置ranger数据库的
db_name=ranger #数据库名
db_user=postgres #管理该数据库用户
db_password=postgres #密码
# 不需要保存,为空,否则生成的数据库密码为'_'
cred_keystore_filename=
2) 审计日志, 如果没有安装solr,对应的属性值为空,或者注释掉即可
audit_store=
audit_solr_urls=
audit_solr_user=
audit_solr_password=
audit_solr_zookeepers=
3)策略管理配置,配置ip和端口,默认即可
policymgr_external_url=http://localhost:6080
4) 配置hadoop集群的core-site.xml文件,把core-site.xml文件拷贝到该目录
hadoop_conf=/etc/hadoop/conf
5) rangerAdmin、rangerTagSync、rangerUsersync、keyadmin密码配置。默认为空,可以不配,对应的内部组件该属性也要为空
rangerAdmin_password=
rangerTagsync_password=
rangerUsersync_password=
keyadmin_password=
e 初始化ranger-admin
# cd /home/ranger-2.0.0-SNAPSHOT-admin
编辑setup.sh
,注释掉以下几行
#if [ "$?" != "0" ]
#then
# validateDefaultUsersPassword 'admin' "${rangerAdmin_password}"
# validateDefaultUsersPassword 'rangertagsync' "${rangerTagsync_password}"
# validateDefaultUsersPassword 'rangerusersync' "${rangerUsersync_password}"
# validateDefaultUsersPassword 'keyadmin' "${keyadmin_password}"
#fi
然后再执行 setup.sh 脚本
# ./setup.sh
初始化结果如下则成功:
# ./set_globals.sh
f 启动ranger-admin
# ranger-admin start
如图所示:表明启动成功,查看Ranger Admin Server运行的日志情况,日志路径默认为 /home/ranger-2.0.0-SNAPSHOT-admin/ews/logs/ranger-admin-bogon-root.log
浏览器连接测试:http://192.168.4.54:6080,登录界面用户名和密码为:admin/admin
输入admin/admin,登陆成功即可看到如下界面
5.5 Ranger HDFS plugin安装
先安装hadoop,这里就不做介绍了 然后创建一个hadoop用户,组hadoop
执行如下操作:
#useradd -u 800 hadoop
#passwd hadoop
#chown -R hadoop.hadoop hadoop-3.1.2/
注意:ranger hdfs plugin要安装在HDFS集群的namenode节点上。
在HDFS namenode点上上传ranger-hdfs插件ranger-2.0.0-SNAPSHOT-hdfs-plugin.tar.gz
#tar -zvxf ranger-2.0.0-SNAPSHOT-hdfs-plugin.tar.gz
#cd ranger-2.0.0-SNAPSHOT-hdfs-plugin
#vim install.properties
POLICY_MGR_URL=http://192.168.4.54:6080 # ranger-admin管理地址,也就是前面一步安装成功启动的地址
REPOSITORY_NAME=hdfs_demo #必须和ranger-admin的service name对应
COMPONENT_INSTALL_DIR_NAME=/home/hadoop/hadoop-3.1.2 #hadoop安装路径
CUSTOM_USER=hadoop
CUSTOM_GROUP=hadoop
#./enable-hdfs-plugin.sh
启动插件,然后启动hadoop集群
- 会发现share/hadoop/hdfs/lib 下有ranger-hdfs开头的软连接
- 启动hdfs会发现/etc/ranger/hadoopdev/policycache下有策略缓存文件
5.6 测试
登陆ranger admin,添加 plugin service
验证HDFS Plugin服务,这时登录Ranger的管理员界面验证下HDFS plugin是够加载成功
root用户在hdfs下创建文件夹,命令如下:
hadoop fs -mkdir -p /hdfstest/sub
往目录上传一文件,命令如下:
hadoop fs -put README.txt /hdfstest
登录Ranger Admin,在hafs_demo里添加Policy
policy:目录/hdfstest 对用户hadoop只设置读权限
重启hadoop集群
切换到hadoop用户,执行如下操作
可以看到用户执行:hadoop fs -rm -r /hdfstest/README.txt 要删除目录/hdfstest里面的文件,提示Permis denied
再接着测试上传文件,执行命令 hadoop fs -put LICENCE.txt /hdfstest,一样没有操作权限
继续修改policy,赋予用户hadoop,read、write、excute等权限,如下图所示:
这个时候重启hadoop集群,然后继续切换到hadoop用户,继续测试
从上述测试结果可以看出,赋予了用户可执行权限之后,用户就可以对指定目录进行操作了!