一、总体解决方案

    基于apache Ranger开源项目源代码进行二次开发,实现支持CDH集成的Ranger安全管理系统。另外需要在CDH管理界面上配置部分参数。

    本文档经过测试验证的CDH和ranger版本:

CDH版本:6.3.2

Apache Ranger版本:2.0.0

二、ranger插件公共模块agent-common修改

1、配置文件处理

问题描述:

CDH在重启组件服务时为组件服务独立启动进程运行,动态生成运行配置文件目录和配置文件,ranger插件配置文件部署到CDH安装目录无法被组件服务读取到。

解决办法:

基于ranger 源代码二次开发,在agents-common模块org.apache.ranger.plugin.service

.RangerBasePlugin类init()方法内部开始处插入copyConfigFile()方法调用,并定义copyConfigFile()方法,实现复制ranger配置文件到CDH组件服务的运行配置文件目录:

    private void copyConfigFile() {

        String serviceHome = "CDH_" + this.serviceType.toUpperCase() + "_HOME";

        if ("CDH_HDFS_HOME".equals(serviceHome)) {

            serviceHome = "CDH_HADOOP_HOME";

        }

        serviceHome = System.getenv(serviceHome);

        File dir = new File(serviceHome);

        String userDir = System.getProperty("user.dir");

        File destDir = new File(userDir);

        IOFileFilter regexFileFilter = new RegexFileFilter("ranger-.+xml");

        Collection<File> configFileList = FileUtils.listFiles(dir, regexFileFilter, TrueFileFilter.INSTANCE);

        for (File rangerConfigFile : configFileList) {

            try {

                FileUtils.copyFileToDirectory(rangerConfigFile, destDir);

            } catch (IOException e) {

                LOG.error("Copy ranger config file failed.", e);

            }

        }

    }

2、enable-agent.sh配置

问题描述

  • hdfs和yarn插件安装部署后,插件jar包会部署到组件安装目录的share/hadoop/hdfs/lib子目录下,启动hdfs或yarn运行时加载不到这些jar包,会报ClassNotFoundException: Class org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer not found
  • kafka插件安装部署后,启动运行时会从插件jar包所在目录加载ranger插件配置文件,读不到配置文件会报错addResourceIfReadable(ranger-kafka-audit.xml): couldn't find resource file location

解决办法

修改agents-common模块enable-agent.sh脚本文件:

HCOMPONENT_LIB_DIR=${HCOMPONENT_INSTALL_DIR}/share/hadoop/hdfs/lib

修改为:

HCOMPONENT_LIB_DIR=${HCOMPONENT_INSTALL_DIR}
elif [ "${HCOMPONENT_NAME}" = "kafka" ]; then

    HCOMPONENT_CONF_DIR=${HCOMPONENT_INSTALL_DIR}/config

修改为:

elif [ "${HCOMPONENT_NAME}" = "kafka" ]; then

    HCOMPONENT_CONF_DIR=${PROJ_LIB_DIR}/ranger-kafka-plugin-impl

以上修改需重新打包ranger,然后安装部署各插件。

三、hive插件集成问题

hive插件需安装在所有hiveServer2节点服务器上

1hive环境变量文件修改

解决hive客户端访问时报如下错误的问题: 

Error: Could not open client transport with JDBC Uri: 
jdbc:hive2://****:10000/testdb: Failed to open new session: 
java.lang.IllegalArgumentException: Cannot modify hive.query.redaction.rules at 
runtime. It is not in list of params that are allowed to be modified at runtime 
(state=08S01,code=0)

Error: Could not open client transport with JDBC Uri: 
jdbc:hive2://****:10000/testdb: Failed to open new session: 
java.lang.IllegalArgumentException: Cannot modify hive.exec.query.redactor.hooks at
 runtime. It is not in list of params that are allowed to be modified at runtime 
(state=08S01,code=0)

 手工修改/opt/cloudera/parcels/CDH/lib/hive/conf/目录下的hive环境变量文件hive-env.sh,注释删除export HIVE_OPTS配置行

2hive版本兼容性问题

Apache Ranger 2.0.0版本对应hive版本3.1.0,CDH 6.3.2版本对应hive版本2.1.1,不兼容,hive server启动会报错

解决办法:

把Apache Ranger 1.2.0版本hive插件代码hive-agent拷贝到Apache Ranger 2.0.0版本hive-agent,修改Apache Ranger 2.0.0根目录pom.xml中的hive版本号为2.1.1:

<hive.version>2.1.1</hive.version>

重新编译打包Apache Ranger 2.0.0版本并安装hive插件

四、HDFS插件集成

HDFS插件需安装在所有namenode节点服务器上

参数配置

在CDH管理界面配置HDFS参数,确保dfs.permissions参数已勾选,

编辑“hdfs-site.xml 的 NameNode 高级配置代码段”参数配置,新增配置:

dfs.namenode.inode.attributes.provider.class=org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer

五、YARN插件集成

YARN插件安装在所有ResourceManager节点服务器上

参数配置

在CDH管理界面配置YARN参数,配置“yarn-site.xml ResourceManager 高级配置代码段”,新增参数配置:

yarn.authorization-provider=org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer

六、kafka 插件集成

Kafka插件安装在所有Broker节点服务器上

参数配置

在CDH管理界面配置Kafka参数,配置“kafka.properties Kafka Broker 高级配置代码段”,新增参数配置:

authorizer.class.name=org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer

七、其它插件的集成待研究和测试

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐