本页面介绍了如何检查 Cloud Storage 资源以及如何创建 去标识化使用 Cloud Data Loss Prevention API 复制数据。
此操作有助于确保您在业务流程中使用的文件不包含敏感数据,例如个人身份信息 (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
操作时,敏感数据保护功能会为扫描中包含的所有受支持的文件类型创建去标识化(转换)副本。但是,您可以将作业配置为仅转换
部分支持的文件类型。
可选:创建去标识化模板
如果您想控制发现结果的转换方式,请创建以下模板。这些模板提供了相关说明, 如何将发现结果转换为结构化文件、非结构化文件,以及 图片。
去标识化模板:默认
DeidentifyTemplate
, 用于非结构化文件,例如自由格式的文本文件。此类DeidentifyTemplate
不能包含RecordTransformations
对象,因为只有结构化内容支持该对象。如果这个模板不存在, 敏感数据保护使用ReplaceWithInfoTypeConfig
转换方法 非结构化文件。结构化去标识模板:适用于结构化文件(例如 CSV 文件)的
DeidentifyTemplate
。这部DeidentifyTemplate
可以包含RecordTransformations
。如果不存在此模板,Sensitive Data Protection 会使用您创建的默认去标识化模板。如果也不存在,敏感数据保护使用ReplaceWithInfoTypeConfig
方法转换结构化文件。图片隐去模板:用于图片的
DeidentifyTemplate
。这个 模板必须包含ImageTransformations
对象。 如果此模板不存在,敏感数据保护会隐去以下文件中的所有发现结果 带有黑框。
详细了解如何创建去标识化模板。
创建包含去标识化操作的检查作业
DlpJob
对象提供了有关要检查的内容、类型的说明
要标记为敏感数据的数据,以及如何处理发现结果。
如需对 Cloud Storage 目录中的敏感数据进行去标识化,
DlpJob
必须至少定义以下内容:
- 一个
StorageConfig
对象,用于指定要检查的 Cloud Storage 目录。 - 一个
InspectConfig
对象,其中包含要查找的数据类型以及有关如何查找敏感数据的其他检查说明。 一个
Deidentify
操作,其中包含以下内容:一个
TransformationConfig
对象,用于指定您为去标识结构化和非结构化文件中的数据而创建的模板。您 还可以包含用于遮盖图片中的敏感数据的配置。如果您没有添加
TransformationConfig
对象,Sensitive Data Protection 将取代 文本中的敏感数据及其 infoType。在图片中,它会用黑盒遮盖敏感数据。一个
TransformationDetailsStorageConfig
对象,用于指定敏感数据保护功能必须存储每个转换的详细信息的 BigQuery 表。对于每个转换,详细信息包括说明、成功或错误代码、所有错误详情、转换的字节数、转换内容的位置,以及敏感数据保护功能进行转换的检查作业的名称。此表不会存储实际的去标识化内容。
将数据写入 BigQuery 表时,结算和配额用量将应用于包含目标表的项目。
复制的内容去标识化后,去标识化作业便会完成。该作业包含一个摘要,说明指定
已应用转换,您可以使用
DlpJob
上的 projects.dlpJobs.get
方法。返回的 DlpJob
同时包含 DeidentifyDataSourceDetails
对象和 InspectDataSourceDetails
对象。这些对象同时包含 Deidentify
操作的结果和
检查作业。
如果添加了 TransformationDetailsStorageConfig
对象
在您的 DlpJob
(一个 BigQuery)中,
表,其中包含有关转换详细信息的元数据。对于每个
敏感数据保护功能会写入一行元数据
。如需详细了解表中的内容,请参阅转换详情参考文档。
代码示例
以下示例演示了如何使用 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 的客户端库,请参阅 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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
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 存储分区的 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
对象,Sensitive Data Protection 将取代 文本中的敏感数据及其 infoType。在图片中,它会用黑盒遮盖敏感数据。transformation_details_storage_config
:指定敏感数据保护功能必须存储有关其为此作业执行的每项转换的元数据。此外,它还指定了 Sensitive Data Protection 必须存储该元数据的表的位置和名称 (TransformationDetailsStorageConfig
)。fileTypesToTransform
:限制去标识化操作,仅限 所列出的文件类型如果您不设置此字段,系统会 检查操作中包含的文件类型也包含在 去标识化操作。在此示例中,敏感数据保护功能只会去标识图片、CSV 和文本文件,即使您将DlpJob
配置为检查所有受支持的文件类型也是如此。
通过 REST API 创建检查作业
如需创建检查作业 (DlpJob
),请发送 projects.dlpJobs.create
请求。如需使用 cURL 发送请求,请将上一个 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
:您存储的项目的 IDDlpJob
。JOB_ID
:在以下情况下返回的作业的 ID: 您创建了DlpJob
。
如果操作完成,您会收到类似于以下内容的响应:
{ "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。
- 详细了解去标识化转换。
- 了解如何检查存储空间是否存在敏感数据。