Cloud Storage にアップロードされたデータの分類の自動化


このチュートリアルでは、Cloud Storage およびその他の Google Cloud プロダクトを使用して、自動データ隔離および分類システムを実装する方法を示します。このチュートリアルでは、ユーザーが Google Cloud と基本的なシェル プログラミングについて理解していることを前提としています。

あらゆる組織において、データ保護責任者は、常時増え続ける、適切な保護や扱いが必要なデータに対応します。特に 1 日に数百、数千のファイルに対応する場合、そのデータの隔離と分類は複雑で時間がかかる場合があります。

ファイルを取得して隔離場所にアップロードし、分類結果に基づいて適切な場所に自動的に移動することはできないものでしょうか。このチュートリアルでは、Cloud FunctionsCloud StorageCloud Data Loss Prevention を使用して、そのようなシステムを実装する方法を説明します。

目標

  • 隔離と分類のパイプラインの一部として使用する Cloud Storage バケットを作成する。
  • ファイル処理の完了を通知するために、Pub/Sub トピックとサブスクリプションを作成する。
  • ファイルをアップロードするときに DLP API を呼び出す簡単な Cloud Function を作成する。
  • いくつかのサンプル ファイルを隔離バケットにアップロードして、Cloud Functions を起動する。Functions は DLP API を使用してファイルの検査と分類を行い、ファイルを適切なバケットに移動します。

費用

このチュートリアルでは、課金対象となる以下の Google Cloud コンポーネントを使用します。

  • Cloud Storage
  • Cloud Functions
  • Cloud Data Loss Prevention

料金計算ツールを使用すると、予想使用量に基づいて費用の見積もりを作成できます。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention API を有効にします。

    API を有効にする

サービス アカウントへの権限の付与

まず、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 管理者
    • DLP API サービス エージェント(このロールをフィルタして見つける必要があります)
  5. [保存] をクリックします。

機密データの保護のサービス アカウントに権限を付与する

Cloud DLP サービス エージェントは、初めて必要になったときに作成されます。

  1. 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"}}'
    --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. [Project] > [閲覧者] ロールを追加し、[保存] をクリックします。

隔離と分類のパイプラインを作成する

このセクションでは、次の図に示す隔離と分類のパイプラインを作成します。

隔離と分類のワークフロー

上のパイプラインの番号は、次のステップに対応しています。

  1. ファイルを Cloud Storage にアップロードします。
  2. Cloud Functions を起動します。
  3. Cloud DLP がデータを検査、分類します。
  4. ファイルが適切なバケットに移動します。

Cloud Storage バケットを作成する

バケットの命名ガイドラインのガイダンスに沿って、このチュートリアルで使用する一意の名前付きバケットを 3 つ作成します。

  • バケット 1: [YOUR_QUARANTINE_BUCKET] を一意の名前に置き換えます。
  • バケット 2: [YOUR_SENSITIVE_DATA_BUCKET] を一意の名前に置き換えます。
  • バケット 3: [YOUR_NON_SENSITIVE_DATA_BUCKET] を一意の名前に置き換えます。

Console

  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. 次のコマンドを実行して、3 つのバケットを作成します。

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

Pub/Sub トピックとサブスクリプションを作成する

Console

  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 を作成する

このセクションでは、次の 2 つの 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 つ目の関数の作成

Console

  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

    デプロイに成功すると、次のような ready ステータスが表示されます。

    status:  READY
    timeout:  60s
    

1 つ目の Cloud Functions の関数が正常にデプロイされたら、次のセクションに進んで 2 つ目の Cloud Functions の関数を作成します。

2 つ目の関数の作成

Console

  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

    デプロイに成功すると、次のような 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' に設定されています。

  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 Console で、Storage ブラウザページを開きます。

    Cloud Storage ブラウザに移動

  5. 作成したターゲット バケットのうちの 1 つを選択して、アップロードされたファイルを確認します。また、作成した他のバケットも確認します。

クリーンアップ

チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。

プロジェクトの削除

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ