使用 Apache Ranger 管理权限
Apache Ranger 提供了一个集中的安全管理框架,允许用户通过可视化 Web 页面自定义访问策略。这有助于确定哪些角色可以访问哪些数据,并为 Hadoop 生态系统中的各种组件和服务实施细粒度的数据访问控制。
Apache Ranger 提供了以下核心模块
- Ranger Admin:Ranger 的核心模块,内置 Web 页面。用户可以在此页面上或通过 REST 接口创建和更新安全策略。Hadoop 生态系统中各种组件的插件定期轮询并拉取这些策略。
- Agent Plugin:嵌入在 Hadoop 生态系统中的组件的插件。这些插件定期从 Ranger Admin 拉取安全策略,并将策略存储在本地文件中。当用户访问组件时,相应的插件根据配置的安全策略评估请求,并将身份验证结果发送到相应的组件。
- User Sync:用于拉取用户和用户组信息,并将用户和用户组的权限数据同步到 Ranger 的数据库。
除了原生 RBAC 权限系统外,StarRocks v3.1.9 还支持通过 Apache Ranger 进行访问控制。目前,StarRocks 支持
- 通过 Apache Ranger 创建访问策略、掩码策略和行级过滤策略。
- Ranger 审计日志。
- 不支持使用 Kerberos 进行身份验证的 Ranger 服务器。
本主题介绍了 StarRocks 和 Apache Ranger 的权限控制方法和集成过程。有关如何在 Ranger 上创建安全策略以管理数据安全的信息,请参阅 Apache Ranger 官方网站。
从 v3.5.0 开始,StarRocks 支持 Group Provider 从外部身份验证系统收集群组信息以进行用户群组管理。有关更多信息,请参阅验证用户群组。
权限控制方法
与 Apache Ranger 集成的 StarRocks 提供了以下权限控制方法
- 在 Ranger 中创建 StarRocks Service 以实现权限控制。当用户访问 StarRocks 内部表、外部表或其他对象时,会根据 StarRocks Service 中配置的访问策略执行访问控制。
- 当用户访问外部数据源时,可以重用 Apache Ranger 上的外部服务(例如 Hive Service)进行访问控制。StarRocks 可以将 Ranger 服务与不同的 External Catalog 匹配,并基于与数据源对应的 Ranger 服务实现访问控制。
StarRocks 与 Apache Ranger 集成后,您可以实现以下访问控制模式
- 使用 Apache Ranger 统一管理对 StarRocks 内部表、外部表和所有对象的访问。
- 使用 Apache Ranger 管理对 StarRocks 内部表和对象的访问。对于 External Catalog,重用 Ranger 上相应外部服务的策略进行访问控制。
- 通过重用与外部数据源对应的 Service 来使用 Apache Ranger 管理对 External Catalog 的访问。使用 StarRocks 原生 RBAC 权限系统来管理对 StarRocks 内部表和对象的访问。
身份验证过程
- 您还可以使用 LDAP 进行用户身份验证,然后使用 Ranger 同步 LDAP 用户并为其配置访问规则。StarRocks 也可以通过 LDAP 完成用户登录身份验证。
- 当用户发起查询时,StarRocks 解析查询语句,并将用户信息和所需权限传递给 Apache Ranger。Ranger 根据相应 Service 中配置的访问策略确定用户是否具有所需权限,并将身份验证结果返回给 StarRocks。如果用户有权访问,StarRocks 将返回查询数据;如果没有,StarRocks 将返回错误。
前提条件
-
已安装 Apache Ranger 2.1.0 或更高版本。有关如何安装 Apache Ranger 的说明,请参阅Ranger 快速入门。
-
所有 StarRocks FE 机器都可以访问 Apache Ranger。您可以通过在每台 FE 机器上运行以下命令来检查这一点
telnet <ranger-ip> <ranger-port>
如果显示
Connected to <ip>
,则连接成功。
将 StarRocks Service 与 Ranger 集成
(可选)安装 ranger-starrocks-plugin
此步骤的主要目的是使用 Ranger 的资源名称自动完成功能。在 Ranger Admin 中编写策略时,用户需要输入需要保护访问权限的资源的名称。为了方便用户输入资源名称,Ranger Admin 提供了自动完成功能,该功能会查找服务中与目前输入的匹配的可用资源,并自动完成资源名称。
如果您没有操作 Ranger 集群的权限或不需要此功能,您可以跳过此步骤。
另请注意,如果您没有安装 ranger-starrocks-plugin,那么您在创建 StarRocks 服务时无法使用 test connection
。但是,这并不意味着您无法成功创建服务。
-
在 Ranger Admin 目录
ews/webapp/WEB-INF/classes/ranger-plugins
中创建starrocks
文件夹。mkdir {path-to-ranger}/ews/webapp/WEB-INF/classes/ranger-plugins/starrocks
-
下载 plugin-starrocks/target/ranger-starrocks-plugin-3.0.0-SNAPSHOT.jar 和 mysql-connector-j.jar,并将它们放入
starrocks
文件夹中。 -
重启 Ranger Admin。
ranger-admin restart
在 Ranger Admin 上配置 StarRocks Service
此步骤在 Ranger 上配置 StarRocks Service,以便用户可以通过 Ranger 对 StarRocks 对象执行访问控制。
-
将 ranger-servicedef-starrocks.json 复制到 StarRocks FE 机器或 Ranger 机器的任何目录。
wget https://raw.githubusercontent.com/StarRocks/ranger/master/agents-common/src/main/resources/service-defs/ranger-servicedef-starrocks.json
注意如果您不需要 Ranger 的自动完成功能(这意味着您没有安装 ranger-starrocks-plugin),您必须将 .json 文件中的
implClass
设置为空"implClass": "",
如果您需要 Ranger 的自动完成功能(这意味着您已安装 ranger-starrocks-plugin),您必须将 .json 文件中的
implClass
设置为org.apache.ranger.services.starrocks.RangerServiceStarRocks
"implClass": "org.apache.ranger.services.starrocks.RangerServiceStarRocks",
-
以 Ranger 管理员身份运行以下命令来添加 StarRocks Service。
curl -u <ranger_adminuser>:<ranger_adminpwd> \
-X POST -H "Accept: application/json" \
-H "Content-Type: application/json" http://<ranger-ip>:<ranger-port>/service/plugins/definitions -d@ranger-servicedef-starrocks.json -
访问
http://<ranger-ip>:<ranger-host>/login.jsp
以登录到 Apache Ranger 页面。STARROCKS 服务出现在页面上。 -
单击 STARROCKS 后的加号 (
+
) 以配置 StarRocks Service。Service Name
:您必须输入服务名称。Display Name
:您希望在 STARROCKS 下显示的服务名称。如果未指定,将显示Service Name
。Username
和Password
:FE 用户名和密码,用于在创建策略时自动完成对象名称。这两个参数不影响 StarRocks 和 Ranger 之间的连接。如果您想使用自动完成功能,请配置至少一个已激活db_admin
角色的用户。jdbc.url
:输入 StarRocks FE IP 地址和端口。
下图显示了一个配置示例。
下图显示了添加的服务。
-
单击 Test connection 测试连接,并在连接成功后保存。如果您没有安装 ranger-starrocks-plugin,则可以跳过测试连接并直接创建。
-
在 StarRocks 集群的每台 FE 机器上,在
fe/conf
文件夹中创建 ranger-starrocks-security.xml 并复制内容。您必须修改以下两个参数并保存修改ranger.plugin.starrocks.service.name
:更改为您在步骤 4 中创建的 StarRocks Service 的名称。ranger.plugin.starrocks.policy.rest the url
:更改为 Ranger Admin 的地址。
如果您需要修改其他配置,请参阅 Apache Ranger 的官方文档。例如,您可以修改
ranger.plugin.starrocks.policy.pollIntervalMs
以更改拉取策略更改的间隔。vim ranger-starrocks-security.xml
...
<property>
<name>ranger.plugin.starrocks.service.name</name>
<value>starrocks</value> -- Change it to the StarRocks Service name.
<description>
Name of the Ranger service containing policies for this StarRocks instance
</description>
</property>
...
...
<property>
<name>ranger.plugin.starrocks.policy.rest.url</name>
<value>http://:6080</value> -- Change it to Ranger Admin address.
<description>
URL to Ranger Admin
</description>
</property>
... -
(可选)如果您想使用 Ranger 的审计日志服务,您需要在每台 FE 机器的
fe/conf
文件夹中创建 ranger-starrocks-audit.xml 文件。复制内容,将xasecure.audit.solr.solr_url
中的solr_url
替换为您自己的solr_url
,并保存文件。 -
将配置
access_control = ranger
添加到所有 FE 配置文件。vim fe.conf
access_control=ranger -
重启所有 FE 机器。
-- Switch to the FE folder.
cd..
bin/stop_fe.sh
bin/start_fe.sh
重用其他服务来控制对外部表的访问
对于 External Catalog,您可以重用外部服务(例如 Hive Service)进行访问控制。StarRocks 支持为不同的 Catalog 匹配不同的 Ranger 外部服务。当用户访问外部表时,系统会根据与外部表对应的 Ranger Service 的访问策略实施访问控制。用户权限与具有相同名称的 Ranger 用户一致。
-
将 Hive 的 Ranger 配置文件 ranger-hive-security.xml 和 ranger-hive-audit.xml 复制到所有 FE 机器的
fe/conf
文件中。确保 Ranger 的 IP 和端口正确。 -
重启所有 FE 机器。
-
配置 External Catalog。
-
创建 External Catalog 时,添加属性
"ranger.plugin.hive.service.name"
。CREATE EXTERNAL CATALOG hive_catalog_1
PROPERTIES (
"type" = "hive",
"hive.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"ranger.plugin.hive.service.name" = "<ranger_hive_service_name>"
) -
您还可以将此属性添加到现有的 External Catalog。
ALTER CATALOG hive_catalog_1
SET ("ranger.plugin.hive.service.name" = "<ranger_hive_service_name>");
-
此操作会将现有 Catalog 的身份验证方法更改为基于 Ranger 的身份验证。
下一步做什么
添加 StarRocks Service 后,您可以单击该服务以创建服务的访问控制策略,并为不同的用户或用户组分配不同的权限。当用户访问 StarRocks 数据时,将根据这些策略实施访问控制。