本主题介绍了如何创建和重建大型自定义字典。同时还介绍了多种错误场景。
何时选择自定义大字典而非常规自定义字典
如果您想要在您的内容中扫描数万个敏感字词或短语,那么常规的自定义字典检测器就足够了。如果您有更多字词或短语,或者您的字词列表经常更改,请考虑创建大型自定义字典,该字典可以支持数千万个字词。
自定义字典与其他自定义 infoType 的大不同
大型自定义字典不同于其他自定义 infoType,因为每个大型自定义字典都由两部分组成:
- 您创建和定义的短语列表。该列表以文本文件的形式存储在 Cloud Storage 中或以列的形式存储在 BigQuery 表中。
- 敏感数据保护功能生成并存储在 Cloud Storage 中的字典文件。字典文件由字词列表的副本和布隆过滤器组成,有助于进行搜索和匹配。
创建大型自定义字典
本部分介绍如何创建、修改和重建大型自定义 字典。
创建术语列表
创建一个列表,其中包含您希望添加新字词的所有字词和短语 要搜索的 infoType 检测器。执行下列其中一项操作:
- 将每个字词或短语各自位于一行的文本文件放在 Cloud Storage 存储分区中。
- 将 BigQuery 表的一列指定为 用于保存字词和短语的容器。在列中为每个条目提供自己的行。只要所有字典字词和短语都位于一列中,您就可以使用现有 BigQuery 表。
您可能会组建出过大的术语列表, 要处理的敏感数据保护。如果您看到错误消息,请参阅本主题后面的排查错误。
创建存储的 infoType
创建术语列表后,使用 Sensitive Data Protection 创建字典:
控制台
在 Cloud Storage 存储桶中,创建一个新文件夹 Sensitive Data Protection 将存储生成的字典。
敏感数据保护功能会在您指定的位置创建包含字典文件的文件夹。
在 Google Cloud 控制台中,前往创建 infoType 页面。
在类型部分,选择大型自定义字典。
对于 InfoType ID,请输入存储的 infoType 的标识符。
您将 在配置检查和去标识化时使用此标识符 作业。您可以在名称中使用字母、数字、连字符和下划线。
在 InfoType 显示名称中,输入存储的 infoType 的名称。
您可以在名称中使用空格和标点符号。
在说明中,输入存储的 infoType 所检测到内容的说明。
对于存储类型,请选择术语列表的位置:
- BigQuery:输入项目 ID、数据集 ID 和表 ID。 在字段名称字段中,输入列标识符。您最多可以指定表中的一列。
- Google Cloud Storage:输入文件的路径。
在输出存储桶或文件夹部分,输入 Cloud Storage 存储桶 您在第 1 步中创建的文件夹。
点击创建。
系统会显示存储的 infoType 的摘要。字典生成后,新的存储 infoType 可供使用,infoType 的状态会显示为准备就绪。
C#
如需了解如何安装和使用用于 Sensitive Data Protection 的客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用用于 Sensitive Data Protection 的客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用用于 Sensitive Data Protection 的客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
- 在 Cloud Storage 存储分区中为字典创建一个新文件夹。 Sensitive Data Protection 会创建包含字典的文件夹 文件。
- 使用
storedInfoTypes.create
方法创建字典。create
方法采用以下参数:StoredInfoTypeConfig
对象,该对象包含存储的 infoType 的配置。其中包括:description
:字典的说明。displayName
:您要为字典指定的名称。LargeCustomDictionaryConfig
: 包含大型自定义字典的配置。具体内容如下:BigQueryField
:如果您的术语列表存储在 BigQuery 中,则指定此参数。 包括对存储列表的表的引用以及含有每个字典短语的字段。CloudStorageFileSet
:如果您的术语列表存储在 Cloud Storage 中,则指定此参数。 包含 Cloud Storage 中来源位置的网址,格式如下:"gs://[PATH_TO_GS]"
。 支持使用通配符。outputPath
:Cloud Storage 存储分区中用于存储所创建字典的位置的路径。
storedInfoTypeId
:存储的 infoType 的标识符。您可以使用此标识符来引用存储的 infoType 无论是重建、删除还是在检查或 去标识化作业。如果将此字段留空,系统会为您生成一个标识符。
以下是示例 JSON,在将其发送到 storedInfoTypes.create
时
方法,它会创建新的存储的 infoType,具体来说就是一个大型自定义
字典检测器。此示例根据存储在公开可用的 BigQuery 数据库 (bigquery-public-data.samples.github_nested
) 中的术语列表创建存储的 infoType。该数据库包含提交中使用的所有 GitHub 用户名。生成字典的输出路径设置为名为 dlptesting
的 Cloud Storage 存储桶,且存储的 infoType 命名为 github-usernames
。
JSON 输入
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/storedInfoTypes
{
"config":{
"displayName":"GitHub usernames",
"description":"Dictionary of GitHub usernames used in commits",
"largeCustomDictionary":{
"outputPath":{
"path":"gs://[PATH_TO_GS]"
},
"bigQueryField":{
"table":{
"datasetId":"samples",
"projectId":"bigquery-public-data",
"tableId":"github_nested"
}
}
}
},
"storedInfoTypeId":"github-usernames"
}
重建字典
如果您想更新自己的字典,请先更新源术语列表, 然后指示 Sensitive Data Protection 重新构建存储的 infoType。
更新 Cloud Storage 或 BigQuery。
根据需要添加、移除或更改字词或词组。
使用 Google Cloud 控制台或
storedInfoTypes.patch
方法“重建”存储的 infoType,以创建其新版本。重新构建系统会创建字典的新版本,该版本将 旧字典。
将存储的 infoType 重新构建为新版本后,系统会删除旧版本。在敏感数据保护功能更新存储的 infoType 时,其状态为“待处理”。在此期间,存储的 infoType 的旧版本仍会存在。在存储的 infoType 处于待处理状态时,您运行的任何扫描都将使用存储的 infoType 的旧版本运行。
如需重建存储的 infoType,请执行以下操作:
控制台
- 更新并保存 Cloud Storage 或 BigQuery 中的术语列表。
在 Google Cloud 控制台中,前往已存储 infoType 的列表。
点击要更新的存储的 infoType 的 ID。
在 InfoType 详情页面上,点击重建数据。
Sensitive Data Protection 会使用您对源术语列表所做的更改重新构建存储的 infoType。存储的 infoType 的状态变为 “Ready”(就绪)就可以使用了任何使用存储的 infoType 的模板或作业触发器都将自动使用重新构建的版本。
C#
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用用于 Sensitive Data Protection 的客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用适用于敏感数据保护的客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用用于 Sensitive Data Protection 的客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
更新字词列表
如果要仅更新大型自定义
字典、
storedInfoTypes.patch
请求只需要 name
字段。请提供
要重新构建的存储的 infoType。
以下模式表示 name
字段的有效条目:
organizations/ORGANIZATION_ID/storedInfoTypes/STORED_INFOTYPE_ID
projects/PROJECT_ID/storedInfoTypes/STORED_INFOTYPE_ID
将 STORED_INFOTYPE_ID 替换为您要重新构建的存储 infoType 的标识符。
如果您不知道存储的 infoType 的标识符,请调用 storedInfoTypes.list
方法,查看所有当前存储的 infoType 的列表。
示例
PATCH https://dlp.googleapis.com/v2/projects/PROJECT_ID/storedInfoTypes/STORED_INFOTYPE_ID
在这种情况下,不需要请求正文。
切换来源术语列表
您可以将存储的 infoType 的源术语列表从存储在 BigQuery 中更改为存储在 Cloud Storage 中。使用 storedInfoTypes.patch
方法,但要在 LargeCustomDictionaryConfig
中(您之前在其中使用过 BigQueryField
对象)包含一个 CloudStorageFileSet
对象。然后,将 updateMask
参数设置为存储的 infoType
参数中,
FieldMask
格式。例如,以下 JSON 会在 updateMask
参数中声明 Cloud Storage 路径的网址已更新 (large_custom_dictionary.cloud_storage_file_set.url
):
示例
PATCH https://dlp.googleapis.com/v2/projects/PROJECT_ID/storedInfoTypes/github-usernames
{
"config":{
"largeCustomDictionary":{
"cloudStorageFileSet":{
"url":"gs://[BUCKET_NAME]/[PATH_TO_FILE]"
}
}
},
"updateMask":"large_custom_dictionary.cloud_storage_file_set.url"
}
同样,您可以将术语列表从存储在 BigQuery 表中更改为存储在 Cloud Storage 存储桶中。
使用大型自定义字典检测器扫描内容
使用大型自定义字典检测器扫描内容类似于使用任何其他自定义 infoType 检测器扫描内容。
此过程假定您已有存储的 infoType。有关 相关信息,请参阅本页面中的创建存储的 infoType。
控制台
您可以在执行以下操作时应用大型自定义字典检测器:
在该页面的配置检测部分的 InfoTypes 子部分中,您可以指定大型自定义字典 infoType。
- 点击管理 infoType。
- 在 InfoType 窗格中,点击自定义标签页。
- 点击添加自定义 infoType。
在添加自定义 infoType 窗格中,执行以下操作:
- 对于类型,选择存储的 infoType。
- 对于 InfoType,请输入自定义 infoType 的名称。您可以使用字母、数字和下划线。
对于 Likelihood, 分配给与此自定义 infoType 匹配的所有发现结果。您可以 进一步微调单个发现结果的可能性级别, 热词规则。
如果您未指定默认值,则默认可能性级别为 设为
VERY_LIKELY
。如需了解详情,请参阅匹配概率。在灵敏度部分,选择您要 分配给与此自定义 infoType 匹配的所有发现结果。如果您未指定值,则这些发现的敏感度级别会设为
HIGH
。敏感度得分用于数据分析。时间 敏感数据保护功能会使用 infoType 的敏感度分数 计算敏感度等级。
在存储的 infoType 名称部分,选择所需的存储的 infoType 新的自定义 infoType 的基础。
点击完成以关闭添加自定义 infoType 窗格。
可选:在内置标签页上,修改您选择的内置功能 infoType。
点击完成以关闭 InfoTypes 窗格。
自定义 infoType 已添加到 Sensitive Data Protection 扫描。不过,直到 您可以保存作业、作业触发器、模板或扫描配置。
创建或修改完配置后,点击保存。
C#
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用适用于敏感数据保护的客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
发送到
content.inspect
方法,以下示例使用存储的
infoType 检测器。infoType
参数是必需的,因为所有自定义 infoType 的名称都不得与内置的 infoType 或其他自定义 infoType 冲突。storedType
参数包含存储的 infoType 的完整资源路径。
JSON 输入
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:inspect
{
"inspectConfig":{
"customInfoTypes":[
{
"infoType":{
"name":"GITHUB_LOGINS"
},
"storedType":{
"name":"projects/PROJECT_ID/storedInfoTypes/github-logins"
}
}
]
},
"item":{
"value":"The commit was made by githubuser."
}
}
排查错误
如果您在尝试通过 术语列表,可能原因如下:
- 您的存储数据已达到上限
infoType。根据具体的问题,您可以选择多种解决方法:
- 如果您在 2024 年 Cloud Storage (200 MB)、 请尝试将文件拆分为多个文件。您可以使用多个文件组合成一个自定义字典,只要所有文件的总大小不超过 1 GB 即可。
- BigQuery 与 Cloud Storage 的限制不同。请考虑将术语移至 BigQuery 表中。最大 BigQuery 中的自定义字典列 为 1 GB, 行数为 5,000,000。
- 如果术语列表文件超出了源术语列表的所有适用限制,您必须将术语列表文件拆分为多个文件,并为每个文件创建一个字典。然后,为每项服务创建单独的扫描作业 字典。
- 您有一条或多条术语未包含至少一个字母或数字。 敏感数据保护功能无法扫描仅由空格或符号组成的字词。术语必须至少含有一个字母或数字。请查看您的术语列表是否包含任何此类术语,如果有,请进行更正或将其删除。
- 您的术语列表包含一个含有太多“成分”的短语。此处所述的“成分”是指仅包含字母、仅包含数字或仅包含非字母和非数字字符(如空格或符号)的连续序列。请查看您的术语列表是否包含任何此类术语,如果有,请进行更正或将其删除。
- Sensitive Data Protection 服务代理无权访问
字典源数据或 Cloud Storage 存储桶中
字典文件。如需解决此问题,请为敏感数据保护服务代理授予 Storage Admin (
roles/storage.admin
) 角色或 BigQuery Data Owner (roles/bigquery.dataOwner
) 和 BigQuery Job User (roles/bigquery.jobUser
) 角色。
API 概览
如果要创建大型自定义,则必须创建存储的 infoType 字典检测器。
存储的 infoType 在 Sensitive Data Protection 中由
StoredInfoType
对象。它包含以下相关对象:
StoredInfoTypeVersion
包含创建日期和时间,以及创建当前版本时出现的最近五条错误消息。StoredInfoTypeConfig
包含存储的 infoType 的配置,包括其 名称和说明对于大型自定义字典,type
必须为LargeCustomDictionaryConfig
。LargeCustomDictionaryConfig
指定以下两项:- Cloud Storage 或 BigQuery 中存储短语列表的位置。
- Cloud Storage 中用于存储生成的字典文件的位置。
StoredInfoTypeState
包含存储的 infoType 的最新版本以及任何待处理版本的状态。状态信息包括存储的 infoType 是正在重新构建、可供使用还是无效。
字典匹配详情
以下是有关 Sensitive Data Protection 如何与字典字词进行匹配的指南 和词组。以下要点同时适用于常规自定义字典和大型自定义字典:
- 字典字词不区分大小写。如果您的字典包含
Abby
,将匹配abby
、ABBY
、Abby
等。 - 字典或要扫描的内容中包含 - 其他
Unicode 编码中包含的字母、数字和其他字母字符
基本多语言平面
在扫描匹配时被视为空格。如果您的字典扫描
Abby Abernathy
,将匹配abby abernathy
、Abby, Abernathy
、Abby (ABERNATHY)
等。 - 任何匹配项两侧的字符均必须与字词中相邻字符的类型(字母或数字)不同。如果您的字典扫描
Abi
,将匹配Abi904
的前三个字符,但不匹配Abigail
的前三个字符。 - 如果字典字词包含 Unicode 标准补充多语言平面中的字符,则可能会出现意外结果。此类字符的示例包括表情符号、科学符号和历史文字。
字母、数字和其他字母字符的定义如下:
- 字母:常规类别
Lu
、Ll
、Lt
、Lm
或Lo
的字符 是 Unicode 规范中的一种, - 数字:Unicode 规范中属于一般类别
Nd
的字符 - 其他字母字符:具有 Unicode 规范中常规类别
Nl
或具有 Unicode 标准定义的协同属性Other_Alphabetic
的字符
如需创建、修改或删除存储的 infoType,请使用以下方法:
storedInfoTypes.create
:通过您指定的StoredInfoTypeConfig
,新建存储的 infoType。storedInfoTypes.patch
: 使用您刚才创建的StoredInfoTypeConfig
重新构建存储的 infoType 指定。如果未指定,此方法会创建新版 API 存储的 infoType 与现有的StoredInfoTypeConfig
。storedInfoTypes.get
:检索指定存储的 infoType 的StoredInfoTypeConfig
和任何待处理版本。storedInfoTypes.list
:列出所有当前存储的 infoType。storedInfoTypes.delete
:删除指定的存储的 infoType。