Cloud Data Loss Prevention 的内置 infoType 检测器可以有效地查找常见的敏感数据类型。借助自定义 infoType 检测器,您可以全面定制自己的敏感数据检测器。检查规则可通过修改所给定的 infoType 检测器的检测机制,帮助优化 Cloud DLP 返回的扫描结果。
如果要从内置 infoType 检测器返回的结果中排除或包含更多值,您可以从头开始创建新的自定义 infoType,并定义 Cloud DLP 应遵循的所有条件。或者,您也可以根据自己指定的条件,优化 Cloud DLP 的内置或自定义检测器返回的结果。您可添加检查规则来实现此目的,它们有助于减少噪声、提高精确率和召回率,或者调整扫描结果的确定性。
本主题讨论如何使用两种类型的检查规则来排除某些结果或添加额外结果,所有操作均根据您指定的自定义条件执行。本主题还将介绍几种您可能需要更改现有 infoType 检测器的场景。
这两种检查规则是:
排除规则
排除规则对以下情况非常有用:
- 您希望排除结果中因 infoType 检测器重叠而导致的重复的扫描匹配项。例如,您要扫描电子邮件地址和电话号码,但却获得两个带电话号码的电子邮件地址匹配项,例如“206-555-0764@example.org”。
- 您的扫描结果显示有噪声。例如,您发现在扫描合法电子邮件地址时,同一虚拟电子邮件地址(例如“example@example.com”)或网域(例如“example.com”)返回的次数过多。
- 您有一个希望从结果中排除的字词、短语或字符组合的列表。
- 您想从结果中排除整列数据。
- 您希望排除与正则表达式匹配的字符串附近的发现结果。
排除规则 API 概览
Cloud DLP 在 ExclusionRule
对象中定义排除规则。在 ExclusionRule
中,指定以下其中一项:
Dictionary
对象,其中包含要从结果中排除的字符串列表。Regex
对象,用于定义正则表达式模式。与模式匹配的字符串会从结果中排除。ExcludeInfoTypes
对象,其中包含 infoType 检测器数组。如果发现结果与此处列出的任何 infoType 检测器匹配,则从结果中排除该发现结果。ExcludeByHotword
对象,其中包含以下内容:- 定义启动指令的正则表达式。
- 邻近度值,用于定义启动指令与发现结果之间的距离。
如果发现结果在设定的范围内,则该结果会从结果中排除。对于表,您可以通过此排除规则类型从结果中排除整列数据。
排除规则示例场景
下列各个 JSON 代码段均说明如何针对指定场景配置 Cloud DLP。
在 EMAIL_ADDRESS 检测器扫描中忽略特定电子邮件地址
以下采用多种语言的 JSON 代码段和代码说明如何通过 InspectConfig
向 Cloud DLP 指示应在使用 infoType 检测器 EMAIL_ADDRESS
的扫描中避免匹配“example@example.com”:
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"rules":[
{
"exclusionRule":{
"dictionary":{
"wordList":{
"words":[
"example@example.com"
]
}
},
"matchingType": "MATCHING_TYPE_FULL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
在 EMAIL_ADDRESS 检测器扫描中忽略以特定网域结尾的电子邮件地址
以下采用多种语言的 JSON 代码段和代码说明如何通过 InspectConfig
向 Cloud DLP 指示应在使用 infoType 检测器 EMAIL_ADDRESS
的扫描中避免匹配以“@example.com”结尾的任何电子邮件地址:
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"rules":[
{
"exclusionRule":{
"regex":{
"pattern":".+@example.com"
},
"matchingType": "MATCHING_TYPE_FULL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
忽略包含子字符串“TEST”的扫描匹配项
以下采用多种语言的 JSON 代码段和代码说明如何通过 InspectConfig
向 Cloud DLP 指示应从指定的 infoType 列表中排除包含令牌“TEST”的任何结果。
请注意,这相当于将“TEST”作为令牌(而非子字符串)匹配,因此,虽然“TEST@email.com”之类的内容会匹配,但“TESTER@email.com”则不会。如果需要匹配子字符串,请在排除规则中使用正则表达式,而不是字典。
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
},
{
"name":"DOMAIN_NAME"
},
{
"name":"PHONE_NUMBER"
},
{
"name":"PERSON_NAME"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
},
{
"name":"DOMAIN_NAME"
},
{
"name":"PHONE_NUMBER"
},
{
"name":"PERSON_NAME"
}
],
"rules":[
{
"exclusionRule":{
"dictionary":{
"wordList":{
"words":[
"TEST"
]
}
},
"matchingType": "MATCHING_TYPE_PARTIAL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
在自定义 infoType 检测器扫描中忽略包含子字符串“Jimmy”的扫描匹配项
以下采用多种语言的 JSON 代码段和代码说明如何通过 InspectConfig
向 Cloud DLP 指示应在使用指定自定义正则表达式检测器的扫描中避免匹配“Jimmy”这个名字:
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"customInfoTypes":[
{
"infoType":{
"name":"CUSTOM_NAME_DETECTOR"
},
"regex":{
"pattern":"[A-Z][a-z]{1,15}, [A-Z][a-z]{1,15}"
}
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"CUSTOM_NAME_DETECTOR"
}
],
"rules":[
{
"exclusionRule":{
"dictionary":{
"wordList":{
"words":[
"Jimmy"
]
}
},
"matchingType": "MATCHING_TYPE_PARTIAL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
在与自定义检测器重叠的 PERSON_NAME 检测器扫描中忽略扫描匹配项
在此场景中,如果某匹配项还在使用代码段第一部分中定义的自定义正则表达式检测器的扫描中得到匹配,则用户不希望使用内置检测器 PERSON_NAME
的 Cloud DLP 扫描返回该匹配项。
以下采用多种语言的 JSON 代码段和代码在 InspectConfig
中同时指定了自定义正则表达式检测器和排除规则。自定义正则表达式检测器用于指定要从结果中排除的姓名。排除规则指定如果针对 PERSON_NAME
的扫描返回的任何结果也被自定义正则表达式检测器匹配到,则忽略这些结果。请注意,VIP_DETECTOR
在此情况下标记为 EXCLUSION_TYPE_EXCLUDE
,因此它本身不产生结果。它只会影响 PERSON_NAME
检测器生成的结果。
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"PERSON_NAME"
}
],
"customInfoTypes":[
{
"infoType":{
"name":"VIP_DETECTOR"
},
"regex":{
"pattern":"Dana Williams|Quinn Garcia"
},
"exclusionType":"EXCLUSION_TYPE_EXCLUDE"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"PERSON_NAME"
}
],
"rules":[
{
"exclusionRule":{
"excludeInfoTypes":{
"infoTypes":[
{
"name":"VIP_DETECTOR"
}
]
},
"matchingType": "MATCHING_TYPE_FULL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
忽略同时被 EMAIL_ADDRESS 检测器匹配到的 PERSON_NAME 检测器匹配项
以下采用多种语言的 JSON 代码段和代码说明如何通过 InspectConfig
向 Cloud DLP 指示在 PERSON_NAME
检测器的匹配项与 EMAIL_ADDRESS
检测器的匹配项重叠时,仅返回一个匹配项。这样是为了避免出现电子邮件地址(如“james@example.com”)在 PERSON_NAME
和 EMAIL_ADDRESS
检测器上都显示为匹配项的情况。
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"PERSON_NAME"
},
{
"name":"EMAIL_ADDRESS"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"PERSON_NAME"
}
],
"rules":[
{
"exclusionRule":{
"excludeInfoTypes":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
},
"matchingType": "MATCHING_TYPE_PARTIAL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
在 DOMAIN_NAME 检测器扫描中忽略电子邮件地址域名匹配项
以下采用多种语言的 JSON 代码段和代码说明如何通过 InspectConfig
向 Cloud DLP 指示仅返回与 EMAIL_ADDRESS
检测器扫描匹配项不重叠的 DOMAIN_NAME
检测器扫描匹配项。在此场景中,主扫描是 DOMAIN_NAME
检测器扫描。用户不希望在结果中返回属于电子邮件地址一部分的域名匹配项:
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"DOMAIN_NAME"
},
{
"name":"EMAIL_ADDRESS"
}
],
"customInfoTypes":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"exclusionType":"EXCLUSION_TYPE_EXCLUDE"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"DOMAIN_NAME"
}
],
"rules":[
{
"exclusionRule":{
"excludeInfoTypes":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
},
"matchingType": "MATCHING_TYPE_PARTIAL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
忽略位于字符串附近的匹配项
以下示例说明如果“SKU”一词位于发现结果前 10 个字符以内或发现结果后 10 个字符以内,如何排除 US_SOCIAL_SECURITY_NUMBER
infoType 检测器的匹配项。
根据排除规则,此示例不会将 222-22-2222
归类为可能的美国社会保障号。
{
"item": {
"value": "The customer sent the product SKU 222-22-2222"
},
"inspectConfig": {
"infoTypes": [
{
"name": "US_SOCIAL_SECURITY_NUMBER"
}
],
"ruleSet": [
{
"infoTypes": [
{
"name": "US_SOCIAL_SECURITY_NUMBER"
}
],
"rules": [
{
"exclusionRule": {
"excludeByHotword": {
"hotwordRegex": {
"pattern": "(SKU)"
},
"proximity": {
"windowBefore": 10,
"windowAfter": 10
}
},
"matchingType": "MATCHING_TYPE_FULL_MATCH"
}
}
]
}
],
"includeQuote": true
}
}
忽略整列数据中的发现结果
以下示例说明了如何在表格名称与正则表达式匹配时排除整个表格数据中的发现结果。在此示例中,如果任何发现结果位于虚假社会保障号列中,则结果不会与 US_SOCIAL_SECURITY_NUMBER
infoType 检测器匹配。
此示例仅返回 222-22-2222
,因为 111-11-1111
位于虚假社会保障号列中。
{
"item": {
"table": {
"headers": [
{
"name": "Fake Social Security Number"
},
{
"name": "Real Social Security Number"
}
],
"rows": [
{
"values": [
{
"stringValue": "111-11-1111"
},
{
"stringValue": "222-22-2222"
}
]
}
]
}
},
"inspectConfig": {
"infoTypes": [
{
"name": "US_SOCIAL_SECURITY_NUMBER"
}
],
"includeQuote": true,
"ruleSet": [
{
"infoTypes": [
{
"name": "US_SOCIAL_SECURITY_NUMBER"
}
],
"rules": [
{
"exclusionRule": {
"excludeByHotword": {
"hotwordRegex": {
"pattern": "(Fake Social Security Number)"
},
"proximity": {
"windowBefore": 1
}
},
"matchingType": "MATCHING_TYPE_FULL_MATCH"
}
}
]
}
],
"minLikelihood": "POSSIBLE"
}
}
热词规则
热词规则对以下情况非常有用:
- 您想要根据匹配项与热词的邻近度来更改分配给扫描匹配项的可能性值。例如,您希望根据患者姓名与“患者”一词的邻近度,为患者姓名匹配项设置更高的可能性值。
- 检查结构化的表格数据时,您想要根据列标题名称来更改分配给匹配项的可能性值。例如,您希望为标题为
ACCOUNT_ID
的列中的US_SOCIAL_SECURITY_NUMBER
设置更高的可能性值。
热词规则 API 概览
在 Cloud DLP 的 InspectionRule
对象中,您可以指定一个 HotwordRule
对象,用于为在热词的一定邻近范围内的结果调整可能性。
InspectionRule
对象在 InspectionRuleSet
对象中分组为“规则集”,组中还有规则集所适用的 infoType 检测器列表。规则集中的规则按指定顺序进行应用。
热词规则示例场景
以下代码段说明如何针对特定场景配置 Cloud DLP。
提高旁边有热词“患者”的 PERSON_NAME 匹配项的可能性
以下采用多种语言的 JSON 代码段和代码说明了如何使用 InspectConfig
属性来扫描医疗数据库中的患者姓名。您可以使用 Cloud DLP 的内置 infoType 检测器 PERSON_NAME
,但这会导致 Cloud DLP 匹配所有人名,而不仅仅是患者姓名。为解决此问题,您可以添加一条热词规则,用于在潜在匹配项第一个字符的一定邻近字符范围内查找“患者”一词。然后,您可以向匹配该模式的结果分配“可能性极大”(very likely) 这一可能性,因为这些结果符合您的特殊条件。通过在 InspectConfig
中将 Likelihood
的最小值设为 VERY_LIKELY
,可确保结果中仅返回符合此配置的匹配项。
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"PERSON_NAME"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"PERSON_NAME"
}
],
"rules":[
{
"hotwordRule":{
"hotwordRegex":{
"pattern":"patient"
},
"proximity":{
"windowBefore":50
},
"likelihoodAdjustment":{
"fixedLikelihood":"VERY_LIKELY"
}
}
}
]
}
],
"minLikelihood":"VERY_LIKELY"
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
如需详细了解热词,请参阅自定义匹配可能性。
多种检查规则场景
以下采用多种语言的 InspectConfig
JSON 代码段和代码说明了如何同时应用排除规则和热词规则。此代码段的规则集同时包含热词规则以及字典和正则表达式排除规则。请注意,这四条规则在 rules
元素的数组中指定。
协议
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
...
"inspectConfig":{
"infoTypes":[
{
"name":"PERSON_NAME"
}
],
"ruleSet":[
{
"infoTypes":[
{
"name":"PERSON_NAME"
}
],
"rules":[
{
"hotwordRule":{
"hotwordRegex":{
"pattern":"patient"
},
"proximity":{
"windowBefore":10
},
"likelihoodAdjustment":{
"fixedLikelihood":"VERY_LIKELY"
}
}
},
{
"hotwordRule":{
"hotwordRegex":{
"pattern":"doctor"
},
"proximity":{
"windowBefore":10
},
"likelihoodAdjustment":{
"fixedLikelihood":"UNLIKELY"
}
}
},
{
"exclusionRule":{
"dictionary":{
"wordList":{
"words":[
"Quasimodo"
]
}
},
"matchingType": "MATCHING_TYPE_PARTIAL_MATCH"
}
},
{
"exclusionRule":{
"regex":{
"pattern":"REDACTED"
},
"matchingType": "MATCHING_TYPE_PARTIAL_MATCH"
}
}
]
}
]
}
...
Python
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud DLP 客户端库,请参阅 Cloud DLP 客户端库。
如需向 Cloud DLP 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
重叠的 infoType 检测器
可以定义与内置 infoType 检测器同名的自定义 infoType 检测器。如热词规则示例场景部分中的示例所示,如果您创建与内置 infoType 同名的自定义 infoType 检测器,则新 infoType 检测器检测到的任何结果都会添加到内置检测器检测到的结果中。仅当 InspectConfig
对象的 infoType 列表中指定了内置 infoType 时,才会出现此情况。
创建新的自定义 infoType 检测器时,请对示例内容进行充分测试,确保其按预期工作。