このチュートリアルでは、Cloud Storage およびその他の Google Cloud プロダクトを使用して、自動データ隔離および分類システムを実装する方法を示します。このチュートリアルでは、ユーザーが Google Cloud と基本的なシェル プログラミングについて理解していることを前提としています。
あらゆる組織において、データ保護責任者は、常時増え続ける、適切な保護や扱いが必要なデータに対応します。特に 1 日に数百、数千のファイルに対応する場合、そのデータの隔離と分類は複雑で時間がかかる場合があります。
ファイルを取得して隔離場所にアップロードし、分類結果に基づいて適切な場所に自動的に移動することはできないものでしょうか。このチュートリアルでは、Cloud Run 関数、Cloud Storage、Cloud Data Loss Prevention を使用して、このようなシステムを実装する方法を説明します。
目標
- 隔離と分類のパイプラインの一部として使用する Cloud Storage バケットを作成する。
- ファイル処理の完了を通知するために、Pub/Sub トピックとサブスクリプションを作成する。
- ファイルをアップロードするときに DLP API を呼び出す簡単な Cloud Function を作成する。
- いくつかのサンプル ファイルを隔離バケットにアップロードして、Cloud Functions を起動する。Functions は DLP API を使用してファイルの検査と分類を行い、ファイルを適切なバケットに移動します。
費用
このチュートリアルでは、課金対象となる以下の Google Cloud コンポーネントを使用します。
- Cloud Storage
- Cloud Run 関数
- 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 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 Functions サービス アカウントと Cloud DLP サービス アカウントに権限を付与します。
App Engine のデフォルトのサービス アカウントに権限を付与する
Google Cloud コンソールで、[IAM と管理] ページを開き、作成したプロジェクトを選択します。
App Engine のサービス アカウントを見つけます。このアカウントの形式は、
[PROJECT_ID]@appspot.gserviceaccount.com
です。ここで、[PROJECT_ID]
は使用するプロジェクト ID に置き換えてください。サービス アカウントの横に表示された編集アイコン edit を選択します。
次の役割を追加します。
- Cloud DLP > DLP 管理者
- DLP API サービス エージェント(このロールをフィルタして見つける必要があります)
[保存] をクリックします。
機密データの保護のサービス アカウントに権限を付与する
Cloud DLP サービス エージェントは、初めて必要になったときに作成されます。
Cloud Shell で、
InspectContent
を呼び出して Cloud DLP サービス エージェントを作成します。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"}}'
--compressedPROJECT_ID
を実際のプロジェクト ID に置き換えます。Google Cloud コンソールで、[IAM と管理] ページを開き、作成したプロジェクトを選択します。
[Google 提供のロール付与を含みます] チェックボックスをオンにします。
Cloud DLP サービス エージェントのサービス アカウントを見つけます。このアカウントの形式は、
service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com
です。ここで、[PROJECT_NUMBER]
は使用するプロジェクト番号に置き換えてください。サービス アカウントの横に表示された編集アイコン edit を選択します。
[Project] > [閲覧者] ロールを追加し、[保存] をクリックします。
隔離と分類のパイプラインを作成する
このセクションでは、次の図に示す隔離と分類のパイプラインを作成します。
上のパイプラインの番号は、次のステップに対応しています。
- ファイルを Cloud Storage にアップロードします。
- Cloud Functions を起動します。
- Cloud DLP がデータを検査、分類します。
- ファイルが適切なバケットに移動します。
Cloud Storage バケットを作成する
バケットの命名ガイドラインのガイダンスに沿って、このチュートリアルで使用する一意の名前付きバケットを 3 つ作成します。
- バケット 1:
[YOUR_QUARANTINE_BUCKET]
を一意の名前に置き換えます。 - バケット 2:
[YOUR_SENSITIVE_DATA_BUCKET]
を一意の名前に置き換えます。 - バケット 3:
[YOUR_NON_SENSITIVE_DATA_BUCKET]
を一意の名前に置き換えます。
Console
Google Cloud コンソールで、Cloud Storage ブラウザを開きます。
[バケットを作成] をクリックします。
[バケット名] テキスト ボックスに、
[YOUR_QUARANTINE_BUCKET]
に選択した名前を入力して、[作成] をクリックします。[YOUR_SENSITIVE_DATA_BUCKET]
バケットと[YOUR_NON_SENSITIVE_DATA_BUCKET]
バケットに対して同じ操作を繰り返します。
gcloud
Cloud Shell を開きます。
次のコマンドを実行して、3 つのバケットを作成します。
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 トピックとサブスクリプションを作成する
Console
[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 Run 関数を作成する
このセクションでは、次の 2 つの Cloud Run 関数を含む 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 つ目の関数の作成
console
Cloud Run functions の概要ページを開きます。
Cloud Run 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 Run の関数と 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 Run 関数と 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
デプロイに成功すると、次のような ready ステータスが表示されます。
status: READY timeout: 60s
1 つ目の Cloud Functions の関数が正常にデプロイされたら、次のセクションに進んで 2 つ目の Cloud Functions の関数を作成します。
2 つ目の関数の作成
console
Cloud Run functions の概要ページを開きます。
Cloud Run 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 Run 関数と 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 Run 関数と 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
デプロイに成功すると、次のような ready ステータスが表示されます。
status: READY timeout: 60s
Cloud Functions が正常にデプロイされたら、次のセクションに進みます。
隔離バケットにサンプル ファイルをアップロードする
この記事に関連する GitHub リポジトリには、サンプル データファイルが含まれています。このフォルダには、機密データを含むいくつかのファイルと機密データを含まないファイルが含まれています。機密データは、次の INFO_TYPES
値の 1 つ以上を含むものとして分類されます。
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]/
Cloud DLP は、隔離バケットにアップロードされた各ファイルを検査、分類し、その分類に基づいて適切なターゲット バケットに移動します。
Cloud Storage Console で、Storage ブラウザページを開きます。
作成したターゲット バケットのうちの 1 つを選択して、アップロードされたファイルを確認します。また、作成した他のバケットも確認します。
クリーンアップ
チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。
プロジェクトの削除
- 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 Run 関数の詳細を確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。