Apache Ranger提供了一个集中式的安全管理框架,您可以通过可视化的Web页面来定制各种访问策略,决定哪些角色能访问哪些数据。通过集成Apache Ranger,您可以实现细粒度的权限控制,确保数据访问的安全性与合规性。
背景信息
Apache Ranger提供以下核心模块:
Ranger Admin:Ranger的核心模块,内置了一个Web界面,用户可以通过界面或者REST接口来创建和更新安全策略。Hadoop生态各个组件的Plugin定期对这些策略进行轮询和拉取。
Agent Plugin:嵌入到Hadoop生态圈组件的Plugin,定期从Ranger Admin拉取安全策略,存储在本地文件中。当用户访问组件时,Plugin会根据安全策略对请求进行安全评估,将结果反馈给相应组件。
User Sync:用于拉取用户和用户组的信息,将用户和用户组的权限数据同步到Ranger的数据库中。
前提条件
实例与集群准备:
网络连通性:
确保Serverless StarRocks实例和Ranger集群(DataLake集群)位于同一VPC内。
配置安全组规则,允许StarRocks实例访问Ranger集群(DataLake集群)的相关端口。
重要配置安全组规则时,端口范围请根据实际需求选择性开放必要的端口。
使用限制
本功能要求Apache Ranger的版本为2.1.0或更高版本。
暂不支持Kerberos认证的Ranger Server。
操作流程
步骤一:安装ranger-starrocks-plugin
如果您的Ranger集群是高可用集群,则需要在所有Ranger节点安装ranger-starrocks-plugin插件。
通过SSH方式登录EMR集群,详情请参见登录集群。
在Ranger Admin的插件目录下创建
starrocks
文件夹。mkdir {path-to-ranger}/starrocks
请替换
{path-to-ranger}/starrocks
为实际的安装路径。本文以EMR-5.18.1版本集群为例,路径为/opt/apps/RANGER/ranger-2.3.0-1.0.6/ranger-admin/ews/webapp/WEB-INF/classes/ranger-plugins
。访问StarRocks Download,找到Ranger plugin组件,单击Download。
将插件上传至创建的
starrocks
目录下。下载mysql-connector-j.jar包。
方式一:直接下载。
访问MySQL Community Downloads,下载最新版本的mysql-connector-j.jar包。
方式二:手动拷贝已有的JAR包到
starrocks
目录下。查找mysql-connector-j包路径。
sudo find / -name mysql-connector-j-*.jar
返回信息如下所示。
/opt/apps/STARROCKS3/starrocks-3.2.11-1.0/fe/lib/mysql-connector-j-8.0.31.jar /opt/apps/STARROCKS2/starrocks-2.5.22-1.0/fe/lib/mysql-connector-j-8.0.33.jar
根据实际需求选择合适的版本,并将其拷贝到
starrocks
目录。sudo cp /opt/apps/STARROCKS3/starrocks-3.2.11-1.0/fe/lib/mysql-connector-j-8.0.31.jar /opt/apps/RANGER/ranger-2.3.0-1.0.6/ranger-admin/ews/webapp/WEB-INF/classes/ranger-plugins/starrocks
说明本文以EMR-5.18.1版本集群为例,请您根据实际情况替换命令中的路径。
重启Ranger Admin。
在EMR控制台集群服务中Ranger服务的状态页签,单击RangerAdmin操作列的重启,使插件生效。
步骤二:在Ranger Admin上配置StarRocks Service
在Ranger Admin上配置StarRocks服务,以便通过Ranger对StarRocks的对象(如数据库、表、列等)进行权限管控。
通过SSH方式登录EMR集群,详情请参见登录集群。
下载
ranger-servicedef-starrocks.json
文件。wget https://raw.githubusercontent.com/StarRocks/ranger/master/agents-common/src/main/resources/service-defs/ranger-servicedef-starrocks.json
执行以下命令,添加StarRocks服务。
curl -u admin:<ranger_admin_password> \-X POST -H "Accept: application/json" \-H "Content-Type: application/json" \http://<ranger-ip>:6080/service/plugins/definitions \-d@ranger-servicedef-starrocks.json
说明命令中以下参数,请根据实际信息替换:
<ranger-admin-password>
:是管理员admin的密码,默认为Admin1234。如果忘记默认密码,请参见Ranger。<ranger-ip>
:RangerAdmin组件的IP地址。您可以在Ranger服务状态页签的组件列表区域查看。
验证并保存配置。
在Ranger页面,单击STARROCKS服务区域的
图标。
在Create Service页面,配置以下信息。
参数
说明
Service Name
必填项,定义服务名称。例如,
starrocks-test
。Username和Password
Serverless StarRocks实例的用户名及其密码。
jdbc.url
填写StarRocks实例FE的IP和端口。格式为
jdbc:mysql://<FE地址>:<fe_query_port>
。其中涉及参数如下:<FE地址>
:Serverless StarRocks实例中FE的内网或公网地址。您可以在实例详情页面查看。如果使用内网地址,请确保在同一VPC内。
如果使用公网地址,需确保安全组规则允许相应的端口通信,详情请参见网络访问与安全设置。
<fe_query_port>
:Serverless StarRocks实例中FE的查询端口(默认为9030)。您可以在实例详情页面查看。
Add New Configurations
配置允许访问Ranger的用户或角色。增加Name为
policy.download.auth.users
,Value为hive,starrocks
或*
的配置。单击Test Connection,测试连通性。
测试成功后,单击Add。
自动跳转至Service Manager页面,即可看到添加好的StarRocks服务。
步骤三:配置管理用户的权限
如果您需要使用Ranger管理Sererless StarRocks内表的权限,请在Ranger服务中为管理用户admin和root赋予所有StarRocks权限,以确保Serverless StarRocks的管控功能正常使用。默认情况下已创建好admin用户并赋权了。
创建新用户root。
在Ranger UI页面,选择
。在Users页签,单击Add New User。
在User Detail页面,填写用户信息,单击Save。
为root用户赋权。
在Ranger UI页面,单击上方的Access Manager。
在Service Manager页面,单击创建好的StarRocks服务(例如,starrocks-test)。
单击每项策略Action列的
图标。
在Allow Conditions区域的admin处添加root用户。
确保
root
用户拥有对数据库、表、列等对象的完全控制权限。单击Save。
步骤四:配置Serverless StarRocks实例
此步骤涵盖与Serverless StarRocks实例相关的所有配置,包括内表鉴权和外表鉴权。
修改内表鉴权方式。
如果您需要通过Ranger管理Serverless StarRocks内部表(如数据库、表、列等)的权限,请按照以下步骤进行配置。如果不需要对内表进行权限管理,则可以跳过此步骤。
进入实例配置页面。
在左侧导航栏,选择
。在顶部菜单栏处,根据实际情况选择地域。
单击目标实例的名称。
单击实例配置页签。
在实例配置页面,单击新增配置项,新增以下配置项。
文件
参数
说明
ranger-starrocks-security.xml
ranger.plugin.starrocks.service.name
Ranger中对应的StarRocks服务名称。例如,
starrocks-test
。ranger.plugin.starrocks.policy.source.impl
获取Ranger鉴权策略使用的类。填写为
org.apache.ranger.admin.client.RangerAdminRESTClient
。ranger.plugin.starrocks.policy.rest.url
Ranger Admin的地址。例如,
http://master-1-1.c-aaa**********ccc.cn-beijing.emr.aliyuncs.com:6080
。ranger.plugin.starrocks.policy.rest.client.cookie.enabled
是否启用Ranger客户端的Cookie功能。测试中建议设置为
false
。FE
access_control
用于StarRocks的内表鉴权方式。填写为
ranger
。
复用其它Ranger Service为外表鉴权。
对于External Catalog,可以复用外部Service(如Hive Service)实现访问控制。StarRocks支持对于不同的Catalog匹配不同的Ranger Service。用户访问外表时,会直接根据对应外表的Service来进行访问控制。用户权限与Ranger同名用户一致。
外表(External Table)指的是保存在其他数据源中的数据表,而StartRocks只保存表对应的元数据,并直接向外表所在数据源发起查询。
如果您需要通过Ranger管理外部Catalog(如Hive、Iceberg等)的访问权限,请按照以下步骤进行配置。如果您的业务场景中不涉及外部Catalog或无需对其进行权限管理,则可以跳过此步骤。
在实例配置页面,单击新增配置项,在
ranger-hive-security.xml
文件中新增以下配置项。参数
说明
ranger.plugin.hive.service.name
Ranger 中对应的Hive服务名称。例如,
emr-hive
。ranger.plugin.hive.policy.source.impl
获取Ranger鉴权策略使用的类。填写为
org.apache.ranger.admin.client.RangerAdminRESTClient
。ranger.plugin.hive.policy.rest.url
Ranger Admin的地址。例如,
http://master-1-1.c-aaa**********ccc.cn-beijing.emr.aliyuncs.com:6080
。配置外部Catalog的鉴权方式。
创建External Catalog时指定Ranger服务。
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添加Ranger服务。
ALTER CATALOG hive_catalog_1 SET ("ranger.plugin.hive.service.name" = "<ranger_hive_service_name>");
其中,涉及参数如下:
hive.metastore.uris
:Hive MetaStore的URI。您可以在DataLake集群的Hive服务的hive-site.xml文件中,搜索并查看hive.metastore.uris
参数值。ranger.plugin.hive.service.name
:为Ranger Hive服务名称。
后续操作
在成功添加StarRocks服务后,您可以单击该服务,以创建相应的权限策略,并为不同的用户或用户组分配不同的权限。Apache Ranger会根据这些策略对用户的访问请求进行控制。关于如何在Ranger上创建权限策略来管理数据安全,请参见Apache Ranger官网。