Apache Ranger 是一個用來在 Hadoop 平臺上進行監控,啟用服務,以及全方位數據安全訪問管理的安全框架。 使用 ranger 后,會通過在 Ranger 側配置權限代替在 Doris 中執行 Grant 語句授權。 Ranger 的安裝和配置見下文:安裝和配置 Doris Ranger 插件
Ranger 示例?
更改 Doris 配置?
-
在 fe/conf/fe.conf 文件中配置鑒權方式為 ranger access_controller_type=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
?改為實際值。 -
啟動集群
權限示例?
- 在 Doris 中創建?
user1
。 - 在 Doris 中,先使用?
admin
?用戶創建一個 Catalog:hive
。 - 在 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 版本支持
-
參考 權限示例 給 user1 分配 internal.db1.user 表的 select 權限。
-
在 Ranger 中添加一個 Row Level Filter policy
-
使用 user1 登錄 Doris。執行?
select * from internal.db1.user
,只能看到滿足?id > 3
?且?age = 2
?的數據。
數據脫敏示例?
2.1.3 版本支持
-
參考 權限示例 給 user1 分配 internal.db1.user 表的 select 權限。
-
在 Ranger 中添加一個 Masking policy
-
使用 user1 登錄 Doris。執行?
select * from internal.db1.user
,看到的 phone 是按照指定規則脫敏后的數據。
常見問題?
-
ranger 訪問失敗,怎么查看日志
在所有 FE 的 conf 目錄創建 log4j.properties 文件,內容如下:
log4j.rootLogger = warn,stdout,Dlog4j.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%nlog4j.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 插件的日志。 -
配置了 Row Level Filter policy ,但是用戶查詢時報沒有權限
Row Level Filter policy 僅用來限制用戶訪問表中數據的特定記錄, 仍需通過 ACCESS POLICY 為用戶授權
安裝和配置 Doris Ranger 插件?
安裝插件?
-
下載以下文件
- ranger-doris-plugin-3.0.0-SNAPSHOT.jar
- mysql-connector-java-8.0.25.jar
-
將下載好的文件放到 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-servicedef-doris.json
-
執行以下命令上傳定義文件到 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。