跳到主要内容
版本: 最新版本-3.5

使用 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 内部表和对象的访问。

身份验证过程

  1. 您还可以使用 LDAP 进行用户身份验证,然后使用 Ranger 同步 LDAP 用户并为其配置访问规则。StarRocks 也可以通过 LDAP 完成用户登录身份验证。
  2. 当用户发起查询时,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。但是,这并不意味着您无法成功创建服务。

  1. 在 Ranger Admin 目录 ews/webapp/WEB-INF/classes/ranger-plugins 中创建 starrocks 文件夹。

    mkdir {path-to-ranger}/ews/webapp/WEB-INF/classes/ranger-plugins/starrocks
  2. 下载 plugin-starrocks/target/ranger-starrocks-plugin-3.0.0-SNAPSHOT.jarmysql-connector-j.jar,并将它们放入 starrocks 文件夹中。

  3. 重启 Ranger Admin。

    ranger-admin restart

在 Ranger Admin 上配置 StarRocks Service

注意

此步骤在 Ranger 上配置 StarRocks Service,以便用户可以通过 Ranger 对 StarRocks 对象执行访问控制。

  1. 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",
  2. 以 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
  3. 访问 http://<ranger-ip>:<ranger-host>/login.jsp 以登录到 Apache Ranger 页面。STARROCKS 服务出现在页面上。

    home

  4. 单击 STARROCKS 后的加号 (+) 以配置 StarRocks Service。

    service detail

    property

    • Service Name:您必须输入服务名称。
    • Display Name:您希望在 STARROCKS 下显示的服务名称。如果未指定,将显示 Service Name
    • UsernamePassword:FE 用户名和密码,用于在创建策略时自动完成对象名称。这两个参数不影响 StarRocks 和 Ranger 之间的连接。如果您想使用自动完成功能,请配置至少一个已激活 db_admin 角色的用户。
    • jdbc.url:输入 StarRocks FE IP 地址和端口。

    下图显示了一个配置示例。

    example

    下图显示了添加的服务。

    added service

  5. 单击 Test connection 测试连接,并在连接成功后保存。如果您没有安装 ranger-starrocks-plugin,则可以跳过测试连接并直接创建。

  6. 在 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>
    ...
  7. (可选)如果您想使用 Ranger 的审计日志服务,您需要在每台 FE 机器的 fe/conf 文件夹中创建 ranger-starrocks-audit.xml 文件。复制内容,xasecure.audit.solr.solr_url 中的 solr_url 替换为您自己的 solr_url,并保存文件。

  8. 将配置 access_control = ranger 添加到所有 FE 配置文件。

    vim fe.conf
    access_control=ranger
  9. 重启所有 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 用户一致。

  1. 将 Hive 的 Ranger 配置文件 ranger-hive-security.xmlranger-hive-audit.xml 复制到所有 FE 机器的 fe/conf 文件中。确保 Ranger 的 IP 和端口正确。

  2. 重启所有 FE 机器。

  3. 配置 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 数据时,将根据这些策略实施访问控制。