本页面介绍如何检查 Cloud Storage 资源,以及如何使用 Cloud Data Loss Prevention API 创建去标识化的数据副本。
此操作有助于确保您在业务流程中使用的文件不包含敏感数据,例如个人身份信息 (PII)。Sensitive Data Protection 可以检查 Cloud Storage 存储桶中的文件是否存在敏感数据,并在单独的存储桶中创建这些文件的去标识化副本。然后,您可以在业务流程中使用去标识化的副本。
如需详细了解此功能,请参阅对 Cloud Storage 中的敏感数据进行去标识化处理。
准备工作
本页面假定您已完成以下操作:
您已启用结算功能。
您已启用 Sensitive Data Protection。
您有一个 Cloud Storage 存储桶,其中包含要进行去标识化处理的数据。
您知道如何向 DLP API 发送 HTTP 请求。如需了解详情,请参阅使用 DLP API 检查敏感文本。
了解此操作的 限制和注意事项 。
存储检查需要以下 OAuth 范围:https://www.googleapis.com/auth/cloud-platform。如需了解详情,请参阅
对 DLP API 进行身份验证。
所需 IAM 角色
如果此操作的所有资源都位于同一项目中,则
服务代理的 DLP API 服务代理角色 (roles/dlp.serviceAgent) 就足够了。借助该角色,您可以执行以下操作:
- 创建检查作业
- 读取输入目录中的文件
- 将去标识化的文件写入输出目录
- 将转换详情写入 BigQuery 表
相关资源包括检查作业、去标识化模板、输入存储桶、输出存储桶和转换详情表。
如果您必须将资源放在不同的项目中,请确保项目的服务代理还具有以下角色:
- 输入存储桶或包含该存储桶的项目的 Storage Object Viewer 角色 (
roles/storage.objectViewer)。 - 输出存储桶或包含该存储桶的项目的 Storage Object Creator 角色
(
roles/storage.objectCreator)。 - 转换详情表或包含该表的项目的 BigQuery Data Editor 角色 (
roles/bigquery.dataEditor)。
如需向服务代理授予角色,请参阅授予单个角色。您还可以在以下级别控制访问权限:
API 概览
如需创建存储在 Cloud Storage 中的内容的去标识化副本,
您可以配置 一个检查作业
,该作业会根据您指定的条件查找敏感数据
。然后,在检查作业中,您
以Deidentify操作的形式提供去标识化说明。
如果您只想扫描存储桶中的部分文件,可以
限制作业扫描的文件。对于包含
去标识化的作业,支持的选项包括按类型 (FileType) 和正则表达式 (FileSet) 进行文件过滤。
启用 Deidentify 操作后,默认情况下,Sensitive Data Protection
会创建扫描中包含的所有 受支持文件类型
的去标识化(转换后)副本。不过,您可以将作业配置为仅转换部分受支持的文件类型。
可选:创建去标识化模板
如果您想控制发现结果的转换方式, 请创建以下模板。这些模板提供了有关转换结构化文件、非结构化文件和图片中的发现结果的说明。
去标识化模板:用于非结构化文件(例如自由格式文本文件)的默认
DeidentifyTemplate,可 用于非结构化文件,例如自由格式文本文件。此类DeidentifyTemplate不能包含RecordTransformations对象,该对象 仅受结构化内容支持。如果此模板不存在, Sensitive Data Protection 会使用ReplaceWithInfoTypeConfig方法转换 非结构化文件。结构化去标识化模板 :用于结构化文件(例如 CSV 文件)的
DeidentifyTemplate。此DeidentifyTemplate可以包含RecordTransformations。如果此模板不存在,Sensitive Data Protection 会使用您创建的默认去标识化模板。 如果该模板也不存在,Sensitive Data Protection 会使用ReplaceWithInfoTypeConfig方法转换结构化文件。图片遮盖模板 :用于图片的
DeidentifyTemplate。此 模板必须包含ImageTransformations对象。 如果此模板不存在,Sensitive Data Protection 会使用黑框遮盖图片中的所有发现结果。
详细了解如何创建去标识化模板。
创建包含去标识化操作的检查作业
DlpJob 对象提供了有关要检查的内容、要标记为敏感的数据类型以及如何处理发现结果的说明。
如需对 Cloud Storage
目录中的敏感数据进行去标识化处理,您的 DlpJob 必须至少定义以下内容:
- 一个
StorageConfig对象,用于指定要检查的 Cloud Storage 目录 。 - 一个
InspectConfig对象,其中包含要查找的数据类型 以及有关如何查找敏感数据的其他检查说明。 包含以下内容的
Deidentify操作:一个
TransformationConfig对象,用于指定您为结构化和非结构化文件中的数据去标识化而创建的任何 模板。您还可以包含用于遮盖图片中的敏感数据的配置。如果您未包含
TransformationConfig对象,Sensitive Data Protection 会将文本中的敏感数据替换为其 infoType。在图片中,它会使用黑框遮盖敏感数据。TransformationDetailsStorageConfig对象,用于指定 Sensitive Data Protection 必须 在其中存储有关每次转换的详细信息的 BigQuery 表。对于每次转换,详细信息包括说明、成功或错误代码、任何错误详细信息、转换的字节数、转换后的内容的位置,以及 Sensitive Data Protection 在其中进行转换的检查作业的名称。此表不会存储实际的去标识化内容。
当 数据写入 BigQuery 表时,结算和配额用量将记在 包含目标表的项目名下。
复制的内容经过去标识化处理后,去标识化作业即会完成。该作业包含有关指定
转换应用次数的摘要,您可以使用
projects.dlpJobs.get方法在DlpJob上检索该摘要。返回的 DlpJob 同时包含
一个 DeidentifyDataSourceDetails 对象和
一个 InspectDataSourceDetails对象。这些对象分别包含 Deidentify 操作和检查作业的结果。
如果您在 DlpJob 中包含 TransformationDetailsStorageConfig 对象,系统会创建一个 BigQuery
表,其中包含有关转换详情的元数据。对于发生的每次转换,Sensitive Data Protection
都会向该表中写入一行元数据。如需详细了解该表的内容,
请参阅转换详情参考文档。
代码示例
以下示例演示了如何使用 DLP API 创建 Cloud Storage 文件的去标识化副本。
HTTP 方法和网址
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
C#
如需了解如何安装和使用 Sensitive Data Protection 客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用 Sensitive Data Protection 客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Sensitive Data Protection 客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Sensitive Data Protection 客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用 Sensitive Data Protection 客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Sensitive Data Protection 客户端库,请参阅 Sensitive Data Protection 客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置身份验证。
REST
JSON 输入{
"inspect_job": {
"storage_config": {
"cloud_storage_options": {
"file_set": {
"url": "INPUT_DIRECTORY"
}
}
},
"inspect_config": {
"info_types": [
{
"name": "PERSON_NAME"
}
]
},
"actions": {
"deidentify": {
"cloud_storage_output": "OUTPUT_DIRECTORY",
"transformation_config": {
"deidentify_template": "DEIDENTIFY_TEMPLATE_NAME",
"structured_deidentify_template": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME",
"image_redact_template": "IMAGE_REDACTION_TEMPLATE_NAME"
},
"transformation_details_storage_config": {
"table": {
"project_id": "TRANSFORMATION_DETAILS_PROJECT_ID",
"dataset_id": "TRANSFORMATION_DETAILS_DATASET_ID",
"table_id": "TRANSFORMATION_DETAILS_TABLE_ID"
}
},
"fileTypesToTransform": ["IMAGE","CSV", "TEXT_FILE"]
}
}
}
}
替换以下内容:
PROJECT_ID:您要在其中存储检查作业的项目的 ID 。INPUT_DIRECTORY:您要检查的 Cloud Storage 目录,例如gs://input-bucket/folder1/folder1a。 如果网址以斜杠结尾,则不会扫描INPUT_DIRECTORY中的任何子目录。OUTPUT_DIRECTORY:您要在其中存储去标识化文件的 Cloud Storage 目录。此目录不得与INPUT_DIRECTORY位于同一 Cloud Storage 存储桶中。DEIDENTIFY_TEMPLATE_NAME:默认去标识化模板(适用于非结构化和结构化文件)的完整资源名称(如果您创建了该模板)。此值必须采用projects/projectName/(locations/locationId)/deidentifyTemplates/templateName格式。STRUCTURED_DEIDENTIFY_TEMPLATE_NAME:结构化文件的去标识化模板的完整资源名称(如果您创建了该模板)。 此值必须采用projects/projectName/(locations/locationId)/deidentifyTemplates/templateName格式。IMAGE_REDACTION_TEMPLATE_NAME:图片的图片遮盖模板的完整资源名称(如果您创建了该模板)。 此值必须采用projects/projectName/(locations/locationId)/deidentifyTemplates/templateName格式。TRANSFORMATION_DETAILS_PROJECT_ID:您要在其中存储转换详情的项目的 ID。TRANSFORMATION_DETAILS_DATASET_ID:您要在其中存储转换详情的 BigQuery 数据集的 ID。如果您未提供表 ID,系统会自动创建一个。TRANSFORMATION_DETAILS_TABLE_ID:您要在其中存储转换详情的 BigQuery 表的 ID。
请注意以下对象:
inspectJob:作业的配置对象 (DlpJob)。此对象包含 检查和去标识化阶段的配置。storageConfig:要检查的内容的位置 (StorageConfig)。此示例指定了 Cloud Storage 存储桶CloudStorageOptions。inspectConfig:有关您要检查的敏感数据的信息 (InspectConfig)。此示例检查 与内置 infoTypePERSON_NAME匹配的内容。actions:在作业的检查部分完成后要执行的操作 (Action)。deidentify:指定此操作会告知 Sensitive Data Protection 根据内部指定的配置对匹配的敏感数据进行去标识化处理 (Deidentify)。cloud_storage_output:指定您要检查的 Cloud Storage 目录的网址。transformation_config:指定 Sensitive Data Protection 必须 如何对结构化文件、非结构化文件和 图片中的敏感数据进行去标识化处理 (TransformationConfig)。如果您未包含
TransformationConfig对象,Sensitive Data Protection 会将文本中的敏感数据替换为其 infoType。在图片中,它会使用黑框遮盖敏感数据。transformation_details_storage_config:指定 Sensitive Data Protection 必须存储有关其为此作业执行的每次转换的元数据。 此外,它还指定了 Sensitive Data Protection 必须在其中存储该元数据的表的位置和名称 (TransformationDetailsStorageConfig)。fileTypesToTransform:将去标识化操作限制为仅对 文件类型执行。如果您未设置此字段,则检查操作中包含的所有受支持 文件类型也会包含在 去标识化操作中。在此示例中,即使 您将DlpJob配置为检查所有受支持的文件类型,Sensitive Data Protection 也只会对图片、CSV 和文本文件进行去标识化处理。
通过 REST API 创建检查作业
如需创建检查作业 (DlpJob),请发送 projects.dlpJobs.create
请求。如需使用 c网址 发送请求,请将之前的 REST
示例另存为 JSON 文件,然后运行
以下命令:
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs \
-d @PATH_TO_JSON_FILE
替换以下内容:
PROJECT_ID:您在其中存储DlpJob的项目的 ID。PATH_TO_JSON_FILE:包含请求正文的 JSON 文件的路径。
Sensitive Data Protection 会返回新创建的 DlpJob 的标识符、其状态以及您设置的检查配置的快照。
{
"name": "projects/PROJECT_ID/dlpJobs/JOB_ID",
"type": "INSPECT_JOB",
"state": "PENDING",
...
}
检索检查作业的结果
如需检索 DlpJob 的结果,请发送 projects.dlpJobs.get
请求:
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs/JOB_ID
替换以下内容:
PROJECT_ID:您在其中存储DlpJob的项目的 ID。JOB_ID:创建DlpJob时返回的作业的 ID。
如果操作已完成,您会收到类似于以下内容的响应:
{
"name": "projects/PROJECT_ID/dlpJobs/JOB_ID",
"type": "INSPECT_JOB",
"state": "DONE",
"inspectDetails": {
"requestedOptions": {
"snapshotInspectTemplate": {},
"jobConfig": {
"storageConfig": {
"cloudStorageOptions": {
"fileSet": {
"url": "INPUT_DIRECTORY"
}
}
},
"inspectConfig": {
"infoTypes": [
{
"name": "PERSON_NAME"
}
],
"limits": {}
},
"actions": [
{
"deidentify": {
"transformationDetailsStorageConfig": {
"table": {
"projectId": "TRANSFORMATION_DETAILS_PROJECT_ID",
"datasetId": "TRANSFORMATION_DETAILS_DATASET_ID",
"tableId": "TRANSFORMATION_DETAILS_TABLE_ID"
}
},
"transformationConfig": {
"deidentifyTemplate": "DEIDENTIFY_TEMPLATE_NAME",
"structuredDeidentifyTemplate": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME",
"imageRedactTemplate": "IMAGE_REDACTION_TEMPLATE_NAME"
},
"fileTypesToTransform": [
"IMAGE",
"CSV",
"TEXT_FILE"
],
"cloudStorageOutput": "OUTPUT_DIRECTORY"
}
}
]
}
},
"result": {
"processedBytes": "25242",
"totalEstimatedBytes": "25242",
"infoTypeStats": [
{
"infoType": {
"name": "PERSON_NAME"
},
"count": "114"
}
]
}
},
"createTime": "2022-06-09T23:00:53.380Z",
"startTime": "2022-06-09T23:01:27.986383Z",
"endTime": "2022-06-09T23:02:00.443536Z",
"actionDetails": [
{
"deidentifyDetails": {
"requestedOptions": {
"snapshotDeidentifyTemplate": {
"name": "DEIDENTIFY_TEMPLATE_NAME",
"createTime": "2022-06-09T17:46:34.208923Z",
"updateTime": "2022-06-09T17:46:34.208923Z",
"deidentifyConfig": {
"infoTypeTransformations": {
"transformations": [
{
"primitiveTransformation": {
"characterMaskConfig": {
"maskingCharacter": "*",
"numberToMask": 25
}
}
}
]
}
},
"locationId": "global"
},
"snapshotStructuredDeidentifyTemplate": {
"name": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME",
"createTime": "2022-06-09T20:51:12.411456Z",
"updateTime": "2022-06-09T21:07:53.633149Z",
"deidentifyConfig": {
"recordTransformations": {
"fieldTransformations": [
{
"fields": [
{
"name": "Name"
}
],
"primitiveTransformation": {
"replaceConfig": {
"newValue": {
"stringValue": "[redacted]"
}
}
}
}
]
}
},
"locationId": "global"
},
"snapshotImageRedactTemplate": {
"name": "IMAGE_REDACTION_TEMPLATE_NAME",
"createTime": "2022-06-09T20:52:25.453564Z",
"updateTime": "2022-06-09T20:52:25.453564Z",
"deidentifyConfig": {},
"locationId": "global"
}
},
"deidentifyStats": {
"transformedBytes": "3972",
"transformationCount": "110"
}
}
}
],
"locationId": "global"
}
后续步骤
- 详细了解存储空间中数据的去标识化过程。
- 了解如何使用控制台对存储空间中的数据进行去标识化处理 Google Cloud 。
- 完成在 Cloud Storage中创建去标识化的数据副本 Codelab。
- 详细了解去标识化转换。
- 了解如何检查存储空间中是否存在敏感数据。