自定义匹配可能性

热词规则可让您通过强大的上下文规则进一步扩展内置及自定义的 infoType 检测器。借助热词规则,您可将正则表达式和邻近度检测器添加到现有的 infoType 检测器,并适当地调整匹配可能性值。热词规则是一种在规则集中指定的检查规则。每个规则集都会应用于一组 infoType,这些 infoType 可以是自定义或内置类型。

对热词规则的剖析

infoType 检测器可以具有零项或多项热词规则。每条热词规则(HotwordRule 对象)都在检查规则(InspectionRule 对象)中进行定义。每条检查规则都在 InspectionRuleSet 对象中指定,而该对象又包含在 InspectConfig 对象中。

作为 JSON 对象,"inspectionRules" 数组中的单条热词规则如下所示:

"inspectionRules":[
  {
    "hotwordRule":{
      "hotwordRegex":{
        "pattern":"[REGEX_PATTERN]"
      },
      "proximity":{
        "windowAfter":"[NUM_CHARS_TO_CONSIDER_AFTER_FINDING]",
        "windowBefore":"[NUM_CHARS_TO_CONSIDER_BEFORE_FINDING]"
      }
      "likelihoodAdjustment":{
        "fixedLikelihood":"[LIKELIHOOD_VALUE]"
             -- OR --
        "relativeLikelihood":"[LIKELIHOOD_ADJUSTMENT]"
      },
    }
  },
  ...
]

每条热词规则均由三部分组成:

  • "hotwordRegex":一个定义热词条件的正则表达式模式(Regex 对象)。
  • "proximity":必须包含整个热词的发现结果的邻近度。该字段包含一个 Proximity 对象,后者由下面两个值组成:

    • "windowBefore":要考虑的位于发现结果前面的字符数。
    • "windowAfter":要考虑的位于发现结果后面的字符数。
  • "likelihoodAdjustment":对发现结果可能性的调整。该字段包含一个 LikelihoodAdjustment 对象,后者可设为下述任一值:

    • "fixedLikelihood":要将发现结果设为的固定 Likelihood 值。
    • "relativeLikelihood":一个数字,表示提高/降低发现结果可能性所依据的级别。例如,如果在未应用检测规则时发现结果是 POSSIBLE,且 relativeLikelihood 为 1,则可能性将升级为 LIKELY;如果值为 -1,则可能性降级为 UNLIKELY。可能性永远不会低于 VERY_UNLIKELY 或超过 VERY_LIKELY,因此如果在基本可能性为 VERY_LIKELY 时依次应用调整值 1 和 -1,则最终的可能性将为 LIKELY

热词示例:匹配医疗记录编号

假设您想要检测采用“###-#-#####”形式的自定义 infoType(例如医疗记录编号),并且您希望在此编号前面(而非之后)出现热词“MRN”时提升 Cloud DLP 发现结果的匹配可能性。因此:

  • 123-4-56789 将匹配为 POSSIBLE
  • MRN 123-4-56789 将匹配为 VERY_LIKELY

下面的 JSON 示例显示了按创建正则表达式 infoType 检测器中所述的自定义正则表达式,但添加了相应的热词规则:

JSON 输入

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:inspect?key={YOUR_API_KEY}

{
  "item":{
    "value":"Patient's MRN 444-5-22222 and just a number 333-2-33333"
  },
  "inspectConfig":{
    "customInfoTypes":[
      {
        "infoType":{
          "name":"C_MRN"
        },
        "regex":{
          "pattern":"[0-9]{3}-[0-9]{1}-[0-9]{5}"
        },
        "likelihood":"POSSIBLE",
      }
    ],
    "ruleSet":[
        {
        "infoTypes": [{"name" : "C_MRN"}],
        "rules":[
          {
            "hotwordRule":{
              "hotwordRegex":{
                "pattern":"(?i)(mrn|medical)(?-i)"
              },
              "likelihoodAdjustment":{
                "fixedLikelihood":"VERY_LIKELY"
              },
              "proximity":{
                "windowBefore":10
              }
            }
          }
        ]
      }
    ]
  }
}

JSON 输出(简化版本)

{
  "result": {
    "findings": [
      {
        "infoType": {
          "name": "C_MRN"
        },
        "likelihood": "VERY_LIKELY",
        "location": {
          "byteRange": {
            "start": "14",
            "end": "25"
          },
          "codepointRange": { ... }
        }
      },
      {
        "infoType": {
          "name": "C_MRN"
        },
        "likelihood": "POSSIBLE",
          "byteRange": {
            "start": "44",
            "end": "55"
          },
          "codepointRange": { ... }
        }
      }
    ]
  }
}

输出显示,借助我们命名为 C_MRN 的自定义 infoType 检测器和自定义正则表达式,Cloud DLP 正确识别了医疗记录编号。此外,由于热词规则中的上下文匹配,Cloud DLP 根据配置为第一个结果(旁边带有 MRN)分配了确定性 VERY_LIKELY。第二个发现结果缺少上下文,因此确定性保持在 POSSIBLE