Greenmask v0.2.0b1 发布

发布于 2024-07-01,作者:Greenmask.io
相关开源 安全

Greenmask v0.2.0b1 发布

PostgreSQL 逻辑转储和匿名化工具

这个主要的 beta 版本引入了新功能和重构的转换器,显著增强了 Greenmask 的灵活性,以更好地满足业务需求。帮助我们改进 GreenMask 并使其适应社区需求。我们欢迎您在 GitHub 上的发布讨论中提供反馈。

Greenmask 概述

Greenmask 是一款通用的开源工具,用于数据库备份、匿名化和恢复。它使用纯 Go 编写,并移植了 PostgreSQL 库,具有平台独立性和无状态性,无需修改模式。它可自定义,并与现有的 PostgreSQL 实用程序兼容。

Greenmask 非常适合用于

  • 日常备份和恢复任务,确保数据完整性和可用性。
  • 用于暂存环境和分析的匿名化和数据脱敏,在保持数据效用的同时保护敏感信息。

主要功能

  • 确定性转换器——基于哈希函数的数据转换确定性方法。这确保了相同的输入数据将始终产生相同的输出数据。几乎每个转换器都支持 randomhash 引擎,使其通用适用于任何用例。
  • 动态参数——几乎每个转换器都支持动态参数,允许从表列值动态参数化转换器。这有助于解决列之间的函数依赖关系并满足约束。
  • 数据库类型安全- 通过验证数据并利用数据库驱动程序进行编码和解码操作来确保数据完整性。这种方法保证了数据格式的保留。
  • 转换验证和易于维护- 在混淆开发期间,Greenmask 提供验证警告和转换差异功能,使您可以有效地监控和维护整个软件生命周期中的转换。
  • 分区表转换继承 - 定义一次转换配置,并将其应用于分区表中的所有分区,从而简化混淆过程。
  • 无状态 - Greenmask 作为逻辑转储运行,不会影响您现有的数据库模式。
  • 向后兼容 - 它完全支持与现有原生 PostgreSQL 实用程序相同的功能和协议。Greenmask 创建的转储可以使用 pg_restore 实用程序成功恢复。
  • 可扩展 - 用户可以灵活地使用任何编程语言实现基于域的转换或使用预定义的模板。
  • 提供多种存储 - Greenmask 为本地和远程数据存储提供多种存储选项,包括目录和类似 S3 的存储解决方案。

beta 版本的 Playground 用法

如果要运行 beta 版本的 Greenmask playground,请执行

git checkout tags/v0.2.0b1 -b v0.2.0b1 docker-compose run greenmask-from-source

更改概述

  • 在转换器中引入了动态参数
    • 现在,大多数转换器在适用时都支持动态参数。
    • 动态参数是严格强制执行的。如果您需要将值强制转换为另一种类型,Greenmask 提供了可通过 cast_to 访问的模板和预定义的强制转换函数。这些函数涵盖了频繁的操作,例如 UnixTimestampToDateIntToBool
  • 转换逻辑已进行了重大重构,使得转换器比以前更具可定制性和灵活性。
  • 引入了转换引擎

    • random - 基于伪随机算法生成转换器值。
    • hash - 使用哈希函数生成转换器值。目前,它使用 sha3 哈希函数,该函数是安全的但执行速度较慢。在稳定版本中,可以选择 sha3SipHash
  • 引入了静态参数值模板

值得注意的更改

核心

  • 引入了 Parametrizer 接口,现在针对动态和静态参数都实现了此接口。
  • 重命名了大多数工具包类型,以增强清晰度和全面的文档覆盖率。
  • 重构了 Driver 初始化逻辑。
  • Driver 中被覆盖的类型添加了验证警告。
  • 迁移了现有内置转换器以利用新的 Parametrizer 接口。
  • 实现了一个新的抽象 TransformationContext,作为启用新功能转换条件的第一步 (#34)。
  • 优化了大多数转换器在动态和静态模式下的性能。虽然动态模式提供了灵活性,但静态模式确保了性能保持在高水平。仅使用必要的转换功能有助于保持转换时间的可预测性。

文档

文档已进行了重大重构。添加了有关功能的新信息和转换器描述的更新。

转换器

  • RandomEmail - 引入了一个新的转换器,该转换器支持随机和确定性引擎。它允许灵活的电子邮件值生成;您可以在模板中使用列值,并选择保留原始域或从 domains 参数中选择任何域。

  • NoiseDateNoiseFloatNoiseInt - 这些转换器同时支持随机引擎和确定性引擎,提供动态模式参数,用于控制 minmax 范围内的噪声阈值。与以前使用单个 ratio 参数的实现不同,新版本具有 min_ratiomax_ratio 参数,可以更精确地定义噪声值。在这些转换器中使用 hash 引擎可通过使攻击者难以进行统计分析来增强安全性,尤其是在长期持续使用相同的 salt 时。

  • NoiseNumeric - 一个新实现的转换器,与 NoiseIntNoiseFloat 具有相同的功能,但专门为数值(大整数或浮点数)设计。它提供一个 decimal 参数来处理带小数的值。

  • RandomChoice - 现在支持 hash 引擎

  • RandomDateRandomFloatRandomInt - 现在通过哈希引擎支持进行了增强。阈值参数 minmax 已更新为支持动态模式,从而可以实现更灵活的配置。

  • RandomNumeric - 一个专门为数值类型(大整数或浮点数)设计的新转换器,与 RandomIntRandomFloat 具有相似的功能,但专为处理巨大的数值而定制。

  • RandomString - 现在支持哈希引擎模式

  • RandomUnixTimestamp - 这个新的转换器生成具有可选单位(secondmillisecondmicrosecondnanosecond)的 Unix 时间戳。与 RandomDate 的功能类似,它支持哈希引擎和 minmax 阈值的动态参数,并可以使用 min_unitmax_unit 参数覆盖这些单位。

  • RandomUuid - 添加了哈希引擎支持

  • RandomPerson - 实现了一个新的转换器,该转换器取代了 RandomNameRandomLastNameRandomFirstNameRandomFirstNameMaleRandomFirstNameFemaleRandomTitleMaleRandomTitleFemale。这个新的转换器提供了增强的自定义能力,同时提供了与以前版本类似的功能。它会根据提供的 gender 参数生成 FirstNameLastNameTitle 等个人数据,该参数现在支持动态模式。未来的次要版本将允许覆盖默认的名称数据库。

  • 添加了 tsModify - 一个用于 time.Time 对象修改的新模板函数

  • 引入了一个新的 RandomIp 转换器,该转换器能够基于指定的网络掩码生成随机 IP 地址。

  • 添加了一个新的 RandomMac 转换器,用于生成随机 Mac 地址。

  • 由于引入了更灵活和统一的选项,删除的转换器包括 RandomMacAddressRandomIPv4RandomIPv6RandomUnixTimeRandomTitleMaleRandomTitleFemaleRandomFirstNameRandomFirstNameMaleRandomFirstNameFemaleRandomLastNameRandomName

有用链接