Apache Ranger 介绍与使用

1.Ranger简介

Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、HiveHbase等进行细粒度的数据访问控制。通过操作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集群

  1. 会发现share/hadoop/hdfs/lib 下有ranger-hdfs开头的软连接
  2. 启动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用户,继续测试

从上述测试结果可以看出,赋予了用户可执行权限之后,用户就可以对指定目录进行操作了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值