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

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

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

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

將權限授予服務帳戶

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

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

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

    前往「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 與管理) 頁面,然後選取您建立的專案:

    前往「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 函式,您必須啟用正確的 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. 在「選取 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]/

    私密/機密資料保護功能會檢查上傳至隔離值區的每個檔案並進行分類,然後根據分類將其移至適當的目標值區。

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

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

  5. 選取一個您先前建立的目標值區,查看已上傳的檔案,以及您建立的其他值區。