公司需要增加对hdfs集群数据安全的控制,组里有人提出apach ranger可以完成数据动态模糊和hdfs目录,hive表的动态访问控制,因此尝试了下apach ranger相关的功能,并碰到了不少坑。
Ranger 是hortonworks收购XA后开源出来的项目,现在还属于项目孵化阶段,用的人不多,国内只找到两篇安装指南,第一篇写的比较详细,针对的是ranger 0.5版本,我就是参照这个安装指南安装的,第二篇比较简略,但是针对的是最新的ranger 0.6版本。
国外的用户也基本集中在hortonwork推出的平台工具上,而国内使用horton works工具平台的应该不多,所以相关文档稀少。
本文主要记录我在试用ranger 0.5和ranger 0.6的过程中遇到的坑,不再赘述安装过程。
一.兼容性
刚开始使用的时候,由于官方的安装指南还是基于ranger 0.5的,所以我首先下载编译的是ranger 0.5版本,由于maven服务器连接缓慢,所以编译时常time out。后来尝试使用proxychains连ss可以加快很多下载速度。1. hadoop版本的问题
ranger官方声明只支持hadoop 2.7版本,在配置中,同样的设置使用hadoop 2.6.3,ranger的hdfs plugin并不能正常工作,在将hadoop更新到hadoop 2.7.2启动后,hdfs plugin 才可以正常工作。2. hive版本的问题
在ranger 0.5的官方指南中,声明只支持hive 1.2,但是在编译ranger 0.6的过程中,maven依赖包下载的都是hive 2.1的包,实际使用过程中,ranger 0.6配合hive 1.2并不能正常使用,只有使用hive 2.0 或者hive 2.1 才能正常使用。ranger的特色数据动态模糊,分行授权访问是基于hiveserver2实现的,因此只能对beeline下的访问起作用,而对使用hive cli访问hive数据库起不到控制作用。
ranger 0.6和ranger 0.5的区别
除了加入hive数据动态模糊,分行授权,ranger 0.6的一大变化还在于不再支持使用mysql记录资源访授权案历史,而是只支持solr。3. Sparksql访问hive表的问题
Sparksql默认是不受Ranger的权限控制影响的。
在Ranger 邮件组中有用户提到使用Ranger控制Sparksql权限的方法。
尝试之后发现,使用sparksql读取hive表的时候,并不通过hiveserver2,spark会从metastore中取得部分信息,然后直接去hdfs中读取表的源文件。而Ranger对hive表做的所有权限控制都是基于hiveserver2的,因此Ranger中的权限控制只有hdfs 控制能起作用,这是一个很大的遗憾,不能对Saprksql读取的hive表使用Ranger 提供的动态模糊和分行授权的功能很可惜。二.测试过程中遇到的一些坑
1.hdfs audit log不显示的问题
刚开始使用ranger 0.5的时候,发现使用hadoop用户访问ranger 控制的目录,不会留下记录,一度以为是ranger 没起作用,实际是因为hadoop是启动hdfs namenode的superuser,不受ranger acl或者hadoop acl控制,自然也不会留下audit history。2.hive 动态模糊不起作用,分行授权无效
刚开始使用ranger 0.6时发现,dynamic masking选择不了,如下图,选择框完全就是空的。在换了不同机器分别编译了ranger 0.6.1 和0.6.2版本发现同样的问题依然存在。
最后发现是ranger设置的mysql数据库中的一张表x_datamask_type_def为空,因此加载不出来选择框中应该有的值。
由于数据库是开始测试ranger 0.5时就配置的,在使用ranger 0.6的时候并没有清楚原有的数据,可能导致了数据库初始化的过程中出现了问题。
在删除数据库并重建之后,hive的动态模糊和分行授权才可以正常运行。
3.hdfs audit log记录地点
ranger 0.6开始,所有hdfs,hive等组件访问记录都不再支持mysql储存数据,而是改为储存数据在solr,但是按照下面的设置分别配置hdfs和hive plugin中的install.property文件后,只有hive的audit log出现在了web界面,hdfs的log还是记在了mysql里面。
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://10.104.90.40:6083/solr/ranger_audits
XAAUDIT.SOLR.USER=ranger_solr
XAAUDIT.SOLR.PASSWORD=NONE
XAAUDIT.SOLR.ZOOKEEPER=NONE
XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hive/audit/solr/spool总结
由于文档稀少,官方文档也有很多地方落后与版本更新,社区支援不足,ranger作为一个孵化中的开源项目使用是存在诸多问题的,希望本文记录下来的踩坑经历可以帮助更多的人。
使用ranger 0.6过程中其他的参考网址:
https://cwiki.apache.org/confluence/display/RANGER/Row-level+filtering+and+column-masking+using+Apache+Ranger+policies+in+Apache+Hive
https://cwiki.apache.org/confluence/display/RANGER/Hive+Commands+to+Ranger+Permission+Mapping
https://community.hortonworks.com/articles/59582/create-dynamic-row-level-filter-in-ranger.html
https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.6/bk_installing_manually_book/content/enabling_audit_logging_hdfs_solr.html