更新时间:2025-08-01 GMT+08:00

配置Spark动态脱敏

操作场景

动态脱敏是一种安全特性,允许你根据用户的权限或角色对数据进行部分或全部屏蔽,从而保护敏感数据不被未经授权的用户访问。

Spark动态脱敏开启后,配置脱敏列的数据可以参与计算,计算结果输出时不可见,在集群内脱敏策略会根据血缘关系自动传递,更大的发挥数据的价值同时,保障数据的隐私性。

约束与限制

  • 本章节仅适用于MRS 3.3.1-LTS及之后版本。
  • 管理面提交作业方式不支持开启动态脱敏特性。
  • 不支持Hudi表的脱敏。
  • 不支持非SQL使用方法的脱敏。
  • 不支持涉及直接读写HDFS的操作的脱敏。
  • 不支持复杂类型array、map、struct的脱敏。
  • 只支持spark-beeline(JDBC 连接)方式提交Spark作业。
  • 脱敏策略传递时,若目标表已有脱敏策略且与源表有冲突,则目标表脱敏策略强制重置为Custom:“***”。
  • 当前仅支持int、char、varchar、date、decimal、float、bigint、timestamp 、tinyint、smallint、double、string、binary数据类型的脱敏,其中int、date、decimal、float、bigint、timestamp 、tinyint、smallint、double类型配置脱敏策略后,spark-beeline查询结果存在与策略预期不一致的现象,但查询结果非原始值,如需要与策略结果保持一致,则推荐使用“Nullify”脱敏策略。
  • 对于不支持的数据类型,如果配置了脱敏策略或输出列涉及脱敏传递,最终都按“Nullify”脱敏策略处理。

配置Spark动态脱敏

  1. 修改JDBCServer实例配置。登录FusionInsight Manager页面,选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer(角色)”,修改如下参数,保存配置,并重启Spark服务。

    • 使用Ranger鉴权场景,在参数“custom”中添加如下自定义参数:

      参数

      参数说明

      spark.dynamic.masked.enabled

      true

      是否启用动态脱敏,启用该功能可以增强数据安全性。

      • true:启用动态数据屏蔽功能。
      • false:禁用动态数据屏蔽功能。

      spark.ranger.plugin.authorization.enable

      true

      是否开启Ranger鉴权功能。启用该功能可以增强数据访问的安全性,如果需要细粒度的访问控制,建议启用此功能并进行相应的配置。

      • true:启用Ranger鉴权功能。
      • false:禁用Ranger鉴权功能。

      修改如下参数值:

      参数名称

      参数说明

      spark.ranger.plugin.masking.enable

      true

      配置是否启用Ranger插件的列脱敏功能。启用该功能可以增强数据的安全性,但需要确保 Ranger服务已经正确配置,并且定义了合适的屏蔽策略。

      • true:启用Ranger插件的列脱敏功能。
      • false:禁用Ranger插件的列脱敏功能。

      spark.sql.authorization.enabled

      true

      安全模式下开启SQL鉴权,启用此功能后,Spark会根据用户的角色和权限来执行SQL查询,从而提供细粒度的访问控制。

      • true:启用SQL鉴权功能。
      • false:禁用SQL鉴权功能。
    • 对于不使用Ranger鉴权,依然使用Hive元数据鉴权场景,在参数“custom”中添加如下自定义参数:

      参数名称

      参数说明

      spark.ranger.plugin.use.hive.acl.enable

      true

      是否启用Spark使用Hive的ACL进行授权检查。

      • true:启用Spark使用Hive的ACL进行授权检查。
      • false:禁用Spark使用Hive的ACL进行授权检查。

      spark.dynamic.masked.enabled

      true

      是否启用动态脱敏,启用该功能可以增强数据安全性。

      • true:启用动态数据屏蔽功能。
      • false:禁用动态数据屏蔽功能。

      spark.ranger.plugin.authorization.enable

      true

      是否开启Ranger鉴权功能。启用该功能可以增强数据访问的安全性,如果需要细粒度的访问控制,建议启用此功能并进行相应的配置。

      • true:启用Ranger鉴权功能。
      • false:禁用Ranger鉴权功能。

      修改如下参数值:

      参数名称

      参数说明

      spark.ranger.plugin.masking.enable

      true

      配置是否启用Ranger插件的列脱敏功能。

      • true:启用Ranger插件的列脱敏功能。
      • false:禁用Ranger插件的列脱敏功能。
    不使用Ranger鉴权,使用Hive元数据鉴权场景,如果Ranger中未完成Hive策略初始化,需要做以下操作:
    1. 开启组件Hive的“Ranger鉴权”的功能,重启Hive组件+Spark组件。
    2. 开启组件Spark的“Ranger鉴权”的功能,重启Spark组件。
    3. 关闭组件Hive的“Ranger鉴权”的功能,重启Hive组件。
    4. 关闭组件Spark的“Ranger鉴权”的功能,重启Spark组件。
    1. 登录Ranger WebUI界面,如果“HADOOP SQL”下存在Hive组件表示已经完成Hive策略初始化,不存在则未初始化。
    2. 如果集群同时安装了HetuEngine组件,且需要Spark动态脱敏触发策略传递时自动同步更新Ranger、HetuEngine空间的脱敏策略,需要将参数“spark.dynamic.masked.hetu.policy.sync.update.enable”设置为“true”,且需将内置用户Spark的Ranger用户类型调整为Admin用户类型。

  2. 登录Spark客户端节点,执行如下命令:

    进入客户端目录:
    cd 客户端安装目录

    加载环境变量:

    source bigdata_env

    加载组件环境变量:

    source Spark/component_env

    安全模式执行安全认证,普通模式无需执行:

    kinit test

    输入密码完成认证(首次登录需要修改密码)

  3. 使用Spark的beeline命令提交任务,创建Spark表:

    spark-beeline
    create table sparktest(a int, b string);
    insert into sparktest values (1,"test01"), (2,"test02");

  4. 参考添加Spark2x的Ranger访问权限策略,给sparktest表配置脱敏策略,验证脱敏是否生效:

    select  * from sparktest;

  5. 验证脱敏策略传递:

    create table sparktest02 as select * from sparktest;
    select * from sparktest02;

    出现以上结果表示,动态脱敏配置已生效,登录ranger脱敏策略管理界面可以看到有自动生成的表sparktest02的脱敏策略。