本教程介绍如何使用 Cloud Storage 和其他 Google Cloud产品实现自动数据隔离和分类系统。本教程假定您熟悉Google Cloud 和基本的 shell 编程。
在每个组织中,像您这样的数据保护官面临着越来越多的数据,这些数据必须进行妥善保护和处理。对这些数据进行隔离和分类可能既复杂又耗时,尤其是在每天有数百或数千个文件的情况下。
如果可以获取每个文件,将其上传到隔离区,使其自动分类并根据分类结果将其移动到合适的位置该有多好。本教程介绍如何使用 Cloud Run functions、Cloud Storage 和 Sensitive Data Protection 实现此类系统。
为服务账号授予权限
第一步是为以下两个服务账号授予权限:Cloud Run 函数服务账号和 Cloud Data Loss Prevention Service Agent。
为 App Engine 默认服务账号授予权限
- 在 Google Cloud 控制台中,打开“IAM 和管理”页面并选择您创建的项目: 
- 找到 App Engine 服务账号。此账号的格式为 - [PROJECT_ID]@appspot.gserviceaccount.com。将- [PROJECT_ID]替换为您的项目 ID。
- 选择服务账号旁边的修改图标 edit。 
- 添加以下角色: - DLP Administrator
- DLP API Service Agent
 
- 点击保存。 
向 Cloud Data Loss Prevention Service Agent 授予权限
Cloud Data Loss Prevention 服务代理是在第一次需要时创建的。
- 在 Cloud Shell 中,通过调用 - InspectContent创建 Cloud Data Loss Prevention 服务代理:- curl --request POST 
 "https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/us-central1/content:inspect"
 --header "X-Goog-User-Project: PROJECT_ID"
 --header "Authorization: Bearer $(gcloud auth print-access-token)"
 --header 'Accept: application/json'
 --header 'Content-Type: application/json'
 --data '{"item":{"value":"google@google.com"}}'
 --compressed- 将 - PROJECT_ID替换为您的项目 ID。
- 在 Google Cloud 控制台中,打开 IAM 和管理页面并选择您创建的项目: 
- 选中“包括 Google 提供的角色授权”复选框。 
- 找到 Cloud Data Loss Prevention 服务代理。此账号的格式为 - service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com。将- [PROJECT_NUMBER]替换为您的项目编号。
- 选择服务账号旁边的修改图标 edit。 
- 添加角色(项目 > Viewer),然后点击保存。 
构建隔离和分类流水线
在本部分中,您将构建下图所示的隔离和分类流水线。
此流水线中的数字对应于以下步骤:
- 将文件上传到 Cloud Storage。
- 调用 Cloud Functions 函数。
- Sensitive Data Protection 会检查数据并对其进行分类。
- 文件被移动到合适的存储分区。
创建 Cloud Storage 存储桶
按照存储桶命名指南,创建三个具有唯一名称的存储桶,您将在本教程中使用这些存储桶:
- 存储分区 1:将 [YOUR_QUARANTINE_BUCKET]替换为一个唯一名称。
- 存储桶 2:将 [YOUR_SENSITIVE_DATA_BUCKET]替换为一个唯一名称。
- 存储桶 3:将 [YOUR_NON_SENSITIVE_DATA_BUCKET]替换为一个唯一名称。
控制台
- 在 Google Cloud 控制台中,打开 Cloud Storage 浏览器: 
- 点击创建存储分区。 
- 在存储桶名称文本框中,输入为 - [YOUR_QUARANTINE_BUCKET]选择的名称,然后点击创建。
- 对 - [YOUR_SENSITIVE_DATA_BUCKET]和- [YOUR_NON_SENSITIVE_DATA_BUCKET]存储分区重复上述步骤。
gcloud
- 打开 Cloud Shell: 
- 使用以下命令创建三个存储分区: - gcloud storage buckets create gs://[YOUR_QUARANTINE_BUCKET] gcloud storage buckets create gs://[YOUR_SENSITIVE_DATA_BUCKET] gcloud storage buckets create gs://[YOUR_NON_SENSITIVE_DATA_BUCKET] 
创建 Pub/Sub 主题和订阅
控制台
- 打开 Pub/Sub 主题页面: 
- 点击创建主题。 
- 在文本框中输入主题名称。 
- 选中添加默认订阅复选框。 
- 点击创建主题。 
gcloud
- 打开 Cloud Shell: 
- 创建一个主题,将 - [PUB/SUB_TOPIC]替换为您选择的名称:- gcloud pubsub topics create [PUB/SUB_TOPIC] 
- 创建一个订阅,将 - [PUB/SUB_SUBSCRIPTION]替换为您选择的名称:- gcloud pubsub subscriptions create [PUB/SUB_SUBSCRIPTION] --topic [PUB/SUB_TOPIC] 
创建 Cloud Run functions 函数
本部分内容介绍部署包含以下两个 Cloud Run 函数的 Python 脚本:
- 将一个对象上传到 Cloud Storage 时调用的函数。
- Pub/Sub 队列中收到消息时调用的函数。
您用于完成本教程的 Python 脚本包含在 GitHub 代码库中。要创建第一个 Cloud Function,您必须启用正确的 API。
要启用 API,请执行以下操作:
- 如果您使用控制台,点击创建函数后您将看到有关如何启用使用 Cloud Functions 所需的 API 的指南。
- 如果您使用 gcloud CLI,则必须手动启用以下 API:- Artifact Registry API
- Eventarc API
- Cloud Run Admin API
 
创建第一个函数
控制台
- 打开 Cloud Run functions 概览页面: 
- 选择已启用 Cloud Run functions 的项目。 
- 点击创建函数。 
- 在函数名称框中,将默认名称替换为 - create_DLP_job。
- 在触发器字段中,选择 Cloud Storage。 
- 在事件类型字段中,选择完成创建/创建。 
- 在存储桶字段中,点击浏览,通过突出显示下拉列表中的存储桶来选择隔离存储桶,然后点击选择。 
- 点击保存。 
- 点击下一步 
- 在运行时下,选择 Python 3.7。 
- 在源代码下,选中内嵌编辑器。 
- 将 main.py 框中的文本替换为以下文件 - https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py的内容。- 替换以下内容: - [PROJECT_ID_DLP_JOB & TOPIC]:托管您的 Cloud Run 函数和 Pub/Sub 主题的项目 ID。
- [YOUR_QUARANTINE_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [YOUR_SENSITIVE_DATA_BUCKET]:要将敏感文件移动到的存储桶的名称。
- [YOUR_NON_SENSITIVE_DATA_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [PUB/SUB_TOPIC]:您之前创建的 Pub/Sub 主题的名称。
 
- 在入口点文本框中,将默认文本替换为 - create_DLP_job。
- 将 requirements.txt 文本框中的文本替换为以下文件的内容: - https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt.
- 点击部署。 - 函数旁边的绿色对勾标记表示部署成功。   
gcloud
- 打开 Cloud Shell 会话并克隆包含代码和一些示例数据文件的 GitHub 代码库: 
- 将目录切换至已克隆代码库的文件夹: - cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/ 
- 在 main.py 文件中进行以下替换: - [PROJECT_ID_DLP_JOB & TOPIC]:托管您的 Cloud Run 函数和 Pub/Sub 主题的项目 ID。
- [YOUR_QUARANTINE_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [YOUR_SENSITIVE_DATA_BUCKET]:要将敏感文件移动到的存储桶的名称。
- [YOUR_NON_SENSITIVE_DATA_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [PUB/SUB_TOPIC:您之前创建的 Pub/Sub 主题的名称。
 
- 部署该函数,将 - [YOUR_QUARANTINE_BUCKET]替换为您的存储桶名称:- gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-resource [YOUR_QUARANTINE_BUCKET] \ --trigger-event google.storage.object.finalize
- 验证函数是否已成功部署: - gcloud functions describe create_DLP_job - 成功部署会显示类似以下内容的就绪状态: - status: READY timeout: 60s 
成功部署 Cloud Functions 函数后,请继续下一部分以创建第二个 Cloud Function 函数。
创建第二个函数
控制台
- 打开 Cloud Run functions 概览页面: 
- 选择已启用 Cloud Run functions 的项目。 
- 点击创建函数。 
- 在函数名称框中,将默认名称替换为 - resolve_DLP。
- 在触发器字段中,选择 Pub/Sub。 
- 在选择 Cloud Pub/Sub 主题字段中,搜索您之前创建的 Pub/Sub 主题。 
- 点击保存。 
- 点击下一步。 
- 在运行时下,选择 Python 3.7。 
- 在源代码下,选择內嵌编辑器。 
- 在入口点文本框中,将默认文本替换为 - resolve_DLP。
- 将 main.py 框中的文本替换为以下文件的内容:https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py。进行以下替换: - [PROJECT_ID_DLP_JOB & TOPIC]:托管您的 Cloud Run 函数和 Pub/Sub 主题的项目 ID。
- [YOUR_QUARANTINE_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [YOUR_SENSITIVE_DATA_BUCKET]:要将敏感文件移动到的存储桶的名称。
- [YOUR_NON_SENSITIVE_DATA_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [PUB/SUB_TOPIC:您之前创建的 Pub/Sub 主题的名称。
 
- 点击部署。 - 函数旁边的绿色对勾标记表示部署成功。   
gcloud
- 打开(或重新打开)Cloud Shell 会话并克隆包含代码和一些示例数据文件的 GitHub 代码库: 
- 将目录切换至包含以下 Python 代码的文件夹: - cd gcs-dlp-classification-python/ 
- 在 - main.py文件中进行以下替换:- [PROJECT_ID_DLP_JOB & TOPIC]:托管您的 Cloud Run 函数和 Pub/Sub 主题的项目 ID。
- [YOUR_QUARANTINE_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [YOUR_SENSITIVE_DATA_BUCKET]:要将敏感文件移动到的存储桶的名称。
- [YOUR_NON_SENSITIVE_DATA_BUCKET]:要将待处理文件上传到的存储桶的名称。
- [PUB/SUB_TOPIC:您之前创建的 Pub/Sub 主题的名称。
 
- 部署该函数,将 - [PUB/SUB_TOPIC]替换为您的 Pub/Sub 主题:- gcloud functions deploy resolve_DLP --runtime python37 --trigger-topic [PUB/SUB_TOPIC] 
- 验证函数是否已成功部署: - gcloud functions describe resolve_DLP - 成功部署会显示类似以下内容的就绪状态: - status: READY timeout: 60s 
成功部署 Cloud Functions 函数后,请继续下一部分。
将示例文件上传到隔离区
与本文相关的 GitHub 代码库包含示例数据文件。该文件夹包含一些具有敏感数据的文件和其他具有非敏感数据的文件。敏感数据被归类为包含一个或多个以下 INFO_TYPES 值:
US_SOCIAL_SECURITY_NUMBER EMAIL_ADDRESS PERSON_NAME LOCATION PHONE_NUMBER
用于对示例文件进行分类的数据类型在 main.py 文件中的 INFO_TYPES 常量中定义,该常量最初设置为 'FIRST_NAME,PHONE_NUMBER,EMAIL_ADDRESS,US_SOCIAL_SECURITY_NUMBER'。
- 如果您尚未克隆代码库,请打开 Cloud Shell 并克隆包含代码和一些示例数据文件的 GitHub 代码库: 
- 将文件夹切换至示例数据文件的文件夹: - cd ~/dlp-cloud-functions-tutorials/sample_data/ 
- 使用 - cp命令将示例数据文件复制到隔离区,将- [YOUR_QUARANTINE_BUCKET]替换为隔离区的名称:- gcloud storage cp * gs://[YOUR_QUARANTINE_BUCKET]/ - 敏感数据保护功能会对上传到隔离区的每个文件进行检查和分类,并根据其分类将其移动到合适的目标存储桶。 
- 在 Cloud Storage 控制台中,打开 Storage 浏览器页面: 
- 选择您之前创建的一个目标存储分区,然后查看上传的文件。然后查看您创建的其他存储桶。