对上传到 Cloud Storage 的数据进行自动分类


本教程介绍如何使用 Cloud Storage 和其他 Google Cloud 产品实现自动数据隔离和分类系统。本教程假定您熟悉 Google Cloud 和基本的 shell 编程。

在每个组织中,像您这样的数据保护官面临着越来越多的数据,这些数据必须进行妥善保护和处理。对这些数据进行隔离和分类可能既复杂又耗时,尤其是在每天有数百或数千个文件的情况下。

如果可以获取每个文件,将其上传到隔离区,使其自动分类并根据分类结果将其移动到合适的位置该有多好。本教程介绍如何使用 Cloud FunctionsCloud StorageCloud 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

您可以使用价格计算器根据您的预计使用情况来估算费用。

准备工作

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.

    Enable the APIs

为服务账号授予权限

第一步是为以下的 Cloud Functions 服务账号和 Cloud DLP 服务账号授予权限:

为 App Engine 默认服务账号授予权限

  1. 在 Google Cloud 控制台中,打开“IAM 和管理”页面并选择您创建的项目:

    转到 IAM

  2. 找到 App Engine 服务账号。此账号的格式为 [PROJECT_ID]@appspot.gserviceaccount.com。将 [PROJECT_ID] 替换为您的项目 ID。

  3. 选择服务账号旁边的修改图标

  4. 添加以下角色:

    • Cloud DLP > DLP Administrator
    • DLP API Service Agent(您必须通过过滤来找到此角色)
  5. 点击保存

向敏感数据保护服务帐号授予权限

Cloud DLP Service Agent 是在第一次需要时创建的。

  1. 在 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

  2. 在 Google Cloud 控制台中,打开 IAM 和管理页面并选择您创建的项目:

    转到 IAM

  3. 选中“包括 Google 提供的角色授权”复选框。

  4. 找到 Cloud DLP 服务代理服务账号。此账号的格式为 service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com。将 [PROJECT_NUMBER] 替换为您的项目编号。

  5. 选择服务账号旁边的修改图标

  6. 添加角色(项目 > Viewer),然后点击保存

构建隔离和分类流水线

在本部分中,您将构建下图所示的隔离和分类流水线。

隔离和分类工作流

此流水线中的数字对应于以下步骤:

  1. 将文件上传到 Cloud Storage。
  2. 调用 Cloud Functions 函数。
  3. Cloud DLP 对数据进行检查和分类。
  4. 文件被移动到合适的存储桶。

创建 Cloud Storage 存储桶

按照存储桶命名指南,创建三个具有唯一名称的存储桶,您将在本教程中使用这些存储桶:

  • 存储桶 1:将 [YOUR_QUARANTINE_BUCKET] 替换为一个唯一名称。
  • 存储桶 2:将 [YOUR_SENSITIVE_DATA_BUCKET] 替换为一个唯一名称。
  • 存储桶 3:将 [YOUR_NON_SENSITIVE_DATA_BUCKET] 替换为一个唯一名称。

控制台

  1. 在 Google Cloud 控制台中打开 Cloud Storage 浏览器:

    转到 Cloud Storage

  2. 点击创建存储桶

  3. 存储桶名称文本框中,输入为 [YOUR_QUARANTINE_BUCKET] 选择的名称,然后点击创建

  4. [YOUR_SENSITIVE_DATA_BUCKET][YOUR_NON_SENSITIVE_DATA_BUCKET] 存储桶重复上述步骤。

gcloud

  1. 打开 Cloud Shell:

    转到 Cloud Shell

  2. 使用以下命令创建三个存储桶:

    gsutil mb gs://[YOUR_QUARANTINE_BUCKET]
    gsutil mb gs://[YOUR_SENSITIVE_DATA_BUCKET]
    gsutil mb gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
    

创建 Pub/Sub 主题和订阅

控制台

  1. 打开 Pub/Sub 主题页面:

    转到“Pub/Sub 主题”

  2. 点击创建主题

  3. 在文本框中输入主题名称。

  4. 选中添加默认订阅复选框。

  5. 点击创建主题

gcloud

  1. 打开 Cloud Shell:

    转到 Cloud Shell

  2. 创建一个主题,将 [PUB/SUB_TOPIC] 替换为您选择的名称:

    gcloud pubsub topics create [PUB/SUB_TOPIC]
  3. 创建一个订阅,将 [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

创建第一个函数

控制台

  1. 打开 Cloud Functions 概览页面:

    转到 Cloud Functions

  2. 选择已启用 Cloud Functions 的项目。

  3. 点击创建函数

  4. 函数名称框中,将默认名称替换为 create_DLP_job

  5. 触发器字段中,选择 Cloud Storage

  6. 事件类型字段中,选择完成创建/创建

  7. 存储桶字段中,点击浏览,通过突出显示下拉列表中的存储桶来选择隔离存储桶,然后点击选择

  8. 点击保存

  9. 点击下一步

  10. 运行时下,选择 Python 3.7

  11. 源代码下,选中内嵌编辑器

  12. 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 主题的名称。
  13. 入口点文本框中,将默认文本替换为 create_DLP_job

  14. requirements.txt 文本框中的文本替换为以下文件的内容:https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt.

  15. 点击部署

    函数旁边的绿色对勾标记表示部署成功。

    成功部署

gcloud

  1. 打开 Cloud Shell 会话并克隆包含代码和一些示例数据文件的 GitHub 代码库:

    在 Cloud Shell 中打开

  2. 将目录切换至已克隆代码库的文件夹:

    cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
  3. 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 主题的名称。
  4. 部署该函数,将 [YOUR_QUARANTINE_BUCKET] 替换为您的存储桶名称:

    gcloud functions deploy create_DLP_job --runtime python37 \
        --trigger-resource [YOUR_QUARANTINE_BUCKET] \
        --trigger-event google.storage.object.finalize
    
  5. 验证函数是否已成功部署:

    gcloud functions describe create_DLP_job

    成功部署会显示类似以下内容的就绪状态:

    status:  READY
    timeout:  60s
    

成功部署 Cloud Functions 函数后,请继续下一部分以创建第二个 Cloud Function 函数。

创建第二个函数

控制台

  1. 打开 Cloud Functions 概览页面:

    转到“Cloud Functions 概览”页面

  2. 选择已启用 Cloud Functions 的项目。

  3. 点击创建函数

  4. 函数名称框中,将默认名称替换为 resolve_DLP

  5. 触发器字段中,选择 Pub/Sub

  6. 选择 Cloud Pub/Sub 主题字段中,搜索您之前创建的 Pub/Sub 主题。

  7. 点击保存

  8. 点击下一步

  9. 运行时下,选择 Python 3.7

  10. 源代码下,选择內嵌编辑器

  11. 入口点文本框中,将默认文本替换为 resolve_DLP

  12. 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 主题的名称。
  13. 点击部署

    函数旁边的绿色对勾标记表示部署成功。

    成功部署

gcloud

  1. 打开(或重新打开)Cloud Shell 会话并克隆包含代码和一些示例数据文件的 GitHub 代码库:

    在 Cloud Shell 中打开

  2. 将目录切换至包含以下 Python 代码的文件夹:

    cd gcs-dlp-classification-python/

  3. 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 主题的名称。
  4. 部署该函数,将 [PUB/SUB_TOPIC] 替换为您的 Pub/Sub 主题:

    gcloud functions deploy resolve_DLP --runtime python37 --trigger-topic [PUB/SUB_TOPIC]
  5. 验证函数是否已成功部署:

    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'

  1. 如果您尚未克隆代码库,请打开 Cloud Shell 并克隆包含代码和一些示例数据文件的 GitHub 代码库:

    在 Cloud Shell 中打开

  2. 将文件夹切换至示例数据文件的文件夹:

    cd ~/dlp-cloud-functions-tutorials/sample_data/
  3. 使用 gsutil 命令将示例数据文件复制到隔离区,将 [YOUR_QUARANTINE_BUCKET] 替换为隔离区的名称:

    gsutil -m  cp * gs://[YOUR_QUARANTINE_BUCKET]/

    Cloud DLP 对上传到隔离区的每个文件进行检查和分类,并根据其分类将其移动到合适的目标存储桶。

  4. 在 Cloud Storage 控制台中,打开 Storage 浏览器页面:

    前往 Cloud Storage 浏览器

  5. 选择您之前创建的一个目标存储桶,然后查看上传的文件。然后查看您创建的其他存储桶。

清理

完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。

删除项目

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

后续步骤