集成 Apache Ranger

Apache Ranger 是一个用来在 Hadoop 平台上进行监控,启用服务,以及全方位数据安全访问管理的安全框架。

在 2.1.0 版本中,Doris 支持通过集成 Apache Ranger,进行统一的权限管理。

注意:

  • 目前该功能是实验性功能,在 Ranger 中可配置的资源对象和权限可能会在之后的版本中有所变化。

  • Apache Ranger 版本需在 2.4.0 以上。

安装步骤

安装 Doris Ranger 插件

  1. 下载以下文件

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

    1. /usr/local/service/ranger/ews/webapp/WEB-INF/classes/ranger-plugins/doris/ranger-doris-plugin-3.0.0-SNAPSHOT.jar
    2. /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 服务:

    1. curl -u user:password -X POST \
    2. -H "Accept: application/json" \
    3. -H "Content-Type: application/json" \
    4. http://172.21.0.32:6080/service/plugins/definitions \
    5. -d@ranger-servicedef-doris.json

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

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

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

    1. {
    2. "id": 207,
    3. "guid": "d3ff9e41-f9dd-4217-bb5f-3fa9996454b6",
    4. "isEnabled": true,
    5. "createdBy": "Admin",
    6. "updatedBy": "Admin",
    7. "createTime": 1705817398112,
    8. "updateTime": 1705817398112,
    9. "version": 1,
    10. "name": "doris",
    11. "displayName": "Apache Doris",
    12. "implClass": "org.apache.ranger.services.doris.RangerServiceDoris",
    13. "label": "Doris",
    14. "description": "Apache Doris",
    15. "options": {
    16. "enableDenyAndExceptionsInPolicies": "true"
    17. },
    18. ...
    19. }

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

    1. curl -v -u user:password -X DELETE \
    2. http://172.21.0.32:6080/service/plugins/definitions/207

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

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

    1. curl -v -u user:password -X GET \
    2. http://172.21.0.32:6080/service/plugins/definitions/

配置 Doris Ranger 插件

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

ranger1

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

ranger2

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。

配置 Doris 集群

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

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    3. <configuration>
    4. <property>
    5. <name>ranger.plugin.doris.policy.cache.dir</name>
    6. <value>/path/to/ranger/cache/</value>
    7. </property>
    8. <property>
    9. <name>ranger.plugin.doris.policy.pollIntervalMs</name>
    10. <value>30000</value>
    11. </property>
    12. <property>
    13. <name>ranger.plugin.doris.policy.rest.client.connection.timeoutMs</name>
    14. <value>60000</value>
    15. </property>
    16. <property>
    17. <name>ranger.plugin.doris.policy.rest.client.read.timeoutMs</name>
    18. <value>60000</value>
    19. </property>
    20. <property>
    21. <name>ranger.plugin.doris.policy.rest.url</name>
    22. <value>http://172.21.0.32:6080</value>
    23. </property>
    24. <property>
    25. <name>ranger.plugin.doris.policy.source.impl</name>
    26. <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
    27. </property>
    28. <property>
    29. <name>ranger.plugin.doris.service.name</name>
    30. <value>doris</value>
    31. </property>
    32. </configuration>

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

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

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    3. <configuration>
    4. </configuration>
  3. 在所有 FE 的 conf 目录创建 log4j.properties 文件,内容如下:

    1. log4j.rootLogger = debug,stdout,D
    2. log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    3. log4j.appender.stdout.Target = System.out
    4. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    5. log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    6. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    7. log4j.appender.D.File = /path/to/fe/log/ranger.log
    8. log4j.appender.D.Append = true
    9. log4j.appender.D.Threshold = INFO
    10. log4j.appender.D.layout = org.apache.log4j.PatternLayout
    11. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

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

  4. 在所有 FE 的 fe.conf 中添加配置:

    access_controller_type=ranger-doris

  5. 重启所有 FE 节点即可。

资源和权限

  1. 目前 Ranger 中支持的 Doris 资源包括:

    • Catalog
    • Database
    • Table
    • Column
    • Resource
    • Workload Group
  2. 目前 Ranger 中支持的 Doris 权限包括:

    • SHOW
    • SHOW_VIEW
    • SHOW_RESOURCES
    • SHOW_WORKLOAD_GROUP
    • LOAD
    • ALTER
    • CREATE
    • ALTER_CREATE
    • ALTER_CREATE_DROP
    • DROP
    • SELECT
    • USAGE

最佳实践

配置权限

  1. 在 Doris 中创建 user1

  2. 在 Doris 中,先使用 admin 用户创建一个 Catalog:hive

  3. 在 Ranger 中创建 user1

  4. 在 Ranger 中添加一个 Policy:show_hive_catalog

    ranger3

  5. 使用 user1 登录 Doris,执行 show catalogs,只能看到 hive catalog。

  6. 在 Ranger 中添加一个 Policy:select_hive_catalog

    ranger4

  7. 使用 user1 登录 Doris。该用户可以查看或查询 hive catalog 下,所有以 tpch 开头的 database 下的所有表。

Row Policy 示例

2.1.3 版本支持

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

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

    Row Policy 示例

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

Data Mask 示例

2.1.3 版本支持

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

  2. 在 Ranger 中添加一个 Masking policy

    Data Mask 示例

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