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.dirranger.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 > 3age = 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 \
        [email protected]

    其中用户名密码是登录 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。

相关推荐
張萠飛3 天前
Doris官网上没有的一些Fe参数了,都在源码中
doris
涤生大数据6 天前
Doris 湖仓一体:数据分析新范式
数据仓库·数据挖掘·数据分析·doris·数据湖·数字化转型·湖仓一体
SelectDB技术团队6 天前
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践
大数据·数据库·iceberg·doris·数据湖·湖仓一体·天翼云
向阳12187 天前
Doris:联邦认证
doris
向阳12188 天前
doris:安全概览
doris
向阳121810 天前
使用 Doris 和 Hudi
doris·hudi
SelectDB技术团队12 天前
SelectDB 实时分析性能突出,宝舵成本锐减与性能显著提升的双赢之旅
大数据·人工智能·物联网·数据分析·doris·selectdb·电商场景
向阳121813 天前
doris:阿里云 MaxCompute
doris
SelectDB技术团队16 天前
云原生时代的架构革新,Apache Doris 存算分离如何实现弹性与性能双重提升
大数据·数据库·云原生·doris·存算分离