基于 Apache Ranger 的鉴权管理
Apache Ranger 是一个用来在 Hadoop 平台上进行监控,启用服务,以及全方位数据安全访问管理的安全框架。
在 2.1.0 版本中,Doris 支持通过集成 Apache Ranger,进行统一的权限管理。
注意:
目前该功能是实验性功能,在 Ranger 中可配置的资源对象和权限可能会在之后的版本中有所变化。
Apache Ranger 版本需在 2.4.0 以上。
安装步骤
安装 Doris Ranger 插件
下载以下文件
将下载好的文件放到 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重启 Ranger 服务。
执行以下命令上传定义文件到 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/
配置 Doris Ranger 插件
安装完毕后,打开 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。
配置 Doris 集群
在所有 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
改为实际值。在所有 FE 的 conf 目录创建
ranger-doris-audit.xml
文件,内容如下:<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
</configuration>在所有 FE 的 conf 目录创建
log4j.properties
文件,内容如下:log4j.rootLogger = debug,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 插件的日志。在所有 FE 的 fe.conf 中添加配置:
access_controller_type=ranger-doris
重启所有 FE 节点即可。
资源和权限
目前 Ranger 中支持的 Doris 资源包括:
Catalog
Database
Table
Column
Resource
Workload Group
目前 Ranger 中支持的 Doris 权限包括:
SHOW
SHOW_VIEW
SHOW_RESOURCES
SHOW_WORKLOAD_GROUP
LOAD
ALTER
CREATE
ALTER_CREATE
ALTER_CREATE_DROP
DROP
SELECT
USAGE
最佳实践
配置权限
在 Doris 中创建
user1
。在 Doris 中,先使用
admin
用户创建一个 Catalog:hive
。在 Ranger 中创建
user1
。在 Ranger 中添加一个 Policy:
show_hive_catalog
使用
user1
登录 Doris,执行show catalogs
,只能看到hive
catalog。在 Ranger 中添加一个 Policy:
select_hive_catalog
使用
user1
登录 Doris。该用户可以查看或查询hive
catalog 下,所有以tpch
开头的 database 下的所有表。
Row Policy 示例
2.1.3 版本支持
参考 配置权限 给 user1 分配 internal.db1.user 表的 select 权限。
在 Ranger 中添加一个 Row Level Filter policy
使用 user1 登录 Doris。执行
select * from internal.db1.user
,只能看到满足id > 3
且age = 2
的数据。
Data Mask 示例
2.1.3 版本支持
参考 配置权限 给 user1 分配 internal.db1.user 表的 select 权限。
在 Ranger 中添加一个 Masking policy
使用 user1 登录 Doris。执行
select * from internal.db1.user
,看到的 phone 是按照指定规则脱敏后的数据。