本页介绍了如何使用 Cloud Data Loss Prevention API 检查 Cloud Storage 资源并创建数据的去标识化副本。
此操作有助于确保您在业务流程中使用的文件不包含敏感数据,例如个人身份信息 (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
)。
如需向服务代理授予角色,请参阅授予单个角色。您还可以在以下级别控制访问权限:
API 概览
如需创建 Cloud Storage 中存储的内容的去标识化副本,您可以配置检查作业,以便根据您指定的条件查找敏感数据。然后,在检查作业中,您可以以 Deidentify
操作的形式提供去标识化说明。
如果您只想扫描存储桶中的部分文件,可以限制作业扫描的文件。支持对启用了去标识功能的作业执行的选项包括按类型过滤文件 (FileType
) 和正则表达式过滤 (FileSet
)。
默认情况下,当您启用 Deidentify
操作时,敏感数据保护功能会为扫描中包含的所有受支持的文件类型创建去标识化(转换)副本。不过,您可以将作业配置为仅转换部分受支持的文件类型。
可选:创建去标识化模板
如果您想控制发现结果的转换方式,请创建以下模板。这些模板提供了有关如何转换结构化文件、非结构化文件和图片中的发现结果的说明。
去标识化模板:用于非结构化文件(例如自由格式文本文件)的默认
DeidentifyTemplate
。此类DeidentifyTemplate
不能包含RecordTransformations
对象,因为只有结构化内容支持该对象。如果不存在此模板,敏感数据保护功能会使用ReplaceWithInfoTypeConfig
方法转换非结构化文件。结构化去标识模板:适用于结构化文件(例如 CSV 文件)的
DeidentifyTemplate
。此DeidentifyTemplate
可以包含RecordTransformations
。如果不存在此模板,Sensitive Data Protection 会使用您创建的默认去标识化模板。如果也不存在,Sensitive Data Protection 会使用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 表,其中包含有关转换详细信息的元数据。对于发生的每项转换,Sensitive Data Protection 都会将一行元数据写入表中。如需详细了解该表的内容,请参阅转换详情参考文档。
代码示例
以下示例演示了如何使用 DLP API 创建 Cloud Storage 文件的去标识化副本。
HTTP 方法和网址
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
C#
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 Sensitive Data Protection 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用敏感数据保护客户端库,请参阅 敏感数据保护客户端库。
如需向 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,系统会自动创建一个表 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
:将去标识化操作仅限于您列出的文件类型。如果您未设置此字段,则检查操作中包含的所有受支持的文件类型也会包含在去标识化操作中。在此示例中,敏感数据保护功能只会去标识图片、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 控制台对存储中的数据进行去标识化处理。
- 完成 Creating a De-identified Copy of Data in Cloud Storage Codelab。
- 详细了解去标识化转换。
- 了解如何检查存储空间是否存在敏感数据。