格納されるカスタム辞書検出器の作成

コンテンツをスキャンする機密性の高い単語やフレーズが数万個ある場合は、標準カスタム辞書検出器で十分です。スキャンする単語やフレーズがこれ以上の場合や、単語やフレーズのリストが頻繁に変わる場合は、格納されるカスタム辞書を作成します。これは、最大数百万個の単語やフレーズをスキャンできます。

このトピックでは、格納されるカスタム辞書を作成および再構築する方法と、いくつかのエラーのシナリオについて説明します。

格納されるカスタム辞書の構造

標準辞書カスタム infoType または正規表現カスタム infoType を作成する方法に慣れておくことをおすすめします。カスタム infoType を構成しておくと、検査や匿名化のスキャンを設定するときに使用できます。ただし、格納されるカスタム辞書はこのようなカスタム infoType とは異なり、格納される各カスタム辞書に 2 つのコンポーネントがあります。

  • 作成、定義するフレーズのリスト。このリストは、Cloud Storage 内のテキスト ファイルまたは BigQuery テーブル内の列として保存されます。
  • 生成された辞書ファイル。フレーズリストに基づいて Cloud DLP によって生成されます。辞書ファイルは Cloud Storage に保存され、ソースフレーズ データのコピーと、検索やマッチングに役立つブルーム フィルタで構成されます。辞書ファイルは直接編集できません。

格納されるカスタム辞書を新規作成する

このセクションでは、格納されるカスタム辞書を作成、編集、再構築する方法について説明します。

フレーズリストを作成する

格納されるカスタム辞書を作成するための最初のステップは、単語とフレーズのリストを作成することです。これには次の 2 つの選択肢があります。

  • 各単語やフレーズを 1 行に 1 つずつ含むテキスト ファイルを Cloud Storage バケットに配置します。
  • BigQuery テーブルの 1 つの列をフレーズのコンテナとして指定します。各フレーズを列内の単独の行に含めます。辞書のすべての単語とフレーズを 1 つの列に収めるようにすると、既存の BigQuery テーブルを使用できます。

Cloud DLP で処理できない大きさの用語リストを作成することもできるのでご注意ください。エラー メッセージが表示された場合は、このトピックの後半のエラーのトラブルシューティングをご覧ください。

辞書を作成する

用語リストを作成したら、Cloud DLP を使用して辞書を作成します。

Console

  1. Cloud Storage バケットに辞書用の新しいフォルダを作成します。Cloud DLP は、指定した場所に辞書ファイルを含むフォルダを作成します。
  2. Cloud Console で、Cloud DLP を開きます。

    Cloud DLP UI に移動

  3. [作成]メニューで [格納される infoType] を選択します。

    [作成] メニューの [格納される infoType] が選択された DLP UI のスクリーンショット。

    または、次のボタンをクリックします。

    新しい infoType を作成する

[infoType の作成] ページには次のセクションがあります。

infoType の構成

[infoType の構成] セクションでは、格納されるカスタム辞書 infoType の名前と説明を入力します。

  • [InfoType ID] フィールドに、カスタム infoType の識別子を入力します。これにより、検査ジョブと匿名化ジョブを構成するときに infoType を参照できます。名前には文字、数字、ハイフン、アンダースコアを使用できます。
  • [InfoType の表示名] フィールドに、カスタム infoType の名前を入力します。名前にはスペースと句読点を使用できます。
  • [説明] フィールドに、カスタム infoType が検出する内容の説明を入力します。

データ ロケーションの選択

[データ ロケーションの選択] セクションでは、格納されるカスタム辞書の作成元となる単語やフレーズのリストを検索する場所を指定します。

  • 検索する単語やフレーズが BigQuery テーブルにリストされている場合は、[BigQuery] を選択します。表には最大 1 つの列を指定できます。指定したフィールドにプロジェクト ID、データセット ID、テーブル ID を入力します。[フィールド名] フィールドに列 ID を入力します。
  • 検索する単語やフレーズが Cloud Storage のテキスト ファイルにリストされている場合は、[Google Cloud Storage] を選択します。指定したフィールドにファイルのパスを入力します。

最後のセクションでは、コンパクト化された格納されるカスタム辞書を保存する、Cloud DLP の場所を指定します。

[出力バケットまたはフォルダ] フィールドに、辞書を保存するパスを入力します。

[作成] をクリックして、格納されるカスタム辞書を作成します。infoType の詳細画面が表示されます。

ステータスが「準備完了」の場合、格納されるカスタム辞書は生成されており、新しいカスタム infoType を使用できます。

プロトコル

  1. Cloud Storage バケットに辞書用の新しいフォルダを作成します。Cloud DLP は、指定した場所に辞書ファイルを含むフォルダを作成します。
  2. Cloud DLP API の storedInfoTypes.create メソッドを使用して辞書を作成します。create メソッドには次のパラメータがあります。
    • StoredInfoTypeConfig オブジェクト: 格納される infoType の構成が含まれます。たとえば次のようなものがあります。
      • description: 辞書の説明。
      • displayName: 辞書に付ける名前。
      • LargeCustomDictionaryConfig: 格納されるカスタム辞書の構成が含まれます。たとえば次のようなものがあります。
        • BigQueryField: 用語リストが BigQuery に保存されるかどうかを指定します。リストが格納されるテーブルへの参照と、各辞書フレーズを保存するフィールドが含まれます。
        • CloudStorageFileSet: 用語リストが Cloud Storage に保存されるかどうかを指定します。Cloud Storage 内のソースの場所への URL を "gs://[PATH_TO_GS]" の形式で格納します。ワイルドカードはサポートされています。
        • outputPath: 格納される辞書を保存する Cloud Storage バケット内の場所へのパス。
    • storedInfoTypeId: 格納されるカスタム infoType の識別子。この値によって、格納されるカスタム infoType を再構築または削除するとき、または検査や匿名化ジョブで使用するときに、格納されるカスタム infoType を参照できます。このフィールドを空のままにすると、システムによって識別子が生成されます。

次の JSON の例は、storedInfoTypes.create メソッドに送信されると、新しい格納されるカスタム辞書を作成します。この例では、commit で使用されるすべての GitHub ユーザー名(bigquery-public-data.samples.github_nested)の、一般公開の BigQuery データベースに保存された用語リストから、格納されるカスタム辞書を作成するよう Cloud DLP に指示しています。生成された辞書の出力パスは、dlptesting という Cloud Storage バケットに設定され、格納されるカスタム辞書には github-usernames という名前が付けられます。

JSON 入力:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/storedInfoTypes?key={YOUR_API_KEY}

{
  "config":{
    "displayName":"GitHub usernames",
    "description":"Dictionary of github usernames used in commits",
    "largeCustomDictionary":{
      "outputPath":{
        "path":"gs://[PATH_TO_GS]"
      },
      "bigQueryField":{
        "table":{
          "datasetId":"samples",
          "projectId":"bigquery-public-data",
          "tableId":"github_nested"
        }
      }
    }
  },
  "storedInfoTypeId":"github-usernames"
}

辞書を再構築する

辞書に用語やフレーズを追加または削除する場合は、まずソースの用語リストを更新してから、辞書を再構築するよう Cloud DLP に指示します。

  1. Cloud Storage または BigQuery の既存のソース用語リストを更新します。必要に応じて、用語やフレーズを追加、削除、変更します。
  2. Cloud Console または Cloud DLP の storedInfoTypes.patch メソッドを使用して辞書を「再構築」して、新しいバージョンの辞書を作成します。これにより、新しいバージョンの辞書が作成され、古いバージョンの辞書と置き換えられます。

格納されるカスタム辞書を再構築するには:

Console

  1. Cloud Storage または BigQuery で用語リストを更新して保存します。
  2. Cloud Console で、Cloud DLP を開きます。
  3. [構成] タブをクリックし、[InfoTypes] をクリックします。
  4. infoType 画面で、[カスタム] タブをクリックします。格納されるカスタム infoType がここに表示されます。

    カスタム infoType のリストに移動

  5. 更新する格納される infoType の行をクリックします。

  6. infoType の詳細画面で、[データの再ビルド] をクリックします。

Cloud DLP は、ソースの用語リストに加えた変更を使用して、格納されるカスタム辞書を再構築します。カスタム infoType のステータスが [準備完了] になったら、使用できるようになります。カスタム infoType を使用するすべてのテンプレートまたはジョブトリガーは、再構築されたカスタム infoType を自動的に使用します。

プロトコル

格納されるカスタム辞書に新しい用語を追加するか、既存の用語を削除または変更するだけの場合は、storedInfoTypes.patch メソッドを呼び出すだけで辞書を再構築できます。name フィールドには、組織またはプロジェクトのリソース名と、再構築する格納されるカスタム infoType を入力します。格納される infoType の名前は、storedInfoTypeId パラメータで作成したときに指定したものです。再構築する格納されるカスタム infoType の識別子を覚えていない場合は、storedInfoTypes.list メソッドを呼び出して、現在格納されているすべての infoType のリストを表示します。

次のパターンは、name フィールドの有効なエントリを表しています。

  • organizations/[ORG_ID]/storedInfoTypes/[STORED_INFOTYPE_ID]
  • projects/[PROJECT_ID]/storedInfoTypes/[STORED_INFOTYPE_ID]

格納されるカスタム辞書を新しいバージョンに再構築すると、格納されるカスタム辞書の古いバージョンは削除されます。格納されるカスタム辞書を Cloud DLP が更新している間、辞書のステータスは「保留中」となります。新しいバージョンの辞書のステータスが保留中の場合、古いバージョンの辞書はまだ存在しています。辞書が再構築されている間に実行するスキャンでは、古いバージョンの辞書が使用されます。

既存の格納されるカスタム辞書のソース用語リストは、BigQuery テーブルに格納されているものから Cloud Storage バケットに格納されているものに変更することも、その逆も可能です。storedInfoTypes.patch メソッドを使用しますが、以前 BigQueryField オブジェクトを使用していた LargeCustomDictionaryConfigCloudStorageFileSet オブジェクトを含めるか、その逆を行います。また、updateMask パラメータを FieldMask 形式で指定して、再構築した格納されるカスタム辞書パラメータに設定する必要があります。たとえば次の JSON は、storedInfoTypes.patch メソッドに送信されると、Cloud Storage パスの URL が更新されたことを updateMask パラメータに示します(large_custom_dictionary.cloud_storage_file_set.url)。

PATCH https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/storedInfoTypes/github-usernames?key={YOUR_API_KEY}

{
  "config":{
    "largeCustomDictionary":{
      "cloudStorageFileSet":{
        "url":"gs://[BUCKET_NAME]/[PATH_TO_FILE]"
      }
    }
  },
  "updateMask":"large_custom_dictionary.cloud_storage_file_set.url"
}

格納されるカスタム辞書検出器を使用してコンテンツをスキャンする

格納されるカスタム辞書検出器を使用したコンテンツのスキャンは、他のカスタム infoType 検出器を使用したコンテンツのスキャンと似ています。

Console

新しいジョブ、ジョブトリガー、テンプレートを作成するときに、カスタム辞書検出器を使用できます。ジョブまたはテンプレート作成ワークフローの [検出の設定] セクションで、[カスタム infoTypes] サブセクションに格納されるカスタム辞書 infoType を指定できます。

  1. [カスタム infoType を追加] をクリックし、[格納される infoType] をクリックします。

    [カスタム infoTypes] セクションの DLP UI のジョブトリガーの作成ワークフローのスクリーンショット。

  2. [カスタム infoType を追加] セクションで、[InfoType] フィールドに infoType 名を入力します。文字、数字、アンダースコアを使用できます。

  3. [格納される infoType の名前] フィールドをクリックすると、格納されるカスタム辞書 infoType へのパスのフィールドの下に、次のようなメニューが表示されます。

    DLP UI のジョブトリガーの作成ワークフローのスクリーンショット([カスタム infoType] セクション)

  4. 格納されるカスタム辞書を選択し、[完了] をクリックします。

追加したカスタム infoType は次のスクリーンショットのようになります。必要に応じてカスタム infoType をさらに追加できます。

カスタム infoType が追加された DLP UI のジョブトリガーの作成ワークフローのスクリーンショット。

引き続き、ジョブ、ジョブトリガー、またはテンプレートを作成できます。

プロトコル

次の JSON は、content.inspect メソッドに送信されると、指定の格納されるカスタム辞書検出器を使用して、所定のテキストのスニペットをスキャンします。格納されるカスタム辞書を含むすべてのカスタム infoType には、組み込みの infoType や他のカスタム infoType と競合しない名前を付ける必要があるため、infoType パラメータは必須です。storedType パラメータには、格納されるカスタム infoType の完全なリソースパスが含まれます。

JSON 入力:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:inspect?key={YOUR_API_KEY}

{
  "inspectConfig":{
    "customInfoTypes":[
      {
        "infoType":{
          "name":"GITHUB_LOGINS"
        },
        "storedType":{
          "name":"projects/[PROJECT_ID]/storedInfoTypes/github-logins"
        }
      }
    ]
  },
  "item":{
    "value":"The commit was made by githubuser."
  }
}

エラーのトラブルシューティング

格納されるカスタム辞書を作成しようとする際に、Cloud DLP が Cloud Storage ベースの用語リストから辞書を作成できないことを示すエラーが表示された場合は、いくつかの原因が考えられます。

  • 格納されるカスタム辞書の上限に達した。問題に応じて、いくつかの回避策があります。
    • Cloud Storage における単一の格納されるカスタム辞書の上限(200 MB)に達した場合、ファイルを複数のファイルに分割してみることができます。ファイルの合計サイズが、Cloud Storage に保存されているすべてのカスタム辞書ファイルの最大合計サイズ(1 GB)を超えない限り、これらのファイルを使用して 1 つのカスタム辞書を作ることができます。
    • BigQuery には Cloud Storage と同様の制限はありません。用語を BigQuery テーブルに移動することを検討してください。ただし、BigQuery のカスタム辞書列の最大サイズ(1 GB)と最大行数(5,000,000)に注意してください。
    • 用語リストファイルが、カスタム辞書のソースの用語リストに対して適用されるすべての制限を超える場合は、用語リストファイルを Cloud Storage で複数のファイルに分割し、ファイルごとに辞書を作成し、作成した各辞書について、個別のスキャンジョブを作成します。
  • 1 つ以上の用語に文字または数字が 1 文字も含まれていない。Cloud DLP は、スペースまたは記号のみで構成される用語はスキャンできません。少なくとも 1 つの文字または数字が必要です。用語リストを見てそのような用語が含まれているかどうかを確認し、修正または削除します。
  • 用語リストに含まれているフレーズに構成要素が多すぎる。この文脈での構成要素とは、文字のみ、数字のみ、あるいは文字と数字以外の要素(空白や記号など)のみを含む連続するシーケンスです。用語リストを見てそのような用語が含まれているかどうかを確認し、修正または削除します。
  • DLP サービス アカウントから辞書ソースデータ、または辞書ファイルを保存するための Cloud Storage バケットにアクセスできない。この問題を解決するには、DLP サービス アカウントに Cloud Storage 管理者の役割または BigQuery の dataOwner と jobUser の役割を付与します。

API の概要

格納されるカスタム辞書は、そのサイズと複雑さのため、格納される infoType と見なされます。現時点では、格納されるカスタム辞書のタイプのみが、格納される infoType タイプです。

格納される infoType は Cloud DLP 内で StoredInfoType オブジェクトによって表現されます。これには以下の関連オブジェクトが伴います。

  • StoredInfoTypeConfig には、格納される infoType の構成が含まれます。構成には名前や説明などの詳細が含まれます。
  • StoredInfoTypeVersion には、格納される infoType の作成日時や、現在のバージョンが作成されたときに発生した最後の 5 つのエラー メッセージなど、格納される infoType に関する詳細情報が含まれます。
  • StoredInfoTypeState には、格納される infoType の最新のバージョンや、保留中のすべてのバージョンの状態が含まれます。状態情報には、格納される infoType が再構築中であるか、使用準備ができているか、または無効であるかどうかが含まれます。

格納される infoType を作成、編集、削除するには、次のメソッドを使用します。

  • storedInfoTypes.create: 指定した StoredInfoTypeConfig を前提として、格納される infoType を新たに作成します。
  • storedInfoTypes.patch: 指定した新しい StoredInfoTypeConfig を使用して、格納される infoType を更新します。指定がない場合は、既存の StoredInfoTypeConfig を使用して、格納される infoType の新しいバージョンを作成します。
  • storedInfoTypes.get: StoredInfoTypeConfigと、指定した格納される infoType のすべての保留中バージョンを取得します。
  • storedInfoTypes.list: 現在格納されているすべての infoType を一覧表示します。
  • storedInfoTypes.delete: 指定した格納される infoType を削除します。

ここで説明した格納される infoType API に加えて、次のオブジェクトは格納されるカスタム辞書に特別に適用されます。

  • LargeCustomDictionaryConfig は次の両方を指定します。
    • フレーズリストが保存される Cloud Storage または BigQuery 内の場所。
    • 生成された辞書ファイルを保存する Cloud Storage 内の場所。

辞書での照合について

以下は、Cloud DLP でどのように辞書の単語やフレーズが照合されるかについて説明したガイダンスです。ここに示す内容は、標準カスタム辞書と格納されるカスタム辞書の両方に適用されます。

  • 辞書の単語では大文字と小文字が区別されません。辞書に Abby が含まれている場合、abbyABBYAbby などと一致します。
  • スキャン対象の辞書やコンテンツ内のすべての文字(Unicode 基本多言語面に含まれる英字と数字以外)は、照合のためのスキャン時に空白と見なされます。辞書で Abby Abernathy をスキャンすると、abby abernathyAbby, AbernathyAbby (ABERNATHY) などと一致します。
  • 一致する文字の前後の文字は、その単語内の隣接する文字とは異なるタイプ(文字または数字)でなければなりません。辞書で Abi をスキャンすると、Abi904 の最初の 3 文字と一致しますが、Abigail の最初の 3 文字とは一致しません。
  • 辞書の単語に英字や数字ではない文字が大量に含まれる場合、その文字は空白として扱われるため、予期しない結果になることがあります。