如何创建自定义屏蔽规则,以使用 DLP 和 BigQuery 对数据进行去标识化处理或隐藏处理?

How to create a custom masking rule to de-identify or obscure data with DLP and BigQuery?

提问人:Lais T 提问时间:8/30/2023 最后编辑:Lais T 更新时间:9/14/2023 访问量:170

问:

根据 (Link),可以使用 GCP 中的 DLP API 将字符部分替换为符号(去标识化敏感数据),从而屏蔽敏感数据。我没有找到任何胶水来自定义请求中的转换规则,例如,假设我们需要转换 16 位帐号,一旦检测到值,前 6 位数字“和”后 4 位数字将保持不变,而其余数字将被替换为“*”, 然而,任何这样的组合,配置似乎只允许转换字段的第一个“或”最后一位数字。(123456******3456)

{
  "deidentifyConfig": {
    "recordTransformations": {
      "fieldTransformations": [
        {
          "fields": [
            {
              "name": "NUMBER_ACCOUNT"
            }
          ],
          "primitiveTransformation": {
            "characterMaskConfig": {
              "maskingCharacter": "#",
              "numberToMask": -6
            }
          }
        }
      ]
    }
  }

以上代码的结果:

"stringValue": "#########123456"

该标签允许设置要屏蔽的字符数,并且结合我们可以遮盖前两位或最后两位数字,但是,两者呢?numberToMaskreverseOrder

是否可以使用 REGEX 或转换规则来创建自定义,或者应该采用什么方法来检查(检测)特定的敏感数据并使用 DLP 应用任何自定义屏蔽规则?deidentifyConfig

例如,如何获取此掩码值:

12345678****3456
12345678******56

注意。BigQuery 中的动态数据掩码在这里不是一个选项,因为目前还没有创建自定义掩码规则的方法

大查询 数据屏蔽 谷歌云DLP

评论


答:

1赞 Jordanna Chord 8/30/2023 #1

目前不支持该功能,但我会将其记录为团队的功能请求。

评论

0赞 Lais T 8/31/2023
感谢 @Jordanna Chord,同时,有人有什么解决方法可以解决这个问题吗?
1赞 Mike DaCosta 8/31/2023 #2

一种解决方法是使用与您的帐号匹配的正则表达式定义自定义 infoType,并提供匹配的组,如下所示:

  "inspectConfig": {
    "customInfoTypes": [
      {
        "infoType": {
          "name": "NUMBER_ACCOUNT_TYPE"
        },
        "likelihood": "LIKELY",
        "regex": {
          "pattern": "\\d{8}(\\d{4})\\d{4}",
          "groupIndexes": [
            1
          ]
        }
      }
    ]
  },

然后用于屏蔽自定义 infoType 查找结果:infoTypeTransformations

  "deidentifyConfig": {
    "recordTransformations": {
      "fieldTransformations": [
        {
          "fields": [
            {
              "name": "NUMBER_ACCOUNT"
            }
          ],
          "infoTypeTransformations": {
            "transformations": [
              {
                "infoTypes": [
                  {
                    "name": "NUMBER_ACCOUNT_TYPE"
                  }
                ],
                "primitiveTransformation": {
                  "characterMaskConfig": {
                    "maskingCharacter": "#"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }

使用 REST API 的示例请求: https://cloud.google.com/dlp/docs/reference/rest/v2/projects.locations.content/deidentify?apix=true&apix_params=%7B%22parent%22%3A%22projects%2Fproject-id%2Flocations%2Fglobal%22%2C%22resource%22%3A%7B%22item%22%3A%7B%22table%22%3A%7B%22headers%22%3A%5B%7B%22name%22%3A%22NUMBER_ACCOUNT%22%7D%2C%7B%22name%22%3A%22NUMBER_OTHER%22%7D%5D%2C%22rows%22%3A%5B%7B%22values%22%3A%5B%7B%22stringValue%22%3A%221234567890123456%22%7D%2C%7B%22stringValue%22%3A%221234567890123456%22%7D%5D%7D%5D%7D%7D%2C%22inspectConfig%22%3A%7B%22customInfoTypes%22%3A%5B%7B%22infoType%22%3A%7B%22name%22%3A%22NUMBER_ACCOUNT_TYPE%22%7D%2C%22likelihood%22%3A%22LIKELY%22%2C%22regex%22%3A%7B%22pattern%22%3A%22%5C%5Cd%7B8%7D(%5C%5Cd%7B4%7D)%5C%5Cd%7B4%7D%22%2C%22groupIndexes%22%3A%5B1%5D%7D%7D%7D%2C%22deidentifyConfig%22%3A%7B%22recordTransformations%22%3A%7B%22fieldTransformations%22%3A%5B%7B%22fields%22%3A%5B%7B%22name%22%3A%22NUMBER_ACCOUNT%22%7D%5D%2C%22infoTypeTransformations%22%3A%7B%22transformations%22%3A%5B%7B%22infoTypes%22%3A%5B%7B%22name%22%3A%22NUMBER_ACCOUNT_TYPE%22%7D%5D%2C%22primitiveTransformation%22%3A%7B%22characterMaskConfig%22%3A%7B%22maskingCharacter%22%3A%22%23%22%7D%7D%7D%5D%7D%7D%7D%7D%7D%7D

评论

0赞 Lais T 9/2/2023
非常感谢 DaCosta@Mike,它工作正常!, 可以根据需要掩盖字符串的不同部分,我认为这不是解决方法...... @Jordanna 和弦groupsIndexes
0赞 Pratibha Chowdary 9/14/2023 #3

我看到您的用例可以通过以下步骤来满足。希望它有所帮助。

我们可以根据此文档创建用于自定义掩码例程的 UDF。https://cloud.google.com/bigquery/docs/user-defined-functions#custom-mask

对于上面描述的用例,我们可以执行以下操作:

第 1 步 - 创建以下 UDF -

CREATE OR REPLACE FUNCTION custom_mask(NUMBER_ACCOUNT STRING) RETURNS STRING
OPTIONS (data_governance_type="DATA_MASKING") AS (
SAFE.REGEXP_REPLACE(
    NUMBER_ACCOUNT,
    r'^(.{6}).*(.{4})$',
    r'\1' || REPEAT('*', LENGTH(NUMBER_ACCOUNT) - 8) || r'\2'
  ));

步骤 2 - 创建策略标记并将此自定义屏蔽规则附加到策略标记。

步骤 3 - 使用此策略标记标记所需的列以动态屏蔽它。