使用Apache Ranger管理StarRocks权限

Apache Ranger提供了一个集中式的安全管理框架,您可以通过可视化的Web页面来定制各种访问策略,决定哪些角色能访问哪些数据。通过集成Apache Ranger,您可以实现细粒度的权限控制,确保数据访问的安全性与合规性。

背景信息

Apache Ranger提供以下核心模块:

  • Ranger Admin:Ranger的核心模块,内置了一个Web界面,用户可以通过界面或者REST接口来创建和更新安全策略。Hadoop生态各个组件的Plugin定期对这些策略进行轮询和拉取。

  • Agent Plugin:嵌入到Hadoop生态圈组件的Plugin,定期从Ranger Admin拉取安全策略,存储在本地文件中。当用户访问组件时,Plugin会根据安全策略对请求进行安全评估,将结果反馈给相应组件。

  • User Sync:用于拉取用户和用户组的信息,将用户和用户组的权限数据同步到Ranger的数据库中。

前提条件

  • 实例与集群准备:

    • 已创建EMR Serverless StarRocks实例,详情请参见创建实例

    • 已自建Ranger集群,或者在EMR on ECS上创建包含了Ranger服务的集群(例如DataLakeCustom类型),详情请参见创建集群

      本文以在EMR on ECS上创建EMR-5.18.1版本的DataLake集群为例。

  • 网络连通性:

    • 确保Serverless StarRocks实例和Ranger集群(DataLake集群)位于同一VPC内。

    • 配置安全组规则,允许StarRocks实例访问Ranger集群(DataLake集群)的相关端口。

      重要

      配置安全组规则时,端口范围请根据实际需求选择性开放必要的端口。

使用限制

  • 本功能要求Apache Ranger的版本为2.1.0或更高版本。

  • 暂不支持Kerberos认证的Ranger Server。

操作流程

步骤一:安装ranger-starrocks-plugin

重要

如果您的Ranger集群是高可用集群,则需要在所有Ranger节点安装ranger-starrocks-plugin插件。

  1. 通过SSH方式登录EMR集群,详情请参见登录集群

  2. 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

  3. 访问StarRocks Download,找到Ranger plugin组件,单击Download

    image

  4. 将插件上传至创建的starrocks 目录下。

  5. 下载mysql-connector-j.jar包。

    • 方式一:直接下载。

      访问MySQL Community Downloads,下载最新版本的mysql-connector-j.jar包。

    • 方式二:手动拷贝已有的JAR包到starrocks目录下。

      1. 查找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
      2. 根据实际需求选择合适的版本,并将其拷贝到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版本集群为例,请您根据实际情况替换命令中的路径。

  6. 重启Ranger Admin。

    EMR控制台集群服务Ranger服务的状态页签,单击RangerAdmin操作列的重启,使插件生效。

步骤二:在Ranger Admin上配置StarRocks Service

Ranger Admin上配置StarRocks服务,以便通过RangerStarRocks的对象(如数据库、表、列等)进行权限管控。

  1. 通过SSH方式登录EMR集群,详情请参见登录集群

  2. 下载ranger-servicedef-starrocks.json文件。

    wget https://raw.githubusercontent.com/StarRocks/ranger/master/agents-common/src/main/resources/service-defs/ranger-servicedef-starrocks.json
  3. 执行以下命令,添加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服务状态页签的组件列表区域查看。

  4. 验证并保存配置。

    1. 访问RANGER UI

    2. Ranger页面,单击STARROCKS服务区域的image图标。

      image

    3. Create Service页面,配置以下信息。

      image

      参数

      说明

      Service Name

      必填项,定义服务名称。例如,starrocks-test

      UsernamePassword

      Serverless StarRocks实例的用户名及其密码。

      jdbc.url

      填写StarRocks实例FEIP和端口。格式为jdbc:mysql://<FE地址>:<fe_query_port>。其中涉及参数如下:

      • <FE地址>:Serverless StarRocks实例中FE的内网或公网地址。您可以在实例详情页面查看。

        • 如果使用内网地址,请确保在同一VPC内。

        • 如果使用公网地址,需确保安全组规则允许相应的端口通信,详情请参见网络访问与安全设置

      • <fe_query_port>:Serverless StarRocks实例中FE的查询端口(默认为9030)。您可以在实例详情页面查看。

      Add New Configurations

      配置允许访问Ranger的用户或角色。增加Namepolicy.download.auth.usersValuehive,starrocks*的配置。

    4. 单击Test Connection,测试连通性。

    5. 测试成功后,单击Add

      自动跳转至Service Manager页面,即可看到添加好的StarRocks服务

      image

步骤三:配置管理用户的权限

如果您需要使用Ranger管理Sererless StarRocks内表的权限,请在Ranger服务中为管理用户adminroot赋予所有StarRocks权限,以确保Serverless StarRocks的管控功能正常使用。默认情况下已创建好admin用户并赋权了。

  1. 创建新用户root。

    1. Ranger UI页面,选择Settings > Users/Groups/Roles

    2. Users页签,单击Add New User

      image

    3. User Detail页面,填写用户信息,单击Save

      image

  2. root用户赋权。

    1. Ranger UI页面,单击上方的Access Manager

    2. Service Manager页面,单击创建好的StarRocks服务(例如,starrocks-test)

    3. 单击每项策略Action列的image图标。

    4. Allow Conditions区域的admin处添加root用户

      image

      确保root 用户拥有对数据库、表、列等对象的完全控制权限。

      image

    5. 单击Save

步骤四:配置Serverless StarRocks实例

此步骤涵盖与Serverless StarRocks实例相关的所有配置,包括内表鉴权和外表鉴权。

  1. 修改内表鉴权方式。

    如果您需要通过Ranger管理Serverless StarRocks内部表(如数据库、表、列等)的权限,请按照以下步骤进行配置。如果不需要对内表进行权限管理,则可以跳过此步骤。

    1. 进入实例配置页面。

      1. 登录E-MapReduce控制台

      2. 在左侧导航栏,选择EMR Serverless > StarRocks

      3. 在顶部菜单栏处,根据实际情况选择地域。

      4. 单击目标实例的名称。

      5. 单击实例配置页签。

    2. 实例配置页面,单击新增配置项,新增以下配置项。

      文件

      参数

      说明

      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

  2. 复用其它Ranger Service为外表鉴权。

    对于External Catalog,可以复用外部Service(如Hive Service)实现访问控制。StarRocks支持对于不同的Catalog匹配不同的Ranger Service。用户访问外表时,会直接根据对应外表的Service来进行访问控制。用户权限与Ranger同名用户一致。

    外表(External Table)指的是保存在其他数据源中的数据表,而StartRocks只保存表对应的元数据,并直接向外表所在数据源发起查询。

    如果您需要通过Ranger管理外部Catalog(如Hive、Iceberg等)的访问权限,请按照以下步骤进行配置。如果您的业务场景中不涉及外部Catalog或无需对其进行权限管理,则可以跳过此步骤。

    1. 实例配置页面,单击新增配置项,在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

    2. 配置外部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 MetaStoreURI。您可以在DataLake集群的Hive服务的hive-site.xml文件中,搜索并查看hive.metastore.uris参数值。

      • ranger.plugin.hive.service.name:为Ranger Hive服务名称。

后续操作

在成功添加StarRocks服务后,您可以单击该服务,以创建相应的权限策略,并为不同的用户或用户组分配不同的权限。Apache Ranger会根据这些策略对用户的访问请求进行控制。关于如何在Ranger上创建权限策略来管理数据安全,请参见Apache Ranger官网