Ranger 鉴权

Apache Ranger 是一个用来在 Hadoop 平台上进行监控,启用服务,以及全方位数据安全访问管理的安全框架。 使用 ranger 后,会通过在 Ranger 侧配置权限代替在 Doris 中执行 Grant 语句授权。 Ranger 的安装和配置见下文:安装和配置 Doris Ranger 插件

Ranger 示例​

更改 Doris 配置​

  1. 在 fe/conf/fe.conf 文件中配置鉴权方式为 ranger access_controller_type=ranger-doris

  2. 在所有 FE 的 conf 目录创建 ranger-doris-security.xml 文件,内容如下:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <property>
            <name>ranger.plugin.doris.policy.cache.dir</name>
            <value>/path/to/ranger/cache/</value>
        </property>
        <property>
            <name>ranger.plugin.doris.policy.pollIntervalMs</name>
            <value>30000</value>
        </property>
        <property>
            <name>ranger.plugin.doris.policy.rest.client.connection.timeoutMs</name>
            <value>60000</value>
        </property>
        <property>
            <name>ranger.plugin.doris.policy.rest.client.read.timeoutMs</name>
            <value>60000</value>
        </property>
        <property>
            <name>ranger.plugin.doris.policy.rest.url</name>
            <value>http://172.21.0.32:6080</value>
        </property>
        <property>
            <name>ranger.plugin.doris.policy.source.impl</name>
            <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
        </property>
        <property>
            <name>ranger.plugin.doris.service.name</name>
            <value>doris</value>
        </property>
    </configuration>

    其中需要将 ranger.plugin.doris.policy.cache.dir 和 ranger.plugin.doris.policy.rest.url 改为实际值。

  3. 启动集群

权限示例​

  1. 在 Doris 中创建 user1。
  2. 在 Doris 中,先使用 admin 用户创建一个 Catalog:hive。
  3. 在 Ranger 中创建 user1。
全局权限​

相当于 Doris 内部授权语句的 grant select_priv on *.*.* to user1;

  • catalog 同级下拉框可以找到 global 选项

  • 输入框里只能输入 *

Catalog 权限​

相当于 Doris 内部授权语句的 grant select_priv on hive.*.* to user1;

Database 权限​

相当于 Doris 内部授权语句的 grant select_priv on hive.tpch.* to user1;

Table 权限​

这里的table泛指 表/视图/异步物化视图

相当于 Doris 内部授权语句的 grant select_priv on hive.tpch.user to user1;

列权限​

相当于 Doris 内部授权语句的 grant select_priv(name,age) on hive.tpch.user to user1;

Resource 权限​

相当于 Doris 内部授权语句的 grant usage_priv on resource 'resource1' to user1;

  • catalog 同级下拉框可以找到 resource 选项
Workload Group 权限​

相当于 Doris 内部授权语句的 grant usage_priv on workload group 'group1' to user1;

  • catalog 同级下拉框可以找到 workload group 选项

行权限示例​

2.1.3 版本支持

  1. 参考 权限示例 给 user1 分配 internal.db1.user 表的 select 权限。

  2. 在 Ranger 中添加一个 Row Level Filter policy

  3. 使用 user1 登录 Doris。执行 select * from internal.db1.user,只能看到满足 id > 3 且 age = 2 的数据。

数据脱敏示例​

2.1.3 版本支持

  1. 参考 权限示例 给 user1 分配 internal.db1.user 表的 select 权限。

  2. 在 Ranger 中添加一个 Masking policy

  3. 使用 user1 登录 Doris。执行 select * from internal.db1.user,看到的 phone 是按照指定规则脱敏后的数据。

常见问题​

  1. ranger 访问失败,怎么查看日志

    在所有 FE 的 conf 目录创建 log4j.properties 文件,内容如下:

    复制代码
    log4j.rootLogger = warn,stdout,D
    
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = /path/to/fe/log/ranger.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = INFO
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

    其中 log4j.appender.D.File 改为实际值,用于存放 Ranger 插件的日志。

  2. 配置了 Row Level Filter policy ,但是用户查询时报没有权限

    Row Level Filter policy 仅用来限制用户访问表中数据的特定记录, 仍需通过 ACCESS POLICY 为用户授权

安装和配置 Doris Ranger 插件​

安装插件​

  1. 下载以下文件

  2. 将下载好的文件放到 Ranger 服务的 ranger-plugins/doris 目录下,如:

    复制代码
    /usr/local/service/ranger/ews/webapp/WEB-INF/classes/ranger-plugins/doris/ranger-doris-plugin-3.0.0-SNAPSHOT.jar
    /usr/local/service/ranger/ews/webapp/WEB-INF/classes/ranger-plugins/doris/mysql-connector-java-8.0.25.jar
  3. 重启 Ranger 服务。

  4. 下载 ranger-servicedef-doris.json

  5. 执行以下命令上传定义文件到 Ranger 服务:

    复制代码
    curl -u user:password -X POST \
        -H "Accept: application/json" \
        -H "Content-Type: application/json" \
        http://172.21.0.32:6080/service/plugins/definitions \
        -d@ranger-servicedef-doris.json

    其中用户名密码是登录 Ranger WebUI 所使用的用户名密码。

    服务地址端口可以再 ranger-admin-site.xml 配置文件的 ranger.service.http.port 配置项查看。

    如执行成功,会返回 Json 格式的服务定义,如:

    复制代码
    {
      "id": 207,
      "guid": "d3ff9e41-f9dd-4217-bb5f-3fa9996454b6",
      "isEnabled": true,
      "createdBy": "Admin",
      "updatedBy": "Admin",
      "createTime": 1705817398112,
      "updateTime": 1705817398112,
      "version": 1,
      "name": "doris",
      "displayName": "Apache Doris",
      "implClass": "org.apache.ranger.services.doris.RangerServiceDoris",
      "label": "Doris",
      "description": "Apache Doris",
      "options": {
        "enableDenyAndExceptionsInPolicies": "true"
      },
      ...
    }

    如想重新创建,则可以使用以下命令删除服务定义后,再重新上传:

    复制代码
    curl -v -u user:password -X DELETE \
    http://172.21.0.32:6080/service/plugins/definitions/207

    其中 207 是创建时返回的 id。删除前,需在 Ranger WebUI 界面删除已创建的 Doris 服务。

    也可以通过以下命令列举当前已添加的服务定义,以便获取 id:

    复制代码
    curl -v -u user:password -X GET \
    http://172.21.0.32:6080/service/plugins/definitions/

配置插件​

安装完毕后,打开 Ranger WebUI,可以再 Service Manger 界面中看到 Apache Doris 插件:

点击插件旁边的 + 号添加一个 Doris 服务:

Config Properties 部分参数含义如下:

  • Username/Pasword:Doris 集群的用户名密码,这里建议使用 Admin 用户。
  • jdbc.driver_class:连接 Doris 使用的 JDBC 驱动。com.mysql.cj.jdbc.Driver
  • jdbc.url:Doris 集群的 JDBC url 连接串。jdbc:mysql://172.21.0.101:9030?useSSL=false
  • 额外参数:
    • resource.lookup.timeout.value.in.ms:获取元信息的超时时间,建议填写 10000,即 10 秒。

可以点击 Test Connection 检查是否可以联通。

之后点击 Add 添加服务。

之后,可以在 Service Manger 界面的 Apache Doris 插件中看到创建的服务,点击服务,即可开始配置 Ranger。

相关推荐
俊哥大数据4 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 1 章 业务背景与传统 Lambda 架构痛点
大数据·doris·湖仓一体·flinksql·paimon
俊哥大数据4 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 2 章 流批一体湖仓总体架构与三条分区契约铁律
flink·doris·湖仓一体·paimon
俊哥大数据4 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 4 章 Kafka 企标报文入湖(ODS 表设计)
flink·doris·湖仓一体·paimon·流批一体
俊哥大数据4 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 3 章 Paimon 1.4 湖仓底座与 Catalog 配置
flink·doris·湖仓一体·paimon
EatFan15 天前
从T+1到分钟级:湖仓一体在大厂的真实落地收益对照(携程/网易云信/腾讯)
starrocks·flink·硬件架构·doris·湖仓一体·paimon
制造数据与AI践行者老蒋25 天前
智联工坊IoT 数据采集工程实战:2000 万条可复现设备数据生成(WorkBuddy 落地)
doris·制造业数字化·workbuddy·iot 数据采集·模拟数据生成·数据质量校验·dolphinschedul
hzp6661 个月前
doris学习6:参数调优
数据库·doris·参数·数据库调优
SelectDB技术团队1 个月前
Apache Doris 5.0 年度版本前瞻(一):构建统一的多模湖仓实时分析平台
大数据·doris·数据湖·湖仓一体·lakehouse·湖仓分析·多模分析
一路追寻1 个月前
在大模型时代,Apache Doris 深度融合文本搜索、向量搜索、AI 函数能力,构建从数据存储、检索到分析的完整 AI 数据栈。
doris
迈巴赫车主1 个月前
Doris简介
大数据·数据仓库·doris