Starrocks 开启 Ranger 权限认证支持

news/2025/3/15 22:15:26/

Starrocks 开启 Ranger 权限认证支持

SR 支持版本 : 3.1.9 及以后版本,Ranger 版本 2.1 及以后版本

Ranger

Apache Ranger 提供了一个集中式的安全管理框架,用户可以通过可视化的 Web 页面来定制各种访问策略,决定哪些角色能访问哪些数据,对 Hadoop 生态的各个组件和服务进行细粒度的数据访问控制,确保数据的安全性和合规性。

Apache Ranger 提供以下核心模块:

  • Ranger Admin:Ranger 的核心模块,内置了一个 Web 界面,用户可以通过界面或者 REST 接口来创建和更新安全策略。Hadoop 生态各个组件的 Plugin 定期对这些策略进行轮询和拉取。
  • Agent Plugin:嵌入到 Hadoop 生态圈组件的 Plugin,定期从 Ranger Admin 拉取安全策略,存储在本地文件中。当用户访问组件时,Plugin 会根据安全策略对请求进行安全评估,将结果反馈给相应组件。
  • User Sync:用于拉取用户和用户组的信息,将用户和用户组的权限数据同步到 Ranger 的数据库中。

权限控制方式

StarRocks 集成 Apache Ranger 后可以实现以下权限控制方式:

  • 在 Ranger 中创建 StarRocks Service 实现权限控制。用户访问 StarRocks 内表、外表或其他对象时,会根据 StarRocks Service 中配置的访问策略来进行访问控制。
  • 对于 External Catalog,可以复用 Ranger 上的外部 Service(如 Hive Service)实现访问控制。StarRocks 支持对于不同的 Catalog 匹配不同的 Ranger service。用户访问外部数据源时,会直接根据数据源对应的 Service 来进行访问控制。

通过集成 Apache Ranger,您可以实现以下访问控制模式:

  • 全部使用 Ranger 进行权限管理,在 StarRocks Service 内统一管理内表、外表及所有对象。
  • 全部使用 Ranger 进行权限管理。对于内表及内部对象,在 StarRocks Service 内管理;对于 External Catalog,无需额外创建,直接复用对应外部数据源对应的 Ranger Service。
  • External Catalog 使用 Ranger 进行权限管理,复用外部数据源对应的 Ranger Service;内部对象及内部表使用StarRocks 原生 RBAC 鉴权模式,不集成 Ranger。

权限管理流程:

  1. 对于用户认证,您也可以选择通过 LDAP 来完成。Ranger 可以同步 LDAP 用户,并对其进行权限规则配置。StarRocks 也可以通过 LDAP 完成用户登录认证。
  2. 在用户发起查询时,StarRocks 会对查询语句进行解析,向 Ranger 传递用户信息及所需权限;Ranger 则会在对应 Service 中根据创建的访问策略来判断用户是否有访问权限,并向 StarRocks 返回鉴权结果。如果用户有访问权限,StarRocks 会返回查询数据;如果用户无访问权限,StarRocks 会返回报错。

集成 SR Service

安装 ranger-starrocks-plugin

该插件的作用主要是在 Ranger WEB 配置权限时提供 DB,Table 等的输入提示功能; 且在创建 Starrocks Service 时 Test 功能无法使用;不影响权限正常控制;

安装步骤 ;

  • 在 Ranger Admin 的 ews/webapp/WEB-INF/classes/ranger-plugins 目录下创建 starrocks 文件夹。
  • 下载 plugin-starrocks/target/ranger-starrocks-plugin-3.0.0-SNAPSHOT.jar 和 mysql-connector-j.jar,并放入 starrocks 文件夹内。
  • 重启 Ranger Admin

由于笔者 Ranger 授权已有其他组件入口,所以暂不安装插件

创建 Starrocks Service

下载对应的 json 文件 https://github.com/StarRocks/ranger/blob/master/agents-common/src/main/resources/service-defs/ranger-servicedef-starrocks.json

注意:如果没有安装 anger-starrocks-plugin 需要将 json 文件中的 implClass 修改为空

使用 Ranger 的管理员账户运行以下命令,添加 StarRocks Service

curl -u <ranger_adminuser>:<ranger_adminpwd> \
-X POST -H "Accept: application/json" \
-H "Content-Type: application/json" http://<ranger-ip>:<ranger-port>/service/plugins/definitions -d@ranger-servicedef-starrocks.json

添加成功后Ranger Web UI 会出现 Starrocks 的Service

在这里插入图片描述

点击 + 号图标添加需要整合Ranger的SR服务;输入 JDBC 地址和用户名密码;直接保存即可

  • Service Name: 服务名称,必填。
  • Display Name: 要显示在 STARROCKS 下的服务名称。如果不指定,则显示 Service Name
  • UsernamePassword:FE 的账号和密码。用于后续创建 Policy 时对象名的自动补全,不影响 StarRocks 与 Ranger 的连通性。如果您希望使用自动补全功能,请至少配置一个默认激活 db_admin 角色的用户。
  • jdbc.url:填写 StarRocks 集群 FE 的 IP 及端口。

在这里插入图片描述

如果没有添加ranger-starrocks-plugin插件,Test时不能成功的

Starrocks FE Conf 添加配置
  • 修改所有 FE 的配置文件,fe.conf 添加 access_control=ranger

  • fe/conf 目录新增 ranger-starrocks-security.xml 配置文件

主要修改

ranger.plugin.starrocks.service.name :注册的 SR Service 名称 ; 这里为 SR

ranger.plugin.starrocks.policy.rest.url : 改为 Ranger Admin 的地址

其他的按需修改

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><name>ranger.plugin.starrocks.service.name</name><value>SR</value><description>Name of the Ranger service containing policies for this StarRocks instance</description></property><property><name>ranger.plugin.starrocks.policy.source.impl</name><value>org.apache.ranger.admin.client.RangerAdminRESTClient</value><description>Class to retrieve policies from the source</description></property><property><name>ranger.plugin.starrocks.policy.rest.url</name><value>http://localhost:6080</value><description>URL to Ranger Admin</description></property><property><name>ranger.plugin.starrocks.policy.pollIntervalMs</name><value>30000</value><description>How often to poll for changes in policies?</description></property><property><name>ranger.plugin.starrocks.policy.rest.client.connection.timeoutMs</name><value>30000</value><description>S3 Plugin RangerRestClient Connection Timeout in Milli Seconds</description></property><property><name>ranger.plugin.starrocks.policy.rest.client.read.timeoutMs</name><value>30000</value><description>S3 Plugin RangerRestClient read Timeout in Milli Seconds</description></property>
</configuration>

(可选)如果您希望使用 Ranger 的 Audit Log 功能,则需要在 StarRocks 集群每一台 FE 机器的 fe/conf文件夹内创建 [ranger-starrocks-audit.xml](https://github.com/StarRocks/ranger/blob/master/plugin-starrocks/conf/ranger-starrocks-audit.xml)。将内容拷贝,**修改xasecure.audit.solr.solr_url中的solr_url为自己的solr_url**,并保存文件。

报错处理:

到这一步启动 fe 报错 : java.io.FileNotFoundException: /data/test/fe/conf/xasecure-audit.xml

2025-01-16 14:50:57.772+08:00 INFO (main|1) [RangerConfiguration.addResourceIfReadable():50] addResourceIfReadable(ranger-starrocks-security.xml): resource file is file:/data/test/fe/conf/ranger-starrocks-security.xml
2025-01-16 14:50:57.773+08:00 ERROR (main|1) [RangerConfiguration.addResourceIfReadable():61] addResourceIfReadable(ranger-starrocks-policymgr-ssl.xml): couldn't find resource file location
2025-01-16 14:50:57.774+08:00 ERROR (main|1) [Configuration.loadResource():3119] error parsing conf file:/data/test/fe/conf/xasecure-audit.xml
java.io.FileNotFoundException: /data/test/fe/conf/xasecure-audit.xml (没有那个文件或目录)at java.io.FileInputStream.open0(Native Method) ~[?:?]at java.io.FileInputStream.open(FileInputStream.java:219) ~[?:?]at java.io.FileInputStream.<init>(FileInputStream.java:157) ~[?:?]at java.io.FileInputStream.<init>(FileInputStream.java:112) ~[?:?]at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86) ~[?:?]at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184) ~[?:?]at org.apache.hadoop.conf.Configuration.parse(Configuration.java:3040) ~[hadoop-common-3.4.0.jar:?]at org.apache.hadoop.conf.Configuration.getStreamReader(Configuration.java:3133) ~[hadoop-common-3.4.0.jar:?]at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3094) ~[hadoop-common-3.4.0.jar:?]at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:3072) ~[hadoop-common-3.4.0.jar:?]at org.apache.hadoop.conf.Configuration.loadProps(Configuration.java:2945) ~[hadoop-common-3.4.0.jar:?]at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2927) ~[hadoop-common-3.4.0.jar:?]at org.apache.hadoop.conf.Configuration.get(Configuration.java:1265) ~[hadoop-common-3.4.0.jar:?]at org.apache.ranger.authorization.hadoop.config.RangerPluginConfig.addSslConfigResource(RangerPluginConfig.java:347) ~[ranger-plugins-common-2.5.0.jar:2.5.0]at org.apache.ranger.authorization.hadoop.config.RangerPluginConfig.addResourcesForServiceType(RangerPluginConfig.java:274) ~[ranger-plugins-common-2.5.0.jar:2.5.0]at org.apache.ranger.authorization.hadoop.config.RangerPluginConfig.<init>(RangerPluginConfig.java:67) ~[ranger-plugins-common-2.5.0.jar:2.5.0]at com.starrocks.privilege.ranger.RangerAccessController.buildRangerPluginContext(RangerAccessController.java:56) ~[starrocks-fe.jar:?]at com.starrocks.privilege.ranger.RangerAccessController.<init>(RangerAccessController.java:45) ~[starrocks-fe.jar:?]at com.starrocks.privilege.ranger.starrocks.RangerStarRocksAccessController.<init>(RangerStarRocksAccessController.java:41) ~[starrocks-fe.jar:?]at com.starrocks.server.GlobalStateMgr.<init>(GlobalStateMgr.java:775) ~[starrocks-fe.jar:?]at com.starrocks.server.GlobalStateMgr.<init>(GlobalStateMgr.java:588) ~[starrocks-fe.jar:?]at com.starrocks.server.GlobalStateMgr.<init>(GlobalStateMgr.java:583) ~[starrocks-fe.jar:?]at com.starrocks.server.GlobalStateMgr$SingletonHolder.<clinit>(GlobalStateMgr.java:578) ~[starrocks-fe.jar:?]at com.starrocks.server.GlobalStateMgr.getCurrentState(GlobalStateMgr.java:800) ~[starrocks-fe.jar:?]at com.starrocks.StarRocksFE.start(StarRocksFE.java:128) ~[starrocks-fe.jar:?]at com.starrocks.StarRocksFE.main(StarRocksFE.java:83) ~[starrocks-fe.jar:?]

解决 :

在 conf 目录下新建 xasecure-audit.xml 文件可解决

内容为 :

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
</configuration>

Hive Catalog 复用原来的权限信息

对于 External Catalog,可以复用外部 Service(如 Hive Service)实现访问控制。StarRocks 支持对于不同的 Catalog 匹配不同的 Ranger service。用户访问外表时,会直接根据对应外表的 Service 来进行访问控制。用户权限与 Ranger 同名用户一致。

以 Hive Catalog 为例

  • 复制您 Hive 集群重的的 Ranger 相关配置文件 ranger-hive-security.xml 和 ranger-hive-audit.xml 拷贝至所有 FE 机器的 fe/conf 文件下,请确保配置文件中 Ranger 的 IP 以及端口正确。这两个文件在 Hive 安装目录的 conf文件夹下可以找到
  • 重启 FE ;如果有多个节点需要全部进行此操作

为Catalog设置权限 <ranger_hive_service_name> 为 ranger 生效的 Hive service 的名称

-- 新建catalog时指定CREATE EXTERNAL CATALOG hive_catalog_1PROPERTIES ("type" = "hive","hive.metastore.type" = "hive","hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083","ranger.plugin.hive.service.name" = "<ranger_hive_service_name>")-- 为已存在的catalog 新增ALTER CATALOG hive_catalog_1SET ("ranger.plugin.hive.service.name" = "<ranger_hive_service_name>");

查询使用;出现权限报错说明配置生效了

在这里插入图片描述

Starrocks 集成 Ranger 及 Catalog 权限复用完结撒花 !!!


http://www.ppmy.cn/news/1564144.html

相关文章

Day38补20250117代码随想录动态规划6 322.零钱兑换|279.完全平方数|139.单词拆分|多重背包问题|总结

Day38补20250117代码随想录动态规划6 322.零钱兑换|279.完全平方数|139.单词拆分|多重背包问题|总结 【多重背包问题】稍微了解了一下&#xff0c;没有具体敲代码 322.零钱兑换 题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amoun…

海康MV-EB435i立体相机SDK安装(ROS 2)

文章目录 一、简介二、驱动配置小结 一、简介 MV-EB435i相机是一款低成本、小体积、配置全面的立体相机&#xff0c;凭借硬件级的深度图像处理方案&#xff0c;相机可在高性能输出的同时维持低功耗的水平。相机采用海康MV3D SDK&#xff0c;并提供跨平台支持&#xff0c;广泛应…

内网渗透测试工具及渗透测试安全审计方法总结

1. 内网安全检查/渗透介绍 1.1 攻击思路 有2种思路&#xff1a; 攻击外网服务器&#xff0c;获取外网服务器的权限&#xff0c;接着利用入侵成功的外网服务器作为跳板&#xff0c;攻击内网其他服务器&#xff0c;最后获得敏感数据&#xff0c;并将数据传递到攻击者&#xff0…

2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)

游泳竞技策略优化模型代码详解 第一题&#xff1a;速度优化模型 在这一部分&#xff0c;我们将详细解析如何通过数学建模来优化游泳运动员在不同距离比赛中的速度分配策略。 1. 模型概述 我们的模型主要包含三个核心文件&#xff1a; speed_optimization.py: 速度优化的核…

2025年供应链攻击或成企业主要威胁

2024年由于网络安全领域的活动显著增加&#xff0c;网络威胁动态性和数字攻击面不断扩大&#xff0c;预计2025年企业将面临更大的网络攻击挑战。 安全专家预测&#xff0c;在众多形式的网络攻击中&#xff0c;供应链攻击正成为一种日益严重的安全隐患&#xff0c;它通过渗透企…

Lambda 架构之实时处理层的深度剖析:从原理到 Java 实战

一、背景知识 在当今的信息时代&#xff0c;数据的产生速度呈现爆炸式增长&#xff0c;并且越来越多的业务场景对数据处理的实时性提出了严格的要求。传统的数据处理架构往往侧重于批处理&#xff0c;对于实时数据的处理能力有限&#xff0c;难以满足诸如实时监控、即时推荐、…

【UNION与UNION ALL的区别?】

UNION与UNION ALL的区别&#xff1f; UNION和UNION ALL都是用来合并两个或多个SQL查询的结果集的运算符&#xff0c;但它们之间有一些关键的区别&#xff1a; 重复数据处理: UNION会自动去除所有结果集中的重复记录。这意味着如果你从不同的查询中得到了相同的行&#xff0c;U…

Java ee 文件操作和IO

字节输入流 字节输入流通过FileInputStream实现对文件的读取操作。 通过文件路径来创建一个输出流&#xff0c;通过一个byte数组来接受读取到的文件内容&#xff0c;用read方法进行循环读取。当返回-1时则表示读取完成。关闭输入流。 import java.io.FileInputStream; import…