Apache Ranger入门与进阶使用

这篇具有很好参考价值的文章主要介绍了Apache Ranger入门与进阶使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Apache Ranger

ranger是hadoop生态中的权限管理和用户审计插件,ranger丰富的插件数量让它的使用非常广泛,但是苦于官方文档非常少,学习起来就非常麻烦。本篇博客是取各文档之精华所做的,相信你完成的看完后对于ranger会有更多的理解

1 编译

ranger没有二进制包提供,需要自己手动编译下,请先确保拥有以下环境后再进行操作:

  • java
  • maven
# 下载源码包并且解压
git clone https://github.com/weaksloth/ranger.git
cd ranger

# 编译
export MAVEN_OPTS="-Xms2g -Xmx2g"
mvn clean package -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true  -Drat.skip=true -Dmaven.test.skip=true -Denforcer.skip -Dcheckstyle.skip -Djacoco.skip=true -Dfindbugs.skip=true -DskipTests=true

编译好后,文件如下:

-rw-r--r-- 1 xcchen xcchen 518816503  4月 2日 14:00 ranger-2.3.0-admin.tar.gz
-rw-r--r-- 1 xcchen xcchen  41570190  4月 2日 14:00 ranger-2.3.0-atlas-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  36507652  4月 2日 14:00 ranger-2.3.0-elasticsearch-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  36983615  4月 2日 13:59 ranger-2.3.0-hbase-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  35543107  4月 2日 13:57 ranger-2.3.0-hdfs-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  35343029  4月 2日 13:59 ranger-2.3.0-hive-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  54595030  4月 2日 13:59 ranger-2.3.0-kafka-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen 195215223  4月 2日 14:00 ranger-2.3.0-kms.tar.gz
-rw-r--r-- 1 xcchen xcchen  49246894  4月 2日 13:59 ranger-2.3.0-knox-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  34481516  4月 2日 14:00 ranger-2.3.0-kylin-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen     34231  4月 2日 14:00 ranger-2.3.0-migration-util.tar.gz
-rw-r--r-- 1 xcchen xcchen  41242239  4月 2日 13:59 ranger-2.3.0-ozone-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  55216696  4月 2日 14:00 ranger-2.3.0-presto-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  16255133  4月 2日 14:00 ranger-2.3.0-ranger-tools.tar.gz
-rw-r--r-- 1 xcchen xcchen    905882  4月 2日 14:00 ranger-2.3.0-schema-registry-plugin.jar
-rw-r--r-- 1 xcchen xcchen     37582  4月 2日 14:00 ranger-2.3.0-solr_audit_conf.tar.gz
-rw-r--r-- 1 xcchen xcchen     40595  4月 2日 14:00 ranger-2.3.0-solr_audit_conf.zip
-rw-r--r-- 1 xcchen xcchen  36092312  4月 2日 13:59 ranger-2.3.0-solr-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  34720198  4月 2日 14:00 ranger-2.3.0-sqoop-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen   6335050  4月 2日 14:00 ranger-2.3.0-src.tar.gz
-rw-r--r-- 1 xcchen xcchen  49582963  4月 2日 13:59 ranger-2.3.0-storm-plugin.tar.gz
-rw-r--r-- 1 xcchen xcchen  30120534  4月 2日 14:00 ranger-2.3.0-tagsync.tar.gz
-rw-r--r-- 1 xcchen xcchen  19652753  4月 2日 14:00 ranger-2.3.0-usersync.tar.gz
-rw-r--r-- 1 xcchen xcchen  33384473  4月 2日 13:59 ranger-2.3.0-yarn-plugin.tar.gz

1.1 编译问题汇总

  1. 问题描述:
PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed: NotAfter: Mon Nov 14 01:05:56 CST 2022 -> [Help 1]

原因以及解决方法:stack overflow,这里我已经将相应的配置加入到了编译命令中去了

  1. 问题描述:
Failed to run task: 'karma start ../../src/test/javascript/karma-dev.conf.js' failed.

这里原因是会执行前端的test相关的东西,但是仅仅设置-Dmaven.test.skip=true还是会执行,我们还需要添加-DskipTests=true才会跳过编译时的测试

2 安装

2.1 审计日志存储

ranger将审计日志存放在elasticsearch或者solr中进行检索操作,用户可以根据需要选择安装elasticsearch或者solr

2.1.1 solr

我们安装7.7.3版本,

wget https://archive.apache.org/dist/lucene/solr/7.7.3/solr-7.7.3.tgz
tar -zxvf solr-7.7.3.tar.gz -C ~/software/
cd ~/software
mv solr-7.7.3 solr

配置:

修改bin/solr.in.sh

ZK_HOST="localhost:2181"

启动与停止

bin/solr start
bin/solr stop

访问 http://localhost:8983 验证安装是否成功

2.1.2 elasticsearch(推荐)

推荐在自己的电脑上使用docker安装elasticsearch

docker network create esnetwork

# 安装es,此处要限制es的jvm内存大小不然会太大了
docker run -d --name elasticsearch --net esnetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx2048m" elasticsearch:7.14.2

# 安装kibana(optional)

访问 http://localhost:9200 验证安装是否成功

2.2 ranger-admin

解压缩文件

tar -zxvf ranger-2.3.0-admin.tar.gz -C ~/software/ranger

以下所有操作,都是在ranger-2.3.0-admin目录下进行的,请注意命令所在的上下文

配置ranger-admin模块

cd ranger-2.3.0-admin
vim install.properties
# 这里配置文件只展示了修改了的部分,未修改的部分未展示
SQL_CONNECTOR_JAR=/home/xcchen/software/ranger/ranger-2.3.0-admin/mysql-connector-java-8.0.22.jar

db_root_user=root
db_root_password=root
db_host=localhost:3306

db_name=ranger
db_user=root
db_password=root

# 审计日志存储位置配置,如果配置为solr,那么solr的配置就会生效,如果配置为elasticsearch,那么es的配置就会生效
audit_store=elasticsearch

# * audit_solr_url Elasticsearch Host(s). E.g. 127.0.0.1
audit_elasticsearch_urls=localhost
audit_elasticsearch_port=9200
audit_elasticsearch_protocol=http
audit_elasticsearch_user=
audit_elasticsearch_password=
audit_elasticsearch_index=ranger-index
audit_elasticsearch_bootstrap_enabled=true

audit_solr_urls=http://localhost:8983/solr/ranger_audits
audit_solr_user=solr
audit_solr_password=solr
audit_solr_zookeepers=

unix_user=chen
unix_user_pwd=...
unix_group=chen

解释下:unix_user是需要调整的,默认是ranger。如果配置为ranger,那么会创建ranger用户和ranger组,并且将ranger-admin目录chown给ranger,如果你不想创建,可以调整为自己正在使用的用户

创建并初始化ranger数据库

建议使用mysql5.6~mysql5.7版本

create database ranger default character set utf8;
su root
sh setup.sh
  • 问题1:
2023-03-07 15:25:56,832   --------- Running Ranger PolicyManager Web Application Install Script ---------
2023-03-07 15:25:56,834  [I] uname=Linux
2023-03-07 15:25:56,835  [I] hostname=xcchen-man
2023-03-07 15:25:56,839  [I] DB_FLAVOR=MYSQL
2023-03-07 15:25:56,841  [I] Audit source=solr
2023-03-07 15:25:56,844  [I] Checking distribution name..
2023-03-07 15:25:56,855  [I] Found distribution : ManjaroLinux
2023-03-07 15:25:56,856  [I] check if command /home/xcchen/software/java/bin/java exists
2023-03-07 15:25:56,857  [I] '/home/xcchen/software/java/bin/java' command found
2023-03-07 15:25:56,909  [I] Checking MYSQL CONNECTOR FILE : /home/xcchen/software/ranger/mysql-connector-java-8.0.22.jar
2023-03-07 15:25:56,910  [I] MYSQL CONNECTOR FILE : /home/xcchen/software/ranger/mysql-connector-java-8.0.22.jar file found
2023-03-07 15:25:56,911  [I] Setting up UNIX user : ranger and group: ranger
groupadd: Permission denied.
groupadd:无法锁定 /etc/group,请稍后再试。2023-03-07 15:25:56,919  [E] Creating group ranger failed

如果出现上述错误,请确保正确配置了unix_user选项, 建议和当前用户保持一致

  • 问题2:

创建数据库编码要设置为utf8,如果不设置为utf8默认为utf8mb4。但是sql初始化脚本中,有字段类型为varchar(4000),在执行初始化数据库命令的时候就会抛出异常(此bug在ranger-2.4版本已经修复了)

Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

启动ranger-admin进程

sudo ranger-admin start

启动成功后,访问http://localhost:6080,用户名和密码均为admin

2.3 ranger-usersync

ranger-usersync可以选择性的使用

定期将Unix系统或LDAP或Active Directory中的用户/组同步到RangerAdmin中。也可用作RangerAdmin的身份验证服务器,以使用linux用户/密码登陆到RangerAdmin。

ranger界面,大数据,apache,大数据,java

# 解压缩编译后的安装包
tar -zxvf ranger-2.3.0-usersync.tar.gz -C ~/software/ranger
cd ~/software/ranger/ranger-2.3.0-usersync

修改配置文件,vim install.properties:

POLICY_MGR_URL=http://localhost:6080

unix_user=chen
unix_group=chen

# 同步的user最小id是500,group最小id是500,使用shell命令“id username”可查看相关id
MIN_UNIX_USER_ID_TO_SYNC=500
MIN_UNIX_GROUP_ID_TO_SYNC=500

切换到root用户,执行初始化操作:

su root
./setup.sh

执行完初始化,还需要修改/etc/ranger/usersync/conf/ranger-ugsync-site.xml配置文件,将ranger.usersync.enabled设置为true

<property>
        <name>ranger.usersync.enabled</name>
        <value>true</value>
</property>

启动服务:

sudo bash ranger-usersync-services.sh start

启动后,同步会立刻触发一次,可以打开web ui查看已经同步的用户,同步的用户来源为External

ranger界面,大数据,apache,大数据,java

默认是5分钟同步一次,也可以通过install.properties配置SYNC_INTERVAL

2.4 审计日志查看

ranger另一个核心的功能就是审计,通过查看审计日志我们可以看到用户操作了哪些资源,在ranger的web界面中,点击Audit即可查看审计日志如下图所示:
ranger界面,大数据,apache,大数据,java


ranger支持多种类型的插件,来控制这些组件的权限

3 hive插件

假设你已经配置好了hadoop和hive metastore

官方的hive插件作用域在HiveCli和HiveServer2端,无法直接控制Hive Metastore的权限。

事实上,对于hive metastore来说,很多都是将其作为一个元数据服务,并不想使用hive服务。例如flink,spark使用hive metastore进行元数据的存储,真正的计算操作跟hive是无关的,所以此时官方插件是不好用的。

针对我们自己的需求,我们需要去使用能单独控制hive metastore的插件,如果你有使用hive的需求,可以寻找下其他的资料,很多

4 hive metastore插件

hive官方没有提供hive meatstore的ranger插件,但是有第三方实现:

  • https://github.com/apache/ranger/pull/7/files#diff-76d2c4eeb19f05d2f5e21a8f37d6438d2c1d60ec9b728ab3fa6b6211c6f9fb2c
  • https://github.com/insightlake/Ranger-Metastore-Plugin

注意:上述插件版本都比较旧,所以我进行了改进适配了新版本,已经将插件的集成到了hive-agent中,所以读者无需进行其他操作

4.1 安装hive metastore

安装

wget https://repo1.maven.org/maven2/org/apache/hive/hive-standalone-metastore/3.1.2/hive-standalone-metastore-3.1.2-bin.tar.gz
tar -zxvf hive-standalone-metastore-3.1.2-bin.tar.gz -C ~/software/
mv apache-hive-metastore-3.1.2-bin hive-metastore

# 进入lib目录下
cd hive-metastore/lib
cp mysql-connector-java-8.0.22.jar ./

# 删除就版本的guava包,使用新版本,不然会冲突
rm -rf guava-19.0.jar
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar ./

wget https://repo1.maven.org/maven2/org/apache/hive/hive-exec/3.1.2/hive-exec-3.1.2.jar

在mysql中创建hive metastore需要的数据库:

create database metastore_standalone;
create user 'hms'@'%' identified by 'Hms@123';
grant all privileges on metastore_standalone.* to 'hms'@'%' with grant option;
flush privileges;

4.2 安装ranger metastore插件

我已经将ranger metastore插件集成到了hive插件中,所以我们可以直接解压缩hive插件即可

tar -zxvf ranger-2.3.0-hive-plugin.tar.gz -c ~/software/ranger/

4.3 配置ranger metastore插件

# 进入ranger插件主文件夹
cd ~/software/ranger/ranger-2.3.0-hive-plugin

修改install.properties,找到以下配置进行修改:

# ranger admin地址
POLICY_MGR_URL=http://localhost:6080

# ranger repository,这里填入的和后面要在ranger admin中配置的名称要保持一致
REPOSITORY_NAME=hms

# hive metastore地址,插件初始化时,会使用到该路径
COMPONENT_INSTALL_DIR_NAME=/home/xcchen/software/hive-metastore

# 配置该插件的审计日志写入位置,不配置则无法开启审计功能
XAAUDIT.ELASTICSEARCH.ENABLE=true
XAAUDIT.ELASTICSEARCH.URL=localhost
XAAUDIT.ELASTICSEARCH.USER=NONE
XAAUDIT.ELASTICSEARCH.PASSWORD=NONE
XAAUDIT.ELASTICSEARCH.INDEX=ranger-index
XAAUDIT.ELASTICSEARCH.PORT=9200
XAAUDIT.ELASTICSEARCH.PROTOCOL=http

# 建议配置为当前正在使用的用户
CUSTOM_USER=xcchen
CUSTOM_GROUP=xcchen

4.4 开启ranger metastore插件

su root
./enable-metastore-plugin.sh

执行脚本后,程序会拷贝jar包到hive-metastore的lib目录下,并且在hive-metastore的conf目录下会生成下面几个文件(日期为3月10日的都是插件生成的):

总计 100K
-rw-r--r-- 1 xcchen xcchen 1.6K 2019年 8月23日 metastore-site.xml
-rw-r--r-- 1 xcchen xcchen 2.7K 2019年 8月23日 metastore-log4j2.properties
-rw-r--r-- 1 xcchen xcchen  56K 2019年 8月23日 metastore-site.xml.template
-rw-r--r-- 1 xcchen xcchen   83  3月10日 15:17 ranger-security.xml
-rwxr--r-- 1 xcchen xcchen 1.8K  3月10日 15:17 hiveserver2-site.xml
-rwxr--r-- 1 xcchen xcchen 1.5K  3月10日 15:17 hiveserver-site.xml
-rwxr--r-- 1 xcchen xcchen 9.4K  3月10日 15:17 ranger-hive-audit.xml
-rwxr--r-- 1 xcchen xcchen 2.9K  3月10日 15:17 ranger-hive-security.xml
-rwxr--r-- 1 xcchen xcchen 1.9K  3月10日 15:17 ranger-policymgr-ssl.xml
-rwxr--r-- 1 xcchen xcchen 2.7K  3月10日 15:23 hive-site.xml

4.5 hive-metastore初始化

为什么将hive-metastore的初始化放到现在才做呢?因为ranger插件会生成配置文件,只需要基于这些配置文件进行修改即可,编辑hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- 下面五个配置是插件自动生成自带的 -->
	<property>
        <name>hive.security.authorization.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.security.authorization.manager</name>
        <value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
    </property>
    <property>
        <name>hive.metastore.pre.event.listeners</name>
        <value>org.apache.ranger.authorization.hive.authorizer.RangerHiveMetastoreAuthorizer</value>
    </property>
    <property>
        <name>hive.metastore.event.listeners</name>
        <value>org.apache.ranger.authorization.hive.authorizer.RangerHiveMetastorePrivilegeHandler</value>
    </property>
    <property>
        <name>hive.conf.restricted.list</name>
        <value>hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager</value>
    </property>

    <!-- 下面填入2.1.1中创建的数据库信息 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/metastore_standalone</value>
    <description>jdbc url</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>jdbc driver</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hms</value>
    <description>jdbc username</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>Hms@123</value>
    <description>jdbc password</description>
  </property>

  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>Hive在HDFS的工作目录,如果想要在本地,就加上file:前缀</description>
  </property>

  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://localhost:9083</value>
  </property>
</configuration>

初始化数据库:

bin/schematool -initSchema -dbType mysql -verbose

4.6 创建ranger service

进入ranger admin界面,选择HADOOP SQL,创建服务,填写信息如下图所示:

usernamepassword不是linux系统,而是默认权限生效的用户,如果这个用户不存在,ranger会自动创建并且来源设置为External

ranger界面,大数据,apache,大数据,java

创建完成后,我们可以看到默认创建了下面这些权限策略:

ranger界面,大数据,apache,大数据,java

随后启动我们的hive metastore服务:

bin/start-metastore

4.7 Java代码验证ranger权限生效

工程pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="<http://maven.apache.org/POM/4.0.0>"
         xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"
         xsi:schemaLocation="<http://maven.apache.org/POM/4.0.0> <http://maven.apache.org/xsd/maven-4.0.0.xsd>">
    <parent>
        <artifactId>base</artifactId>
        <groupId>com.github.weaksloth</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>hms-use-test</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-standalone-metastore</artifactId>
            <version>3.1.2</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.metastore.IMetaStoreClient;
import org.apache.hadoop.hive.metastore.RetryingMetaStoreClient;
import org.junit.Before;
import org.junit.Test;

public class HmsRangerITCase {

    private IMetaStoreClient hmsClient;

    @Before
    public void init() throws Exception {
        Configuration conf = new Configuration();
        conf.set("hive.metastore.uris", "thrift://localhost:9083");
        hmsClient = RetryingMetaStoreClient.getProxy(conf,false);
    }

    @Test
    public void testListCatalogs() throws Exception {
        hmsClient.getCatalogs().forEach(System.out::println);
    }

    @Test
    public void testGetCatalog() throws Exception {
        System.out.println(hmsClient.getCatalog("hive").toString());
    }

    @Test
    public void testListDatabases() throws Exception {
        hmsClient.getAllDatabases("hive").forEach(System.out::println);
    }

    @Test
    public void testListTables() throws Exception {
        hmsClient.getAllTables("flink").forEach(System.out::println);
    }
}

目前还没有研究出来,HiveMetaStoreClient是使用的什么用户,所以目前还是只能通过当前系统用户进行测试

4.8 flink使用hive catalog验证权限生效

这里我们使用flink sql client,使用hive catalog来进行测试,flink使用hive catalog的方法略过不是本文的重点,不清楚的可以参考flink官方文档

首先记住,当前操作系统用户是xcchen

cd $FLINK_HOME
bin/start-cluster.sh
bin/sql-client.sh embedded

进入flink交互式命令行之后,我们尝试访问创建hive catalog

-- 将hive-conf-dir该为metastore conf目录
create catalog myHive with (
   'type'='hive',
   'hive-conf-dir'='...'
);
use catalog myHive;
create database flink;
CREATE TABLE orders (
    order_number BIGINT,
    price        DECIMAL(32,2),
    buyer        ROW<first_name STRING, last_name STRING>,
    order_time   TIMESTAMP(3)
) WITH (
  'connector' = 'datagen'
);

因为我们xcchen这个用户是有权限的,在ranger-admin中可以看到,所以能够成功创建。


此时,我们随意切换一个用户,例如我们切换到root用户,重新执行上述命令和SQL脚本:

su root

创建catalog时会抛出以下错误,因为root这个用户,没有权限访问hms

[ERROR] Could not execute SQL statement. Reason:
org.apache.hadoop.hive.metastore.api.MetaException: Permission denied: user [root] does not have [SELECT] privilege on [default]

总结:由此可见,flink hive catalog连接hive metastore的时候,默认会使用当前的操作系统用户,由该用户结合ranger进行权限的校验。后续可以考虑改进hive连接器,实现参数传入用户

4.9 kyuubi使用hive metastore验证授权

kyuubi的安装使用以及对接hms可以参考我的其他文档,本文不做详细描述

这里的kyuubi我们只做了ranger的授权部分,认证部分暂时不在这里进行测试

# 启动spark standalone集群进行测试
$SPARK_HOME/sbin/start-all.sh

# 启动kyuubi
$KYUUBI_HOME/bin/kyuubi start

使用用户test进行连接测试:

bin/beeline -u 'jdbc:hive2://localhost:10009/;#hive.metastore.uris=thrift://localhost:9083' -n test

# 控制台结果如下:
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Permission denied: user [test] does not have [SELECT] privilege on [default])
        at org.apache.hadoop.hive.ql.metadata.Hive.getDatabase(Hive.java:1560)...

使用用户xcchen进行连接测试:

bin/beeline -u 'jdbc:hive2://localhost:10009/;#hive.metastore.uris=thrift://localhost:9083' -n xcchen

结果能正常访问hive metastore中的元数据


可以看到kyuubi对于用户的传递更为方便,只需要-n参数指定,就可以使用该用户去连接hms

4.10 插件原理分析

hive-site.xml中的配置可以看到,ranger metastore插件的原理是基于hive metastore提供的EventListener接口,感知请求metastore的sql信息,然后和ranger进行交互,进行权限的控制(hive、spark应该都是这个逻辑,基于其框架提供的EventListener)。核心代码可以查看:

org.apache.ranger.authorization.hive.authorizer.RangerHiveMetastoreAuthorizer

org.apache.ranger.authorization.hive.authorizer.RangerHiveMetastorePrivilegeHandler

5 es插件(未验证通过)

官方文档地址:https://cwiki.apache.org/confluence/display/RANGER/Elasticsearch+Plugin

es插件可以作用在index上,控制用户对于index的操作权限

5.1 es插件安装

这里我们不使用docker容器安装elasticsearch,而是在物理机上安装elasticsearch.具体的安装过程不是本文的重点,读者可以自行查找资料

elasticsearch版本:7.6.0(注意:低版本不适用于ranger-2.3.0-elasticsearch插件

安装完成后,将ranger插件解压缩,配置install.properties如下:

tar -zxvf ranger-2.3.0-elasticsearch-plugin.tar.gz
cd ranger-2.3.0-elasticsearch-plugin
vim install.properties
# 以下配置只展示修改的部分,未修改的配置不罗列出来,且读者应按照自己的环境调整相应配置

# ranger admin地址
POLICY_MGR_URL=http://192.168.58.1:6080

# ranger repository,这里填入的和后面要在ranger admin中配置的名称要保持一致
REPOSITORY_NAME=EsPluginTest

# elasticsearch安装根目录
COMPONENT_INSTALL_DIR_NAME=/opt/elasticsearch-6.2.2

# 配置该插件的审计日志写入位置,不配置则无法开启审计功能
XAAUDIT.ELASTICSEARCH.ENABLE=true
XAAUDIT.ELASTICSEARCH.URL=192.168.58.1
XAAUDIT.ELASTICSEARCH.USER=NONE
XAAUDIT.ELASTICSEARCH.PASSWORD=NONE
XAAUDIT.ELASTICSEARCH.INDEX=ranger-index
XAAUDIT.ELASTICSEARCH.PORT=9200
XAAUDIT.ELASTICSEARCH.PROTOCOL=http

# 建议配置为当前正在使用的用户
CUSTOM_USER=esuser
CUSTOM_GROUP=esgroup

开启elasticsearch插件

su root
./enable-elasticsearch-plugin.sh

Custom user and group is available, using custom user and group.
INFO: Creating /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin
INFO: Changing ownership of /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin to esuser:esgroup
+ Fri Jun 30 00:15:29 CST 2023 : elasticsearch: lib folder=/opt/elasticsearch-6.2.2/plugins conf folder=/opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin
+ Fri Jun 30 00:15:29 CST 2023 : Saving current config file: /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin/ranger-elasticsearch-audit.xml to /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin/.ranger-elasticsearch-audit.xml.20230630-001529 ...
+ Fri Jun 30 00:15:30 CST 2023 : Saving current config file: /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin/ranger-elasticsearch-security.xml to /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin/.ranger-elasticsearch-security.xml.20230630-001529 ...
+ Fri Jun 30 00:15:30 CST 2023 : Saving current config file: /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin/ranger-policymgr-ssl.xml to /opt/elasticsearch-6.2.2/config/ranger-elasticsearch-plugin/.ranger-policymgr-ssl.xml.20230630-001529 ...
+ Fri Jun 30 00:15:31 CST 2023 : Saving current JCE file: /etc/ranger/EsPluginTest/cred.jceks to /etc/ranger/EsPluginTest/.cred.jceks.20230630001531 ...
Ranger Plugin for elasticsearch has been enabled. Please restart elasticsearch to ensure that changes are effective.

重启elasticsearch

5.2 创建elasticsearch服务

serviceName:EsPluginTest

es地址:http://localhost:19200

ranger界面,大数据,apache,大数据,java

5.3 创建es服务policy

填写索引后,选择相应的操作权限,在图中可以看到关于es的操作权限

ranger界面,大数据,apache,大数据,java

6 hdfs插件

在使用hdfs插件前,请确保你已经安装好了hdfs

6.1 hdfs插件安装

tar -zxvf ranger-2.3.0-hdfs-plugin.tar.gz -C ~/Softwares/ranger

# 进入ranger hdfs插件目录
cd ~/software/ranger/ranger-2.3.0-hdfs-plugin

编辑install.properties,对以下配置进行修改:

POLICY_MGR_URL=http://localhost:6080

REPOSITORY_NAME=hdfs

COMPONENT_INSTALL_DIR_NAME=/home/chen/Softwares/hadoop

XAAUDIT.ELASTICSEARCH.ENABLE=true
XAAUDIT.ELASTICSEARCH.URL=localhost
XAAUDIT.ELASTICSEARCH.USER=NONE
XAAUDIT.ELASTICSEARCH.PASSWORD=NONE
XAAUDIT.ELASTICSEARCH.INDEX=ranger-index
XAAUDIT.ELASTICSEARCH.PORT=9200
XAAUDIT.ELASTICSEARCH.PROTOCOL=http

CUSTOM_USER=xcchen
CUSTOM_GROUP=xcchen

执行脚本开启插件

su root
./enable-hdfs-plugin.sh

Custom user and group is available, using custom user and group.
+ 2023年 04月 02日 星期日 23:32:24 CST : hadoop: lib folder=/home/chen/Softwares/hadoop/share/hadoop/hdfs/lib conf folder=/home/chen/Softwares/hadoop/etc/hadoop
+ 2023年 04月 02日 星期日 23:32:24 CST : Saving current config file: /home/chen/Softwares/hadoop/etc/hadoop/hdfs-site.xml to /home/chen/Softwares/hadoop/etc/hadoop/.hdfs-site.xml.20230402-233224 ...
+ 2023年 04月 02日 星期日 23:32:24 CST : Saving current config file: /home/chen/Softwares/hadoop/etc/hadoop/ranger-hdfs-audit.xml to /home/chen/Softwares/hadoop/etc/hadoop/.ranger-hdfs-audit.xml.20230402-233224 ...
+ 2023年 04月 02日 星期日 23:32:24 CST : Saving current config file: /home/chen/Softwares/hadoop/etc/hadoop/ranger-hdfs-security.xml to /home/chen/Softwares/hadoop/etc/hadoop/.ranger-hdfs-security.xml.20230402-233224 ...
+ 2023年 04月 02日 星期日 23:32:24 CST : Saving current config file: /home/chen/Softwares/hadoop/etc/hadoop/ranger-policymgr-ssl.xml to /home/chen/Softwares/hadoop/etc/hadoop/.ranger-policymgr-ssl.xml.20230402-233224 ...
+ 2023年 04月 02日 星期日 23:32:25 CST : Saving current JCE file: /etc/ranger/hdfs/cred.jceks to /etc/ranger/hdfs/.cred.jceks.20230402233225 ...
Ranger Plugin for hadoop has been enabled. Please restart hadoop to ensure that changes are effective.

重新启动hdfs:

stop-dfs.sh
start-dfs.sh

6.2 创建hdfs服务

创建ranger service,如下图所示:

ranger界面,大数据,apache,大数据,java

创建测试目录进行测试:

cd /tmp
echo "hello ranger" > a.txt
echo "hello ranger" > b.txt
hadoop fs -mkdir -p /ranger-test/dir-a
hadoop fs -put a.txt /ranger-test/dir-a

6.3 创建hdfs服务policy

创建policy,期望的权限策略为:

用户hadoop有操作/ranger-test下的所有文件权限,而用户xcchen只有读权限

ranger界面,大数据,apache,大数据,java

6.4 测试权限策略

# 以hadoop用户进行文件查看
su hadoop
hadoop fs -cat /ranger-test/dir-a/a.txt

# output
hello ranger
# 以xcchen用户进行文件的读写操作
su xcchen
hadoop fs -cat /ranger-test/dir-a/a.txt  # 成功打印输出

# 尝试写入文件
hadoop fs -put b.txt /ranger-test/dir-a

# 控制台输出如下,说明权限策略生效
put: Permission denied: user=xcchen, access=WRITE, inode="/ranger-test/dir-a":hadoop:supergroup:drwxr-xr-x

:TODO 测试下来我有一个疑惑就是为什么不在策略下的用户仍然能够读文件,但是不能写。所以ranger的权限控制和hdfs本身的ACL有什么区别没有?

7 spark插件

spark sql集成ranger实现权限控制,本文基于kyuubi的spark authz插件实现,讲述kyuubi spark authz插件的使用,官方文档

7.1 编译与安装

用户可以在编译时指定spark版本和ranger版本,建议和使用保持一致

build/mvn clean package -pl :kyuubi-spark-authz_2.12 -DskipTests -Dspark.version=3.1.1 -Dranger.version=2.3.0 -Dmaven.test.skip=true

编译kyuubi后,在下面两个目录可以看到相应的jar包:(个人认为kyuubi使用shaded插件将依赖全部打到一个包里会更方便,但是kyuubi没有这么做)

  • extensions/spark/kyuubi-spark-authz/target目录下可以看到kyuubi-spark-authz_*.jar,这是核心程序jar包
  • ./extensions/spark/kyuubi-spark-authz/target/scala-${scala.binary.version}/jars

拷贝上述所有jar包到$SPARK_HOME/jars目录下

7.2 插件配置

$SPARK_HOME/conf目录下新建ranger-spark-security.xmlranger-spark-audit.xml

ranger-spark-security.xml:

<configuration>
    <property>
        <name>ranger.plugin.spark.policy.rest.url</name>
        <value>http://localhost:6080</value>
    </property>

    <property>
        <name>ranger.plugin.spark.service.name</name>
        <value>sparkAuthTest</value>
    </property>

    <property>
        <name>ranger.plugin.spark.policy.cache.dir</name>
        <value>/home/xcchen/software/spark/spark-3.1.1/ranger-policy-cache</value>
    </property>

    <property>
        <name>ranger.plugin.spark.policy.pollIntervalMs</name>
        <value>5000</value>
    </property>

    <property>
        <name>ranger.plugin.spark.policy.source.impl</name>
        <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
    </property>

</configuration>

ranger-spark-audit.xml(这里我将审计日志关闭了,如需开启请自行配置)

<configuration>

    <property>
        <name>xasecure.audit.is.enabled</name>
        <value>false</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db</name>
        <value>false</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.jdbc.driver</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.jdbc.url</name>
        <value>jdbc:mysql://10.171.161.78/ranger</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.password</name>
        <value>rangeradmin</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.user</name>
        <value>rangeradmin</value>
    </property>

</configuration>

7.3 创建spark sql服务

ranger界面,大数据,apache,大数据,java

7.4 配置policy

我们配置权限,让用户zhangsan只能访问spark.source这张表的id字段,其他表和字段无法访问;而用户xcchen则所有表都可以访问

记得要给用户zhangsan配置一个default库的访问权限,因为kyuubi默认会进入

ranger界面,大数据,apache,大数据,java

ranger界面,大数据,apache,大数据,java

7.5 测试权限

测试权限时确保kyuubi配置正确,具体配置可参考官方文档

使用xcchen用户去访问:

bin/beeline -u 'jdbc:hive2://localhost:10009/;#hive.metastore.uris=thrift://localhost:9083' -n xcchen
use spark;
show tables;

+-----------+------------+--------------+
| database  | tableName  | isTemporary  |
+-----------+------------+--------------+
| spark     | source     | false        |
| spark     | target     | false        |
+-----------+------------+--------------+

使用zhangsan用户去访问:

use spark;
show tables;

+-----------+------------+--------------+
| database  | tableName  | isTemporary  |
+-----------+------------+--------------+
| spark     | source     | false        |
+-----------+------------+--------------+

zhangsan用户看不到未授权的表,接下来测试查询source表的所有字段:select * from source:

Error: org.apache.kyuubi.KyuubiSQLException: org.apache.kyuubi.KyuubiSQLException: Error operating ExecuteStatement: org.apache.kyuubi.plugin.spark.authz.AccessControlException: Permission denied: user [zhangsan] does not have [select] privilege on [spark/source/name]

只查询id字段可以正常显示,如果要查询所有字段则会报错,说明列级别的权限控制已经实现

7.6 行级过滤

TODO

7.7 数据脱敏

TODO

疑难杂症与解决

mysql8

如果你使用mysql8作为数据库,会发现各种各样的问题,原因就是ranger的配置文件不能手动去修改jdbc的url,导致allowPublicKeyRetrieval无法设置为true,因为不管是ranger-admin的初始化程序还是web应用程序,都是无法在配置文件中进行设置的。当然都是可以解决的,不过会很麻烦就是了

初始化ranger-admin报错

使用mysql8数据库,在执行ranger-admin初始化的时候,会抛出以下异常

SQLException : SQL state: 08001 java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed ErrorCode: 0

使用mysql8以上的数据库会出现这种问题,很坑的是在install.properties无法配置allowPublicKeyRetrieval=true,但是我们也有解决办法:

分析了初始化脚本后,我们可以看到调用了db_setup.py这个python脚本进行的数据库初始化,找到useSSL=false在后面添加allowPublicKeyRetrieval=true

chmod u+w db_setup.py
vim db_setup.py

搜索useSSL并修改,然后再执行set_up.sh,即可成功运行

db_ssl_param="?useSSL=false&allowPublicKeyRetrieval=true

启动ranger-admin异常

在执行ranger-admin start命令后,发现一切是正常的,但是就是无法登录。查看日志文件发现无法获取jdbc连接

2023-03-08 05:35:17,638 [localhost-startStop-1] INFO [PropertiesUtil.java:332] ranger.jpa.jdbc.url=jdbc:log4jdbc:mysql://localhost:3306/ranger?useSSL=false

work.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Connections could not be acquired from the underlying database!

通过日志可以看到问题是一样的,jdbc的连接中没有加入allowPublicKeyRetrieval参数,目前这个问题还没有解决文章来源地址https://www.toymoban.com/news/detail-625385.html

到了这里,关于Apache Ranger入门与进阶使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 权限管理-Ranger的介绍和使用(集成Hive)

    介绍 Apache Ranger是一个Hadoop平台上的全方位数据安全管理框架,它可以为整个Hadoop生态系统提供全面的安全管理。 随着企业业务的拓展,企业可能在多用户环境中运行多个工作任务,这就需要一个可以对安全策略进行集中管理,配置和监控用户访问的框架。Ranger由此产生!

    2024年02月10日
    浏览(33)
  • 开源大数据集群部署(十一)Ranger 集成Hadoop集群

    作者:櫰木 1、节点选择 部署在两个namenode节点 cd /opt/bigdata tar -xzvf ranger-2.3.0-hdfs-plugin.tar.gz -C /opt/ cd /opt/ranger-2.3.0-hdfs-plugin vim install.properties ranger hdfs初始化 初始化完成后会在/opt/hadoop/etc/hadoop目录下生成3个文件 在rangeradmin页面上进行配置 servicename必须和install.properties中的R

    2024年02月22日
    浏览(39)
  • 流数据湖平台Apache Paimon(三)Flink进阶使用

    2.9.1 写入性能 Paimon的写入性能与检查点密切相关,因此需要更大的写入吞吐量: 增加检查点间隔,或者仅使用批处理模式。 增加写入缓冲区大小。 启用写缓冲区溢出。 如果您使用固定存储桶模式,请重新调整存储桶数量。 2.9.1.1 并行度 建议sink的并行度小于等于bucket的数量

    2024年02月09日
    浏览(26)
  • 大数据 Ranger2.1.0 适配 Kafka3.4.0

    根据官方说明Kafka3.0以上版本将会被替换权限认证方式,包括 类和方法 的变换,所以需要对ranger中继承 kafka 的实现中,修改相应的逻辑 Kafka3.0以上版本将会被替换权限认证方式,包括 类和方法 的变换, Github PR https://github.com/apache/kafka/pull/10450 apache-rangerpom.xml,该文件中主要

    2024年02月08日
    浏览(29)
  • 提高数据的安全性和可控性,数栈基于 Ranger 实现的 Spark SQL 权限控制实践之路

    在企业级应用中,数据的安全性和隐私保护是极其重要的。Spark 作为数栈底层计算引擎之一,必须确保数据只能被授权的人员访问,避免出现数据泄露和滥用的情况。为了实现Spark SQL 对数据的精细化管理及提高数据的安全性和可控性,数栈基于 Apache Ranger 实现了 Spark SQL 对数

    2024年02月05日
    浏览(33)
  • Ranger概述及安装配置

    希望拥有一个框架,可以管理大多数框架的授权,包括: hdfs的目录读写权限 各种大数据框架中的标的权限,列级(字段)权限,甚至行级权限,函数权限(UDF)等相关资源的权限 是否能帮忙做书库脱敏 Ranger框架应运而生。 Apache Ranger是一个用来在Hadoop平台上进行监控,启动

    2024年01月22日
    浏览(25)
  • 【报错-大数据技术-Hbase & Ranger】hbase创建、删除(表、命名空间)无权限问题,但是向表put、get、scan数据报错

    1、问题描述 使用hbase shell执行创建命名空间、创建表、插入数据、获取数据、查看数据、删除命名空间、删除表等命令操作,发现可以创建命名空间、创建表、删除命名空间、删除表,但是插入数据、获取数据、查看数据等操作却报没有权限的问题,但是我已在Ranger上赋予用

    2024年03月15日
    浏览(81)
  • hadoop之ranger权限配置(二)

    需要编译的包,我都已经在我上传的资源包https://download.csdn.net/download/weixin_40496191/87358396 安装依赖软件:yum -y install wget git gcc gcc-c++ make autoconf automake libtool sharutils asciidoc xmlto cmake unzip zip 安装jdk1.8 安装maven 1)创建文件夹并且进入:mkdir /home/hadoop/maven --cd /home/hadoop/maven 2)下载

    2024年02月09日
    浏览(37)
  • 配置工具篇(tmux+ranger+lazygit)

    官网解释:tmux是一个终端多路复用器:它允许在单个屏幕上创建、访问和控制多个终端。tmux可以从屏幕上分离出来,继续在后台运行,然后再重新连接。 此版本在Open BSD、Free BSD、Net BSD、Linux、mac OS和Solaris上运行。 官网地址:tmux/tmux: tmux source code (github.com) 安装 启动 上面命

    2024年02月06日
    浏览(30)
  • ranger,hive,hdfs的三者的权限管理

    用户在hdfs上的权限 可以看出只给了用户write权限,尝试登录xwq用户,在datagrip上登录成功 经过实验验证:要想使用datagrip或者hive-cli登录hive,需要保证hdfs的权限在/目录至少要有write权限 write权限可以创建文件夹 execute是执行的命令,在只有write权限时是无法执行成功 所以可以

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包