Starrocks 开启 Ranger 权限认证支持

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 授权已有其他组件入口,所以暂不安装插件

创建 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

shell 复制代码
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 复制代码
<?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

shell 复制代码
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 复制代码
<?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.xmlranger-hive-audit.xml 拷贝至所有 FE 机器的 fe/conf 文件下,请确保配置文件中 Ranger 的 IP 以及端口正确。这两个文件在 Hive 安装目录的 conf文件夹下可以找到
  • 重启 FE ;如果有多个节点需要全部进行此操作

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

sql 复制代码
-- 新建catalog时指定
  CREATE EXTERNAL CATALOG hive_catalog_1
  PROPERTIES (
      "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_1
  SET ("ranger.plugin.hive.service.name" = "<ranger_hive_service_name>");
  

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

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

相关推荐
狮歌~资深攻城狮2 小时前
HBase性能优化秘籍:让数据处理飞起来
大数据·hbase
Elastic 中国社区官方博客3 小时前
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
努力的小T3 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
workflower3 小时前
Prompt Engineering的重要性
大数据·人工智能·设计模式·prompt·软件工程·需求分析·ai编程
枫叶落雨2224 小时前
08-Elasticsearch
运维·jenkins
API_technology5 小时前
电商搜索API的Elasticsearch优化策略
大数据·elasticsearch·搜索引擎
黄雪超5 小时前
大数据SQL调优专题——引擎优化
大数据·数据库·sql
The god of big data5 小时前
MapReduce 第二部:深入分析与实践
大数据·mapreduce
爆更小小刘5 小时前
Linux下基本指令(4)
linux·运维·服务器
我码玄黄5 小时前
解决本地模拟IP的DHCP冲突问题
linux·运维