Apache Ranger是HDFS生态系统的安全管理框架,用于对HDFS生态的产品,包括HBase、Hadoop、Hive、Kafka等提供一个集中式的安全管理策略。Apache Ranger在架构组成上包括一个策略管理服务器(Policy Admin Server)和运行在外部组件上的Ranger插件,该服务将策略存储于外部的关系型数据库,如MySQL中。外部的大数据组件通过其上的Ranger插件对管理的资源执行授权检查。授权的依据就是存储于DB上的策略,ranger插件会定期从ranger admin出获取最新的policy,默认的轮询周期是30s。
下面我们以HBase的Ranger安装为例,详述安装Ranger的流程:
1)ranger-admin控制台安装:
在网上下载ranger的源码,本地编译后,进入target目录,可以发现很多编译好的ranger包,其中ranger-0.7.1-admin.tar.gz就是我们安装ranger-admin所要使用的包。解压并修改其install.properties文件:
tar -zxvf ranger-0.7.1-admin.tar.gz
cd ranger-0.7.1-admin
vim install.properties
在install.properties中添加如下参数:
SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
db_root_user=bigdata (注:root用户的用户名)
db_root_password=bigdata@)!$mogujie (注:root用户密码)
db_host=db服务器ip
db_name=ranger
db_user=rangeradmin
db_password=123456
audit_store=db
audit_db_name=rangeraudit
audit_db_user=rangeradmin
audit_db_password=123456
其中,需要注意的包括以下几点:
1、确保/usr/share/java/mysql-connector-java.jar该路径下的文件存在;
2、bigdata用户需要具有grant权限,grant是授权操作,拥有此权限的用户可以创建table,并指定用户对table的权限;
3、上面的ranger和rangeraudit两个库需要在安装之前配置好,用户rangeradmin也需要提前创建好;
初始化Ranger Admin,以sudo用户执行如下命令:
sudo ./setup.sh
执行setup.sh命令之后,在初始化的过程中会出现很多错误,主要集中在以下两个原因中:
1、MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
索引的长度超过了最大限制的737字节,遇到该错误时,进入相应的脚本,找到相应table,删除多余的索引(外键索引不要删,否则会造成错误)
2、Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
admin安装过程中会创建function,如果在主从复制的两台MySQL中开启了二进制日志选项log-bin,slave会从master复制数据,此时function所得的结果在master和slave上可能会不同,所以存在潜在的安全隐患,所以,默认会阻止function的创建,并抛出如上的错误;
解决上述问题有两个步骤:
A)mysql> set global log_bin_trust_function_creators=1
将log_bin_trust_function_creators设置为ON,声明可以随意创建function,设置该参数可以用动态的方式或者指定该参数来启动数据库服务器或者修改配置文件后重启服务器。需要注意的是,动态设置的方式会在服务器重启后失效;
B)明确指明函数的类型
DETERMINISTIC 不确定的;
NO SQL 没有SQL雨具,当然也不会修改数据;
READS SQL DATA 只是读取数据;
Ranger Admin初始化成功之后,以sudo用户启动Ranger Admin:sudo ranger-admin start
验证是否安装成功,可以访问http://localhost:6080;用admin/admin用户登录,如果登陆成功,那么说明安装成功;
该工具用于同步Linux系统的用户到ranger的数据库中,安装步骤如下:
tar -zxvf ranger-0.7.1-usersync.tar.gz
cd ranger-0.7.1-usersync
修改其中的install.properties文件,添加如下的配置:
POLICY_MGR_URL = http://localhost:6080 //ranger admin的web链接
SYNC_SOURCE = unix
SYNC_INTERVAL = 5 //同步的周期interval,单位是分钟
logdir=/var/log/ranger/usersync
初始化设置ranger usersync,以sudo用户执行如下命令:sudo ./setup.sh
启动Ranger Usersync服务:sudo ./ranger-usersync-services.sh start
ranger-hbase-plugin的安装流程:
首先安装用户需要具有root权限,本地编译好ranger的源码,将target下的ranger-0.7.1-hbase-plugin.tar.gz上传至服务器,解压,在你的安装目录下创建一个hbase目录,经过如上步骤后,ranger安装路径下的目录结构如下图中所示(假设在@test用户下安装):
在上面的环境中,如果我们的hbase安装在@data用户下,进入hbase目录,创建两个指向data用户下hbase安装目录的两个软链接,创建命令如下:
ln -s /home/data/hbase/conf /home/test/programs/ranger/hbase/conf
ln -s /home/data/hbase/lib /home/test/programs/ranger/hbase/lib
之所以创建该软链接,是因为启动脚本需要知道hbase的conf和lib的安装位置。然后进入ranger-0.7.1-hbase-plugin目录,修改它的install.properties文件,添加以下配置项:
POLICY_MGR_URL=http://RangerAdmin的ip地址:6080
SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
REPOSITORY_NAME=hbasedev //集群名称标示,与前述admin添加的一致;
XAAUDIT.SUMMARY.ENABLE=true
XAAUDIT.DB.IS_ENABLED=true
XAAUDIT.DB.FLAVOUR=MYSQL
XAAUDIT.DB.HOSTNAME=DB的ip地址
XAAUDIT.DB.DATABASE_NAME=ranger
XAAUDIT.DB.USER_NAME=rangeradmin
XAAUDIT.DB.PASSWORD=123456 //DB相关的配置,与安装ranger-admin时的一致;
注意:需要确保/usr/share/java/mysql-connector-java.jar文件真实存在;
ok,经过以上配置之后,以sudo用户执行enable-hbase-plugin.sh命令:
sudo ./enable-hbase-plugin.sh
执行该命令后,可以看到hbase的conf目录下,新增了三个文件,hbase-site.xml文件的内容也被更改了
hbase-site.xml中修改的内容是在文件最后追加了如下三个配置:
hbase.security.authorization
true
hbase.coprocessor.master.classes
org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor
hbase.coprocessor.region.classes
org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor
而hbase的lib目录下,新增如下三个软链接指向ranger安装包中的jar文件:
然后,重启hbase集群,就可以使权限生效了。如果让权限管理失效,那么执行disable-hbase-plugin.sh即可,同样的,该脚本也需要用sudo来运行。
sudo ./disable-hbase-plugin.sh
该脚本的执行实际上,只是将hbase-site.xml中权限相关的配置删除了。