本教程介绍如何使用 Cloud Storage 和其他 Google Cloud 产品实现自动数据隔离和分类系统。本教程假定您熟悉 Google Cloud 和基本的 shell 编程。
在每个组织中,像您这样的数据保护官面临着越来越多的数据,这些数据必须进行妥善保护和处理。对这些数据进行隔离和分类可能既复杂又耗时,尤其是在每天有数百或数千个文件的情况下。
如果可以获取每个文件,将其上传到隔离区,使其自动分类并根据分类结果将其移动到合适的位置该有多好。本教程介绍如何使用 Cloud Functions、Cloud Storage、Cloud Data Loss Prevention 实现此类系统。
目标
- 创建 Cloud Storage 存储桶,以用作隔离和分类流水线的一部分。
- 创建 Pub/Sub 主题和订阅,以在文件处理完成时向您发出通知。
- 创建一个在上传文件后调用 DLP API 的简单 Cloud Functions 函数。
- 将一些示例文件上传到隔离区以调用 Cloud Functions 函数。该函数使用 DLP API 对文件进行检查和分类,并将其移动到合适的存储桶。
费用
本教程使用 Google Cloud 的可计费组件,包括:
- Cloud Storage
- Cloud Functions
- Cloud Data Loss Prevention
您可以使用价格计算器根据您的预计使用情况来估算费用。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.
为服务账号授予权限
第一步是为以下的 Cloud Functions 服务账号和 Cloud DLP 服务账号授予权限:
为 App Engine 默认服务账号授予权限
在 Google Cloud 控制台中,打开“IAM 和管理”页面并选择您创建的项目:
找到 App Engine 服务账号。此账号的格式为
[PROJECT_ID]@appspot.gserviceaccount.com
。将[PROJECT_ID]
替换为您的项目 ID。选择服务账号旁边的修改图标 edit。
添加以下角色:
- Cloud DLP > DLP Administrator
- DLP API Service Agent(您必须通过过滤来找到此角色)
点击保存。
向敏感数据保护服务帐号授予权限
Cloud DLP Service Agent 是在第一次需要时创建的。
在 Cloud Shell 中,通过调用
InspectContent
创建 Cloud DLP Service Agent: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 DLP 服务代理服务账号。此账号的格式为
service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com
。将[PROJECT_NUMBER]
替换为您的项目编号。选择服务账号旁边的修改图标 edit。
添加角色(项目 > Viewer),然后点击保存。
构建隔离和分类流水线
在本部分中,您将构建下图所示的隔离和分类流水线。
此流水线中的数字对应于以下步骤:
- 将文件上传到 Cloud Storage。
- 调用 Cloud Functions 函数。
- Cloud DLP 对数据进行检查和分类。
- 文件被移动到合适的存储桶。
创建 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:
使用以下命令创建三个存储桶:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] gsutil mb gs://[YOUR_SENSITIVE_DATA_BUCKET] gsutil mb 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 Functions 函数
本部分内容介绍部署包含以下两个 Cloud Functions 函数的 Python 脚本:
- 将一个对象上传到 Cloud Storage 时调用的函数。
- Pub/Sub 队列中收到消息时调用的函数。
您用于完成本教程的 Python 脚本包含在 GitHub 代码库中。要创建第一个 Cloud Functions 函数,您必须启用正确的 API。
要启用 API,请执行以下操作:
- 如果您使用控制台,点击创建函数后您将看到有关如何启用使用 Cloud Functions 所需的 API 的指南。
- 如果您使用 gcloud CLI,则必须手动启用以下 API:
- Artifact Registry API
- Eventarc API
- Cloud Run Admin API
创建第一个函数
控制台
打开 Cloud Functions 概览页面:
选择已启用 Cloud 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 Functions 函数和 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 Functions 函数和 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 Functions 概览页面:
选择已启用 Cloud 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 Functions 函数和 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 Functions 函数和 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/
使用
gsutil
命令将示例数据文件复制到隔离区,将[YOUR_QUARANTINE_BUCKET]
替换为隔离区的名称:gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]/
Cloud DLP 对上传到隔离区的每个文件进行检查和分类,并根据其分类将其移动到合适的目标存储桶。
在 Cloud Storage 控制台中,打开 Storage 浏览器页面:
选择您之前创建的一个目标存储桶,然后查看上传的文件。然后查看您创建的其他存储桶。
清理
完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。
删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 尝试为
INFO_TYPES
设置不同的有效数据类型值。 - 详细了解如何使用 Cloud DLP 检查存储空间和数据库中的敏感数据。
- 详细了解 Cloud Functions。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。查看我们的 Cloud Architecture Center。