本页面介绍如何检查 Cloud Storage 资源并使用 Cloud Data Loss Prevention API 创建去标识化的数据副本。
此操作有助于确保您在业务流程中使用的文件不包含个人身份信息 (PII) 等敏感数据。敏感数据保护可以检查 Cloud Storage 存储桶中的文件是否存在敏感数据,并在单独的存储桶中创建这些文件的去标识化副本。然后,您可以在业务流程中使用去标识化副本。
如需详细了解此功能,请参阅 对 Cloud Storage 中的敏感数据进行去标识化。
准备工作
本页面假定您满足以下条件:
您已启用结算功能。
您已启用敏感数据保护。
您有一个 Cloud Storage 存储桶,其中包含要去标识化的数据。
了解如何向 DLP API 发送 HTTP 请求。如需了解详情,请参阅使用 DLP API 检查敏感文本。
了解此操作的限制和注意事项。
存储空间检查需要以下 OAuth 范围:https://www.googleapis.com/auth/cloud-platform
。如需了解详情,请参阅向 DLP API 进行身份验证。
所需 IAM 角色
如果此操作的所有资源都位于同一项目中,则服务代理的 DLP API Service Agent 角色 (roles/dlp.serviceAgent
) 就足够了。利用该角色,您可以执行以下操作:
- 创建检查作业
- 读取输入目录中的文件
- 将去标识化文件写入输出目录中
- 在 BigQuery 表中写入转换详情
相关资源包括检查作业、去标识化模板、输入存储桶、输出存储桶和转换详情表。
如果这些资源必须位于不同的项目中,请确保您项目的服务代理还具有以下角色:
- 输入存储桶或包含该角色的项目的 Storage Object Viewer 角色 (
roles/storage.objectViewer
)。 - 输出存储桶或包含该存储桶的项目的 Storage Object Creator 角色 (
roles/storage.objectCreator
)。 - 转换详情表或包含该表的项目的 BigQuery Data Editor 角色 (
roles/bigquery.dataEditor
)。
如需向服务代理(即由 Google 代管式服务帐号)授予角色,请参阅授予单个角色。您还可以在以下级别控制访问权限:
API 概览
如需创建存储在 Cloud Storage 中的内容的去标识化副本,请配置检查作业,以根据您指定的条件查找敏感数据。然后,在检查作业中,以 Deidentify
操作的形式提供去标识化指令。
如果您只想扫描存储桶中的一部分文件,则可以限制作业扫描的文件。对于具有去标识化的作业,支持的选项包括按类型 (FileType
) 和正则表达式 (FileSet
) 过滤文件。
启用 Deidentify
操作后,默认情况下,敏感数据保护会创建扫描中包含的所有受支持文件类型的去标识化(已转换)副本。但是,您可以将作业配置为仅转换一部分受支持的文件类型。
可选:创建去标识化模板
如果要控制发现结果的转换方式,请创建以下模板。这些模板提供了有关如何转换结构化文件、非结构化文件和图片中的发现结果的说明。
去标识化模板:用于非结构化文件(例如自由格式文本文件)的默认
DeidentifyTemplate
。此类DeidentifyTemplate
不能包含RecordTransformations
对象,只有结构化内容支持该对象。如果此模板不存在,敏感数据保护会使用ReplaceWithInfoTypeConfig
方法转换非结构化文件。结构化去标识化模板:用于结构化文件(如 CSV 文件)的
DeidentifyTemplate
。此DeidentifyTemplate
可以包含RecordTransformations
。如果此模板不存在,敏感数据保护会使用您创建的默认去标识化模板。如果这也不存在,敏感数据保护会使用ReplaceWithInfoTypeConfig
方法转换结构化文件。图片隐去模板:用于图片的
DeidentifyTemplate
。此模板必须包含ImageTransformations
对象。如果此模板不存在,敏感数据保护会使用黑框遮盖图片中的所有发现结果。
详细了解如何创建去标识化模板。
创建具有去标识化操作的检查作业
DlpJob
对象提供了有关检查内容、要将哪些类型的数据标记为敏感数据,以及如何处理发现结果的说明。如需对 Cloud Storage 目录中的敏感数据进行去标识化,您的 DlpJob
必须至少定义以下内容:
StorageConfig
对象,用于指定要检查的 Cloud Storage 目录。InspectConfig
对象,包含要查找的数据类型,以及有关如何查找敏感数据的其他检查说明。Deidentify
操作,其中包含以下内容:TransformationConfig
对象,用于指定您创建的用于对结构化和非结构化文件中的数据进行去标识化处理的任何模板。您还可以添加用于隐去图片中的敏感数据的配置。如果您未添加
TransformationConfig
对象,敏感数据保护会将文本中的敏感数据替换为其 infoType。对于图片,它会用黑框遮盖敏感数据。TransformationDetailsStorageConfig
对象,用于指定一个 BigQuery 表,敏感数据保护必须在该表中存储有关每个转换的详细信息。对于每个转换,详细信息包括以下内容:说明、成功或错误代码、任何错误详情、转换的字节数、转换后的内容的位置以及敏感数据保护执行转换的检查作业的名称。此表不会存储实际的去标识化内容。
将数据写入 BigQuery 表时,结算和配额用量将应用于目标表所属的项目。
对复制的内容进行去标识化后,去标识化作业完成。该作业包含指定转换应用次数的摘要,您可以通过对 DlpJob
使用 projects.dlpJobs.get
方法检索该摘要。返回的 DlpJob
包含 DeidentifyDataSourceDetails
对象和 InspectDataSourceDetails
对象。这些对象分别包含 Deidentify
操作和检查作业的结果。
如果您在 DlpJob
中添加了 TransformationDetailsStorageConfig
对象,则系统会创建一个包含转换详情的元数据的 BigQuery 表。对于发生的每次转换,敏感数据保护都会将一行元数据写入表中。如需详细了解该表的内容,请参阅转换详情参考文档。
代码示例
以下示例演示了如何使用 DLP API 创建 Cloud Storage 文件的去标识化副本。
HTTP 方法和网址
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
C#
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
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
:指定此操作,指示敏感数据保护根据其中指定的配置 (Deidentify
) 对匹配的敏感数据进行去标识化处理。cloud_storage_output
:指定要检查的 Cloud Storage 目录的网址。transformation_config
:指定敏感数据保护必须如何对结构化文件、非结构化文件和图片中的敏感数据进行去标识化 (TransformationConfig
)。如果您未添加
TransformationConfig
对象,敏感数据保护会将文本中的敏感数据替换为其 infoType。对于图片,它会用黑框遮盖敏感数据。transformation_details_storage_config
:指定敏感数据保护必须存储有关为此作业执行的每个转换的元数据。此外,它还指定了敏感数据保护必须在该表中存储该元数据 (TransformationDetailsStorageConfig
) 的表的位置和名称。fileTypesToTransform
:将去标识化操作限制为仅针对您列出的文件类型。如果未设置此字段,则检查操作中包含的所有受支持文件类型也会包含在去标识化操作中。在此示例中,敏感数据保护只会对图片、CSV 和文本文件进行去标识化,即使您将DlpJob
配置为检查所有受支持的文件类型也是如此。
通过 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 文件的路径。
敏感数据保护会返回新创建的 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。
- 详细了解去标识化转换。
- 了解如何检查存储空间中是否存在敏感数据。