為上傳至 Cloud Storage 的資料自動分類


本教學課程說明如何使用 Cloud Storage 和其他 Google Cloud產品實作自動化資料隔離及分類系統。此外,本教學課程假設您已熟悉Google Cloud 和基本的殼層程式設計。

在每個機構中,像您一樣的資料保護長都面臨著資料量不斷增加的問題,這些資料必須適當保護及處理。隔離和分類這些資料非常複雜且耗時,尤其是每天有數百甚至數千個檔案時更是如此。

如果您可以將每個檔案上傳至一個隔離位置,讓檔案自動分類並根據分類結果移至適當的位置會如何?本教學課程說明如何使用 Cloud Run 函式Cloud Storage敏感資料保護來實作這類系統。

目標

  • 建立 Cloud Storage 值區,做為隔離和分類管道的一部分。
  • 建立 Pub/Sub 主題和訂閱項目,以在檔案處理完成時收到通知。
  • 建立一個簡單的 Cloud Functions 函式,在上傳檔案時叫用 DLP API。
  • 將一些範例檔案上傳至隔離值區,以叫用 Cloud Functions 函式。這個函式將使用 DLP API 來檢查和分類檔案,並將檔案移至適當的值區。

費用

本教學課程使用 Google Cloud 計費元件,包括:

  • Cloud Storage
  • Cloud Run 函式
  • Sensitive Data Protection

您可以使用 Pricing Calculator,根據預測使用量來產生預估費用。

事前準備

  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 Run 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 Run functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.

    Enable the APIs

將權限授予服務帳戶

您的首要步驟是將權限授予兩個服務帳戶:Cloud Run 函式服務帳戶和 Cloud Data Loss Prevention 服務代理程式。

將權限授予 App Engine 預設服務帳戶

  1. 在 Google Cloud 控制台中開啟「IAM & Admin」(IAM 與管理) 頁面,然後選取您建立的專案:

    前往身分與存取權管理頁面

  2. 找到 App Engine 服務帳戶。此帳戶的格式為 [PROJECT_ID]@appspot.gserviceaccount.com。將 [PROJECT_ID] 替換為專案 ID。

  3. 選取服務帳戶旁邊的編輯圖示

  4. 新增下列角色:

    • DLP 管理員
    • DLP API 服務代理人
  5. 按一下 [儲存]

將權限授予 Cloud Data Loss Prevention 服務代理

首次需要時,系統會建立 Cloud Data Loss Prevention 服務代理人。

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

  2. 在 Google Cloud 控制台中開啟「IAM & Admin」(IAM 與管理) 頁面,然後選取您建立的專案:

    前往身分與存取權管理頁面

  3. 選取「包含 Google 提供的角色授權」核取方塊

  4. 找到 Cloud Data Loss Prevention 服務代理程式。此帳戶的格式為 service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com。將 [PROJECT_NUMBER] 改成您的專案編號。

  5. 選取服務帳戶旁邊的編輯圖示

  6. 新增角色「Project」(專案) >「Viewer」(檢視者),然後按一下 [Save] (儲存)

建構隔離和分類管道

在本節中,您將建構隔離和分類管道,如下圖所示。

隔離和分類工作流程

此管道中的數字對應到下列步驟:

  1. 將檔案上傳至 Cloud Storage。
  2. 叫用 Cloud Functions。
  3. Sensitive Data Protection 會檢查資料並進行分類。
  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. 在「Bucket name」(值區名稱) 文字方塊中,輸入您為 [YOUR_QUARANTINE_BUCKET] 選取的名稱,然後點選「Create」(建立)

  4. 針對 [YOUR_SENSITIVE_DATA_BUCKET][YOUR_NON_SENSITIVE_DATA_BUCKET] 值區重複上述操作。

gcloud

  1. 開啟 Cloud Shell:

    前往 Cloud Shell

  2. 使用以下指令建立三個值區:

    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 主題和訂閱項目

主控台

  1. 開啟「Pub/Sub Topics」(Pub/Sub 主題) 頁面:

    前往 Pub/Sub 主題

  2. 按一下「建立主題」

  3. 在文字方塊中輸入主題名稱。

  4. 選取「新增預設訂閱」核取方塊。

  5. 按一下 [Create Topic] (建立主題)

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 Run 函式

本節逐步說明如何部署包含以下兩個 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

建立第一個函式

主控台

  1. 開啟「Cloud Run functions Overview」(Cloud Run 函式總覽) 頁面:

    前往 Cloud Run functions

  2. 選取您已啟用 Cloud Run 函式的專案。

  3. 按一下「建立函式」

  4. 在「Function name」(函式名稱) 方塊中,將預設名稱改成 create_DLP_job

  5. 在「Trigger」(觸發條件) 欄位中,選取 [Cloud Storage]

  6. 在「Event type」(事件類型) 欄位中,選取「Finalize/Create」(完成/建立)

  7. 在「Bucket」(值區) 欄位中按一下 [browse] (瀏覽),在下拉式清單中反白值區,然後按一下 [Select] (選取),來選取隔離值區。

  8. 點選「儲存」

  9. 點選 [下一步]。

  10. 選取「Runtime」(執行階段) 底下的 [Python 3.7]

  11. 在「Source code」(原始碼) 下,勾選 [Inline editor] (內嵌編輯器)

  12. 將「main.py」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]:要將機密檔案移至的 bucket 名稱。
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]:您要上傳待處理檔案的 bucket 名稱。
    • [PUB/SUB_TOPIC]:您先前建立的 Pub/Sub 主題名稱。
  13. 在「Entry point」(進入點) 文字方塊中,將預設文字替換為以下內容: create_DLP_job

  14. 將「requirements.txt」requirements.txt文字方塊中的文字,替換成下列檔案的內容:https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt.

  15. 按一下 [Deploy] (部署)

    若函式旁出現綠色勾號即表示部署成功。

    成功部署

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 Run 函式和 Pub/Sub 主題的專案 ID。
    • [YOUR_QUARANTINE_BUCKET]:您要上傳待處理檔案的 bucket 名稱。
    • [YOUR_SENSITIVE_DATA_BUCKET]:要將機密檔案移至的 bucket 名稱。
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]:您要上傳待處理檔案的 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 Functions。

建立第二個函式

主控台

  1. 開啟「Cloud Run functions Overview」(Cloud Run 函式總覽) 頁面:

    前往 Cloud Run 函式「Overview」(總覽) 頁面

  2. 選取您已啟用 Cloud Run 函式的專案。

  3. 按一下「建立函式」

  4. 在「Function Name」(函式名稱) 方塊中,將預設名稱改成 resolve_DLP

  5. 在「觸發條件」欄位中,選取「Pub/Sub」

  6. 在「Select a Cloud Pub/Sub Topic」(選取 Cloud Pub/Sub 主題) 欄位中,搜尋您先前建立的 Pub/Sub 主題。

  7. 按一下「儲存」

  8. 按一下「下一步」

  9. 選取「Runtime」(執行階段) 底下的 [Python 3.7]

  10. 在「Source code」(原始碼) 下,選取「Inline editor」(內嵌編輯器)

  11. 在「進入點」文字方塊中,將預設文字改為 resolve_DLP

  12. 將「main.py」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]:您要上傳待處理檔案的 bucket 名稱。
    • [YOUR_SENSITIVE_DATA_BUCKET]:要將機密檔案移至的 bucket 名稱。
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]:您要上傳待處理檔案的 bucket 名稱。
    • [PUB/SUB_TOPIC:您先前建立的 Pub/Sub 主題名稱。
  13. 按一下 [Deploy] (部署)

    若函式旁出現綠色勾號即表示部署成功。

    成功部署

gcloud

  1. 開啟 (或重新開啟) Cloud Shell 工作階段,然後複製包含程式碼和一些範例資料檔案的 GitHub 存放區:

    在 Cloud Shell 中開啟

  2. 將目錄變更為包含 Python 程式碼的資料夾:

    cd gcs-dlp-classification-python/

  3. main.py 檔案中進行下列替換:

    • [PROJECT_ID_DLP_JOB & TOPIC]:代管 Cloud Run 函式和 Pub/Sub 主題的專案 ID。
    • [YOUR_QUARANTINE_BUCKET]:您要上傳待處理檔案的 bucket 名稱。
    • [YOUR_SENSITIVE_DATA_BUCKET]:要將機密檔案移至的 bucket 名稱。
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]:您要上傳待處理檔案的 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. 使用 cp 指令,將範例資料檔案複製到隔離值區,將 [YOUR_QUARANTINE_BUCKET] 改成您的隔離值區名稱:

    gcloud storage cp * gs://[YOUR_QUARANTINE_BUCKET]/

    Sensitive Data Protection 會檢查上傳至隔離值區的每個檔案並進行分類,然後根據分類將其移至適當的目標值區。

  4. 在 Cloud Storage 主控台中,開啟 Storage「Browser」(瀏覽器) 頁面:

    前往 Cloud Storage「BROWSER」(瀏覽器)

  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.

後續步驟