本页面介绍如何使用 Cloud Data Loss Prevention API 检查 Cloud Storage 资源并创建已去标识化的数据副本。
此操作有助于确保您在业务流程中使用的文件不包含敏感数据,例如个人身份信息 (PII)。敏感数据保护可以检查 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 Service Agent 角色 (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
对象,该对象仅支持结构化内容。如果不存在此模板,敏感数据保护功能会使用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
对象,敏感数据保护功能会将文本中的敏感数据替换为相应的 infoType。在图片中,它会使用黑框遮盖敏感数据。一个
TransformationDetailsStorageConfig
对象,用于指定 BigQuery 表,敏感数据保护必须将有关每项转换的详细信息存储在该表中。对于每项转换,详细信息包括说明、成功或错误代码、任何错误详细信息、转换的字节数、转换后内容的位置,以及 Sensitive Data Protection 执行转换的检查作业的名称。此表不存储实际的去标识化内容。
当数据写入 BigQuery 表时,结算和配额用量将记在包含目标表的项目名下。
复制的内容去标识化后,去标识化作业即会完成。该作业包含指定转换的应用次数摘要,您可以使用 DlpJob
上的 projects.dlpJobs.get
方法检索该摘要。返回的 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_PR
OJECT_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
对象,敏感数据保护功能会将文本中的敏感数据替换为相应的 infoType。在图片中,它会使用黑框遮盖敏感数据。transformation_details_storage_config
:指定 Sensitive Data Protection 必须存储有关其为此作业执行的每个转换的元数据。 此外,它还指定了 Sensitive Data Protection 必须将该元数据存储在哪个表(TransformationDetailsStorageConfig
)中,以及该表的位置和名称。fileTypesToTransform
:将去标识化操作限制为仅针对您列出的文件类型。如果您未设置此字段,则检查操作中包含的所有受支持的文件类型也会包含在去标识化操作中。在此示例中,即使您已将DlpJob
配置为检查所有受支持的文件类型,敏感数据保护功能也只会对图片、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/dl
pJobs \
-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/proje
cts/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。
- 详细了解去标识化转换。
- 了解如何检查存储空间是否存在敏感数据。