Spark AuthZ 插件

安装

师成师成· 更新于 2026-09-29· 阅读 9 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

安装前准备

  • Apache Ranger

    该插件作为 Ranger 的 REST 客户端,与 Apache Ranger admin 服务器协同完成权限校验。因此,需要预先安装并启动可用的 Ranger 服务器。

  • 构建(可选)

    如果你的 Ranger admin 或 Spark 发行版与 Maven 中央仓库中官方预构建的 artifact 不兼容,你需要针对所使用的 Spark/Ranger 自行构建该插件。

安装

将带 shading 的 jar 包 kyuubi-spark-authz-shaded_*.jar,或者 kyuubi-spark-authz_*.jar 及其传递依赖放到 Spark 运行时的 classpath 中,例如:

  • 复制到 $SPARK_HOME/jars 目录下,或者
  • 通过 spark.jars 配置项指定

配置

连接 Ranger Admin 的设置

ranger-spark-security.xml

  • 在 $SPARK_HOME/conf 目录下创建 ranger-spark-security.xml,并添加以下配置以指向正确的 Ranger admin 服务器。
<configuration>
    <property>
        <name>ranger.plugin.spark.policy.rest.url</name>
        <value>ranger admin address like http://ranger-admin.org:6080</value>
    </property>

    <property>
        <name>ranger.plugin.spark.service.name</name>
        <value>a ranger hive service name</value>
    </property>

    <property>
        <name>ranger.plugin.spark.policy.cache.dir</name>
        <value>./a ranger hive service name/policycache</value>
    </property>

    <property>
        <name>ranger.plugin.spark.policy.pollIntervalMs</name>
        <value>5000</value>
    </property>

    <property>
        <name>ranger.plugin.spark.policy.source.impl</name>
        <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
    </property>

</configuration>
在行级过滤器中使用宏

Ranger 2.3 引入了在行过滤表达式中使用 user/group/tag 的宏支持。该功能通过使用用户/组/标签的属性代替显式条件,极大地简化了行过滤表达式。假设某用户具有属性 born_city,其值为 Guangzhou,那么行过滤条件 city='${{USER.born_city}}' 在执行计划中将被转换为 city='Guangzhou'。有关更多受支持的宏及其用法,请参阅 RANGER-3605 和 RANGER-3550。请向 ranger-spark-security.xml 中添加以下配置,以启用宏所需的 UserStore Enricher。

    <property>
        <name>ranger.plugin.spark.enable.implicit.userstore.enricher</name>
        <value>true</value>
        <description>Enable UserStoreEnricher for fetching user and group attributes if using macros or scripts in row-filters since Ranger 2.3</description>
    </property>

    <property>
        <name>ranger.plugin.hive.policy.cache.dir</name>
        <value>./a ranger hive service name/policycache</value>
        <description>As Authz plugin reuses hive service def, a policy cache path is required for caching UserStore and Tags for "hive" service def, while "ranger.plugin.spark.policy.cache.dir config" is the path for caching policies in service. </description>
    </property>
显示所有未授权的权限

默认情况下,Authz 插件会逐一检查所需的权限,并在异常中抛出第一个不满足的权限。将 ranger.plugin.spark.authorize.in.single.call 设置为 true 后,Authz 插件会在单次调用中执行访问检查,并在异常消息中抛出所有未被授权的权限。

<property>
    <name>ranger.plugin.spark.authorize.in.single.call</name>
    <value>true</value>
    <description>Enable access checks in single call with all disallowed privileges thrown in exception. Default value is false.</description>
</property>

ranger-spark-audit.xml

在 $SPARK_HOME/conf 中创建 ranger-spark-audit.xml,并添加以下配置以启用/禁用审计功能。

<configuration>

    <property>
        <name>xasecure.audit.is.enabled</name>
        <value>true</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db</name>
        <value>false</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.jdbc.driver</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.jdbc.url</name>
        <value>jdbc:mysql://10.171.161.78/ranger</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.password</name>
        <value>rangeradmin</value>
    </property>

    <property>
        <name>xasecure.audit.destination.db.user</name>
        <value>rangeradmin</value>
    </property>

</configuration>

Spark 会话扩展设置

将 org.apache.kyuubi.plugin.spark.authz.ranger.RangerSparkExtension 添加到 Spark 配置 spark.sql.extensions 中。

spark.sql.extensions=org.apache.kyuubi.plugin.spark.authz.ranger.RangerSparkExtension

评论

登录后参与评论

正在加载评论…