使用企业安全性套餐为 HDInsight 中的 Spark SQL 配置 Apache Ranger 策略

本文介绍了如何在 HDInsight 中使用企业安全性套餐为 Spark SQL 配置 Apache Ranger 策略。

在本文中,学习如何:

  • 创建 Apache Ranger 策略。
  • 验证所应用的 Ranger 策略。
  • 应用为 Spark SQL 设置 Apache Ranger 的指南。

先决条件

连接到 Apache Ranger 管理员 UI

  1. 在浏览器中,使用 URL https://ClusterName.azurehdinsight.cn/Ranger/连接到 Ranger 管理用户界面。

    ClusterName更改为 Spark 群集的名称。

  2. 使用 Microsoft Entra 管理员凭据登录。 Microsoft Entra 管理员凭据与 HDInsight 群集凭据或 Linux HDInsight 节点安全外壳 (SSH) 凭据不同。

    显示 Ranger 用户界面中的 Service Manager 页的屏幕截图。

创建域用户

若要了解如何创建 sparkuser 域用户,请参阅创建具有 ESP 的 HDInsight 群集。 在生产场景中,域用户来自 Microsoft Entra 租户。

创建 Ranger 策略

在此部分中,需要创建两个 Ranger 策略:

  • 用于从 Spark SQL 访问hivesampletable的访问策略
  • 用于在hivesampletable中模糊处理列的屏蔽策略

创建 Ranger 访问策略

  1. 打开 Ranger 管理员 UI。

  2. 在“HADOOP SQL”下,选择“hive_and_spark”。

    显示 Hive 和 Spark 选择的屏幕截图。

  3. 在“访问”选项卡上,选择“添加新策略”。

    显示用于添加新访问策略的按钮的屏幕截图。

  4. 输入以下值:

    属性
    策略名称 read-hivesampletable-all
    database 默认值
    hivesampletable
    *
    选择用户 sparkuser
    权限 SELECT…

    显示访问策略的示例详细信息的屏幕截图。

    如果选择用户未自动填充域用户,请稍等,以便 Ranger 与 Microsoft Entra ID 同步。

  5. 选择“添加”以保存策略。

  6. 打开 Zeppelin 笔记本,并运行以下命令来验证策略:

         %sql 
         select * from hivesampletable limit 10;
    

    下面是应用策略之前的结果:

    显示访问策略前的结果的屏幕截图。

    下面是应用策略之后的结果:

    显示访问策略后的结果的屏幕截图。

创建 Ranger 屏蔽策略

以下示例演示了如何创建策略来屏蔽列:

  1. 在“屏蔽”选项卡上,选择“添加新策略”。

    显示用于添加新过滤策略的按钮的屏幕截图。

  2. 输入以下值:

    属性
    策略名称 mask-hivesampletable
    Hive 数据库 默认值
    Hive 表 hivesampletable
    Hive 列 devicemake
    选择用户 sparkuser
    访问类型 SELECT…
    选择屏蔽选项 哈希

    屏幕截图显示了过滤策略详细信息。

  3. 选择“保存”以保存策略。

  4. 打开 Zeppelin 笔记本,并运行以下命令来验证策略:

         %sql
         select clientId, deviceMake from hivesampletable; 
    

    显示打开的 Zeppelin 笔记本的屏幕截图。

注意

默认情况下,Hive 和 Spark SQL 的策略在 Ranger 中很常见。

应用为 Spark SQL 设置 Apache Ranger 的指南

以下场景探讨了使用新的 Ranger 数据库和现有 Ranger 数据库创建 HDInsight 5.1 Spark 群集的准则。

场景 1:在创建 HDInsight 5.1 Spark 群集时使用新的 Ranger 数据库

使用新的 Ranger 数据库创建群集时,将在 Ranger 数据库的 Hadoop SQL 服务中使用名称hive_and_spark创建包含 Hive 和 Spark 的 Ranger 策略的相关 Ranger 存储库。

显示包含 Hive 和 Spark 的 Ranger 策略的存储库的屏幕截图。

如果编辑策略,它们将同时应用于 Hive 和 Spark。

请考虑以下几点:

  • 如果有两个元存储数据库,它们对 Hive(例如DB1)目录和 Spark 目录使用相同的名称(例如DB1):

    • 如果 Spark 使用 Spark 目录 (metastore.catalog.default=spark),则策略会应用于 Spark 目录的DB1数据库。
    • 如果 Spark 使用 Hive 目录 (metastore.catalog.default=hive),则策略会应用于 Hive 目录的DB1数据库。

    从 Ranger 的角度来看,无法区分 Hive 目录和 Spark 目录的DB1

    在这种情况下,建议:

    • 将 Hive 目录用于 Hive 和 Spark。
    • 为 Hive 和 Spark 目录维护不同的数据库名称、表名和列名,这样策略就不会跨目录应用于数据库。
  • 如果将 Hive 目录用于 Hive 和 Spark,请考虑以下示例。

    假设使用当前xyz用户通过 Hive 创建名为table1的表。 它创建名为table1.db的 Hadoop 分布式文件系统 (HDFS) 文件,其所有者是xyz用户。

    现在,假设使用用户abc启动 Spark SQL 会话。 在用户abc的此会话中,如果尝试将任何内容写入table1,操作肯定会失败,因为表所有者是xyz

    在这种情况下,建议在 Hive 和 Spark SQL 中使用同一用户更新表。 该用户应具有足够的权限来执行更新操作。

场景 2:在创建 HDInsight 5.1 Spark 群集时使用现有的 Ranger 数据库(具有现有策略)

使用现有的 Ranger 数据库创建 HDI 5.1 群集时,会在此数据库上再次新建 Ranger 存储库,新群集的名称采用此格式:hive_and_spark

显示具有旧 ranger 数据库的新存储库的屏幕截图。

假设你已经在 Hadoop SQL 服务中的现有 Ranger 数据库上使用oldclustername_hive名称在 Ranger 存储库中定义了策略。 你想要在新的 HDInsight 5.1 Spark 群集中共享相同的策略。 要实现此目标,请使用以下步骤。

注意

拥有 Ambari 管理员权限的用户可以执行配置更新。

  1. 从新的 HDInsight 5.1 群集打开 Ambari UI。

  2. 转到Spark3服务,然后转到配置

  3. 打开高级 ranger-spark-security配置。

    屏幕截图显示了 Ambari 配置 ranger 安全性。

    或者,还可以使用 SSH 在 /etc/spark3/conf 中打开此配置。

    编辑两个配置(ranger.plugin.spark.service.nameranger.plugin.spark.policy.cache.dir)以指向旧策略存储库oldclustername_hive,然后保存配置。

    Ambari:

    显示 Ambari 中服务名称的配置更新的屏幕截图。

    XML 文件:

    显示 XML 中服务名称的配置更新的屏幕截图。

  4. 从 Ambari 重启 Ranger 和 Spark 服务。

  5. 打开 Ranger 管理员 UI,然后单击 HADOOP SQL 服务下的“编辑”按钮。

    显示 Ranger 服务编辑选项的屏幕截图。

  6. 对于 oldclustername_hive 服务,请在 policy.download.auth.users 和 tag.download.auth.users 列表中添加 rangersparklookup 用户,然后单击“保存”。

    显示如何在 Ranger 服务中添加用户的屏幕截图。

策应用于 Spark 目录中的数据库。 如果要访问 Hive 目录中的数据库:

  1. 在 Ambari 中,转到Spark3>配置

  2. metastore.catalog.defaultspark更改为hive

    显示更改元存储配置的屏幕截图。

已知问题

  • 如果 Ranger 管理员关闭,Apache Ranger 与 Spark SQL 的集成不起作用。
  • 在 Ranger 审核日志中,将鼠标悬停在“资源”列上时,无法显示所运行的全部查询。