本教學課程說明如何使用 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,根據預測使用量來產生預估費用。
事前準備
- 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 Run 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 Run functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.
將權限授予服務帳戶
您的首要步驟是將權限授予兩個服務帳戶:Cloud Run 函式服務帳戶和 Cloud Data Loss Prevention 服務代理程式。
將權限授予 App Engine 預設服務帳戶
在 Google Cloud 控制台中開啟「IAM & Admin」(IAM 與管理) 頁面,然後選取您建立的專案:
找到 App Engine 服務帳戶。此帳戶的格式為
[PROJECT_ID]@appspot.gserviceaccount.com
。將[PROJECT_ID]
替換為專案 ID。選取服務帳戶旁邊的編輯圖示 edit。
新增下列角色:
- DLP 管理員
- DLP API 服務代理人
按一下 [儲存]。
將權限授予 Cloud Data Loss Prevention 服務代理
首次需要時,系統會建立 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 & Admin」(IAM 與管理) 頁面,然後選取您建立的專案:
選取「包含 Google 提供的角色授權」核取方塊
找到 Cloud Data Loss Prevention 服務代理程式。此帳戶的格式為
service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com
。將[PROJECT_NUMBER]
改成您的專案編號。選取服務帳戶旁邊的編輯圖示 edit。
新增角色「Project」(專案) >「Viewer」(檢視者),然後按一下 [Save] (儲存)。
建構隔離和分類管道
在本節中,您將建構隔離和分類管道,如下圖所示。
此管道中的數字對應到下列步驟:
- 將檔案上傳至 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 瀏覽器:
點選「建立值區」。
在「Bucket name」(值區名稱) 文字方塊中,輸入您為
[YOUR_QUARANTINE_BUCKET]
選取的名稱,然後點選「Create」(建立)。針對
[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 Topics」(Pub/Sub 主題) 頁面:
按一下「建立主題」。
在文字方塊中輸入主題名稱。
選取「新增預設訂閱」核取方塊。
按一下 [Create Topic] (建立主題)。
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 函式
本節逐步說明如何部署包含以下兩個 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 Overview」(Cloud Run 函式總覽) 頁面:
選取您已啟用 Cloud Run 函式的專案。
按一下「建立函式」。
在「Function name」(函式名稱) 方塊中,將預設名稱改成
create_DLP_job
。在「Trigger」(觸發條件) 欄位中,選取 [Cloud Storage]。
在「Event type」(事件類型) 欄位中,選取「Finalize/Create」(完成/建立)。
在「Bucket」(值區) 欄位中按一下 [browse] (瀏覽),在下拉式清單中反白值區,然後按一下 [Select] (選取),來選取隔離值區。
點選「儲存」。
點選 [下一步]。
選取「Runtime」(執行階段) 底下的 [Python 3.7]。
在「Source code」(原始碼) 下,勾選 [Inline editor] (內嵌編輯器)。
將「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 主題名稱。
在「Entry point」(進入點) 文字方塊中,將預設文字替換為以下內容:
create_DLP_job
。將「requirements.txt」requirements.txt文字方塊中的文字,替換成下列檔案的內容:
https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt.
按一下 [Deploy] (部署)。
若函式旁出現綠色勾號即表示部署成功。
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]
:您要上傳待處理檔案的 bucket 名稱。[YOUR_SENSITIVE_DATA_BUCKET]
:要將機密檔案移至的 bucket 名稱。[YOUR_NON_SENSITIVE_DATA_BUCKET]
:您要上傳待處理檔案的 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 Functions。
建立第二個函式
主控台
開啟「Cloud Run functions Overview」(Cloud Run 函式總覽) 頁面:
選取您已啟用 Cloud Run 函式的專案。
按一下「建立函式」。
在「Function Name」(函式名稱) 方塊中,將預設名稱改成
resolve_DLP
。在「觸發條件」欄位中,選取「Pub/Sub」。
在「Select a Cloud Pub/Sub Topic」(選取 Cloud Pub/Sub 主題) 欄位中,搜尋您先前建立的 Pub/Sub 主題。
按一下「儲存」
按一下「下一步」
選取「Runtime」(執行階段) 底下的 [Python 3.7]。
在「Source code」(原始碼) 下,選取「Inline editor」(內嵌編輯器)。
在「進入點」文字方塊中,將預設文字改為
resolve_DLP
。將「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 主題名稱。
按一下 [Deploy] (部署)。
若函式旁出現綠色勾號即表示部署成功。
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]
:您要上傳待處理檔案的 bucket 名稱。[YOUR_SENSITIVE_DATA_BUCKET]
:要將機密檔案移至的 bucket 名稱。[YOUR_NON_SENSITIVE_DATA_BUCKET]
:您要上傳待處理檔案的 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]/
Sensitive Data Protection 會檢查上傳至隔離值區的每個檔案並進行分類,然後根據分類將其移至適當的目標值區。
在 Cloud Storage 主控台中,開啟 Storage「Browser」(瀏覽器) 頁面:
選取一個您先前建立的目標值區,查看已上傳的檔案,以及您建立的其他值區。
清除所用資源
完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。
刪除專案
- 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
設定不同的有效資料類型值。 - 進一步瞭解如何使用 Sensitive Data Protection 檢查儲存空間與資料庫以找出機密資料。
- 進一步瞭解 Cloud Run 函式。
- 探索 Google Cloud 的參考架構、圖表和最佳做法。 歡迎瀏覽我們的雲端架構中心。