更新时间:2024-12-11 GMT+08:00

配置Spark动态脱敏

  • 本章节仅适用于MRS 3.3.1-LTS及之后版本。
  • 管理面提交作业方式不支持开启动态脱敏特性。

配置场景

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

使用约束

  • 不支持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(角色)”:
    • 使用Ranger鉴权场景,在参数“custom”中添加如下自定义参数:

      参数名称

      spark.dynamic.masked.enabled

      true

      spark.ranger.plugin.authorization.enable

      true

      修改如下参数值:

      参数名称

      spark.ranger.plugin.masking.enable

      true

      spark.sql.authorization.enabled

      true

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

      参数名称

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

      true

      spark.dynamic.masked.enabled

      true

      spark.ranger.plugin.authorization.enable

      false

      修改如下参数值:

      参数名称

      spark.ranger.plugin.masking.enable

      true

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

    cd 客户端安装目录

    source bigdata_env

    source Spark/component_env

    安全模式执行以下命令,普通模式无需执行:

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

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

    spark-beeline

    create table sparktest(a int, b string);

    insert into sparktest values (1,"test01"), (2,"test02");

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

    select * from sparktest;

  6. 验证脱敏策略传递:

    create table sparktest02 as select * from sparktest;

    select * from sparktest02;

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