Cloud DLP 検査ジョブの作成とスケジュール設定

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このトピックでは、Cloud Data Loss Prevention 検査ジョブの作成方法と、ジョブトリガーを作成して定期的な検査ジョブのスケジュールを設定する方法について詳しく説明します。Cloud DLP UI を使用して新しいジョブトリガーを作成する方法の簡単なチュートリアルについては、クイックスタート: Cloud DLP ジョブトリガーの作成をご覧ください。

検査ジョブとジョブトリガーの概要

Cloud DLP が検査スキャンを実行してセンシティブ データを識別するとき、各スキャンはジョブとして実行されます。Cloud Storage バケット、BigQuery テーブル、Datastore の種類、外部データなど、Google Cloud Storage リポジトリを検査するように指示するたびに、Cloud DLP はジョブリソースを作成して実行します。

Cloud DLP 検査スキャンジョブをスケジュールするには、ジョブトリガーを作成します。ジョブトリガーは、DLP ジョブの定期的な作成を自動化し、オンデマンドで実行することもできます。

Cloud DLP のジョブとジョブトリガーの詳細については、ジョブとジョブトリガーのコンセプト ページをご覧ください。

新しい検査ジョブの作成

新しい Cloud DLP 検査ジョブを作成するには、次のようにします。

Console

  1. Google Cloud コンソールで、[データ損失防止] ページに移動します。

    [データ損失防止] に移動

  2. [検査] タブをクリックし、[ジョブとジョブトリガーを作成] をクリックします。

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

    新しいジョブを作成

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

入力データを選択

名前

ジョブの名前を入力します。文字、数字、ハイフンを使用できます。ジョブの名前は省略可能です。名前を入力しないと、Cloud DLP はジョブに一意の番号 ID を付与します。

場所

[ストレージの種類] メニューで、スキャンするデータが保存されているリポジトリの種類を選択します。

  • Cloud Storage: スキャンするバケットの URL を入力します。または、[ロケーション タイプ] メニューから [含める / 含めない] を選択した後、[BROWSE] をクリックしてスキャン対象のバケットまたはサブフォルダに移動します。指定したディレクトリとそこに含まれるすべてのディレクトリをスキャンするには、[フォルダを再帰的にスキャンする] チェックボックスをオンにします。下位ディレクトリを対象にせず、指定したディレクトリだけをスキャンする場合は、このチェックボックスはオフのままにします。
  • BigQuery: スキャンするプロジェクト、データセット、テーブルの識別子を入力します。
  • Datastore: スキャンするプロジェクト、名前空間(省略可能)、種類の識別子を入力します。
  • ハイブリッド: 必要なラベル、オプションのラベル、表形式のデータを処理するオプションを追加できます。詳細については、提供できるメタデータのタイプをご覧ください。

サンプリング

サンプリングは、大量のデータがある場合にリソースを節約するオプションの方法です。

[サンプリング] では、選択したすべてのデータをスキャンするか、特定の割合のデータだけをスキャンしてサンプリングを行うかを選択できます。サンプリングは、スキャンするストレージ リポジトリの種類によって動作が異なります。

  • BigQuery の場合、スキャンに含めるように指定したファイルの割合に応じて、選択された合計行数のサブセットをサンプリングします。
  • Cloud Storage の場合、[1 ファイルあたりのスキャンの最大バイト数] で指定したサイズを超えるファイルについては、その最大サイズまでスキャンしてから次のファイルに進みます。

サンプリングを有効にするには、最初のメニューで、以下のいずれかのオプションを選択します。

  • 上からサンプリングを開始する: データの先頭から部分スキャンが開始されます。BigQuery の場合、最初の行からスキャンが開始されます。Cloud Storage の場合、各ファイルの先頭からスキャンが開始され、指定された最大ファイルサイズまでスキャンするとスキャンが停止します。
  • ランダム スタートからサンプリングを開始する: データ内のランダムな場所から部分スキャンが開始されます。BigQuery の場合、ランダムな行からスキャンが開始されます。Cloud Storage の場合、この設定は、指定された最大サイズを超えるファイルにのみ適用されます。最大ファイルサイズ未満のファイルは全体がスキャンされ、最大ファイルサイズを超えるファイルは最大サイズまでスキャンされます。

部分スキャンを実行するには、データのうち何パーセントをスキャンするかを指定する必要があります。スライダーを使って割合を設定します。

また、スキャンするファイルやレコードを日付で絞り込むことも可能です。方法については、このトピックの後半のスケジュールをご覧ください。

詳細構成

Cloud Storage バケットまたは BigQuery テーブルのスキャンジョブを作成する際に、詳細構成を指定して検索を絞り込むことができます。具体的には、以下を構成できます。

  • ファイル(Cloud Storage のみ): スキャンするファイルの種類。テキスト、バイナリ、画像ファイルを含めることができます。
  • 識別フィールド(BigQuery のみ): テーブル内で一意の行識別子。
  • Cloud Storage の場合、[1 ファイルあたりのスキャンの最大バイト数] で指定したサイズを超えるファイルについては、その最大サイズまでスキャンしてから次のファイルに進みます。

サンプリングを有効にするには、データのうち何パーセントをスキャンするかを指定する必要があります。スライダーを使って割合を設定します。次に、最初のメニューで、以下のいずれかのオプションを選択します。

  • 上からサンプリングを開始する: データの先頭から部分スキャンが開始されます。BigQuery の場合、最初の行からスキャンが開始されます。Cloud Storage の場合、各ファイルの先頭からスキャンが開始され、指定された最大ファイルサイズまでスキャンするとスキャンが停止します(上記参照)。
  • ランダム スタートからサンプリングを開始する: データ内のランダムな場所から部分スキャンが開始されます。BigQuery の場合、ランダムな行からスキャンが開始されます。Cloud Storage の場合、この設定は、指定された最大サイズを超えるファイルにのみ適用されます。最大ファイルサイズ未満のファイルは全体がスキャンされ、最大ファイルサイズを超えるファイルは最大サイズまでスキャンされます。
ファイル

Cloud Storage に保存されているファイルの場合は、[ファイル] でスキャンに含めるファイルの種類を指定できます。

バイナリ、テキスト、画像、CSV、TSV、Microsoft Word、Microsoft Excel、Microsoft PowerPoint、PDF、Apache Avro ファイルから選択できます。Cloud Storage バケット内で Cloud DLP がスキャンできるファイル拡張子の完全なリストについては、FileType をご覧ください。[バイナリ] を選択すると、Cloud DLP で認識されない形式のファイルをスキャンできます。

識別フィールド

BigQuery のテーブルの場合、[識別フィールド] フィールドで、テーブルの主キー列の値を結果に含めるように Cloud DLP に指示できます。こうすることで、検出結果が含まれるテーブルの行に検索結果をリンクできます。

テーブル内の各行を一意に識別する列の名前を入力します。必要に応じて、ドット表記を使用して、ネストされたフィールドを指定します。追加できるフィールドの数に制限はありません。

検出結果を BigQuery にエクスポートするには、[BigQuery に保存] アクションも有効にする必要があります。検出結果が BigQuery にエクスポートされると、各検出結果には識別フィールドのそれぞれの値が含まれます。詳細については、identifyingFields をご覧ください。

検出を構成する

[検出の設定] セクションでは、スキャン対象のセンシティブ データの種類を指定します。このセクションは省略可能です。このセクションをスキップすると、Cloud DLP はデフォルトの infoType のセットのデータをスキャンします。

テンプレート

Cloud DLP テンプレートを使用して、以前に指定した構成情報を再利用することもできます。

使用するテンプレートをすでに作成している場合は、[テンプレート名] フィールドをクリックして既存の検査テンプレートのリストを表示します。使用するテンプレートの名前を選択または入力します。

テンプレートの作成について詳しくは、Cloud DLP 検査テンプレートの作成をご覧ください。

infoType

infoType 検出器は、特定の型の機密データを検出します。たとえば、Cloud DLP 組み込みの US_SOCIAL_SECURITY_NUMBER infoType 検出器では、米国社会保障番号が検出されます。組み込みの infoType 検出器に加えて、独自のカスタム infoType 検出器を作成できます。

[InfoType] で、スキャンするデータ型に対応する infoType 検出器を選択します。このフィールドを空白のままにして、デフォルトのすべての infoTypes をスキャン対象にすることもできます。それぞれの検出器の詳細については、InfoType 検出器リファレンスをご覧ください。

また、[カスタム infoType] セクションでカスタム infoType 検出器を追加し、[検査ルールセット] セクションで組み込みとカスタムの両方の infoType 検出器をカスタマイズできます。

カスタム infoType

To add a custom infoType detector, do the following:

  1. Click Add custom infoType.
  2. Choose the type of custom infoType detector you want to create:
    • Words or phrases: Matches on one or more words or phrases that you enter into the field. Use this custom infoType when you have just a few words or phrases to search for. Give your custom infoType a name, and then, under List of words or phrases, type the word or phrase you want Cloud DLP to match on. To search on multiple words or phrases, press Enter after each one. For more information, see Creating a regular custom dictionary detector.
    • Dictionary path: Searches your content for items in a list of words and phrases. The list is stored in a text file in Cloud Storage. Use this custom infoType when you have anywhere from a few to several hundred thousand words or phrases to search for. This method is also useful if your list contains sensitive elements and you don't want to store them inside of a job or template. Give your custom infoType a name, and then, under Dictionary location, enter or browse to the Cloud Storage path where the dictionary file is stored. For more information, see Creating a regular custom dictionary detector.
    • Regex: Matches content based on a regular expression. Give your custom infoType a name, and then, in the Regex field, enter a regex pattern to match words and phrases. See the supported regex syntax.
    • Stored infoType: This option adds a stored custom dictionary detector, which is a kind of dictionary detector that is built from either a large text file stored in Cloud Storage or a single column of a BigQuery table. Use this kind of custom infoType when you have anywhere from several hundred thousand to tens of millions of words or phrases to search for. Be aware that this is the only option in this menu for which you must have already created the stored infoType to use it. Give your custom infoType a name (different from the name you gave the stored infoType), and then, in the Stored infoType field, enter the name of the stored infoType. For more information about creating stored custom dictionaries, see Creating a stored custom dictionary detector.

Click Add custom infoType again to add additional custom infoType detectors.

検査ルールセット

Inspection rulesets allow you to customize both built-in and custom infoType detectors using context rules. The two types of inspection rules are:

To add a new ruleset, first specify one or more built-in or custom infoType detectors in the InfoTypes section. These are the infoType detectors that your rulesets will be modifying. Then, do the following:

  1. Click in the Choose infoTypes field. The infoType or infoTypes you specified previously appear below the field in a menu, as shown here:
  2. Screenshot of the DLP UI's inspection rulesets configuration.
  3. Choose an infoType from the menu, and then click Add rule. A menu appears with the two options Hotword rule and Exclusion rule.

For hotword rules, choose Hotword rules. Then, do the following:

  1. In the Hotword field, enter a regular expression that Cloud DLP should look for.
  2. From the Hotword proximity menu, choose whether the hotword you entered is found before or after the chosen infoType.
  3. In Hotword distance from infoType, enter the approximate number of characters between the hotword and the chosen infoType.
  4. In Confidence level adjustment, choose whether to assign matches a fixed likelihood level, or to increase or decrease the default likelihood level by a certain amount.

For exclusion rules, choose Exclusion rules. Then, do the following:

  1. In the Exclude field, enter a regular expression (regex) that Cloud DLP should look for.
  2. From the Matching type menu, choose one of the following:
    • Full match: The finding must completely match the regex.
    • Partial match: A substring of the finding can match the regex.
    • Inverse match: The finding doesn't match the regex.

You can add additional hotword or exclusion rules and rulesets to further refine your scan results.

信頼度のしきい値

Cloud DLP で機密データの一致候補が検出されるたびに、可能性の値が「かなり低い」から「かなり高い」までの尺度で割り当てられます。ここで可能性の値を設定すると、Cloud DLP ではその設定に従って、その可能性の値以上のデータの一致のみが検出されます。

「可能性あり」はデフォルト値で、ほとんどの用途に十分対応できます。検出される一致が常に、あまりに広範に及ぶ場合は、スライダーを右に動かしてください。一致が少なすぎる場合は、スライダーを左に動かしてください。

設定が完了したら、[続行] をクリックします。

アクションの追加

[アクションの追加] には、ジョブの完了後に実行させるアクションを 1 つ以上選択します。

次のアクションを構成できます。

  • BigQuery に保存: DLP ジョブの結果を BigQuery テーブルに保存します。結果の表示や分析を行う前に、ジョブが完了していることを確認します。

    スキャンが実行されるたびに、Cloud DLP は指定された BigQuery テーブルにスキャンの検出結果を保存します。エクスポートされた知見には、各知見の場所と一致の可能性に関する詳細が含まれています。検出結果に infoType 検出器に一致する文字列を含めるには、[見積もりを含める] オプションを有効にします。

    テーブル ID を指定しなければ、スキャンの最初の実行時に BigQuery によってデフォルトの名前が新しいテーブルに割り当てられます。既存のテーブルを指定した場合、Cloud DLP はスキャンの検出結果をそのデーブルに追加します。

    検出結果を BigQuery に保存しない場合、スキャン結果には検出結果の数と infoType に関する統計情報のみが含まれます。

    データが BigQuery テーブルに書き込まれると、課金と割り当て使用量は、宛先テーブルが含まれるプロジェクトに適用されます。

  • Pub/Sub に公開: DLP ジョブの名前を属性として含む通知を Pub/Sub チャネルに公開します。通知メッセージの送信先にするトピックを 1 つ以上指定できます。スキャンジョブを実行する Cloud DLP サービス アカウントに、トピックに対する公開アクセス権があることを確認します。

  • Publish Command Center に公開: ジョブの結果の概要を Security Command Center に公開します。詳細については、Cloud DLP スキャンの結果を Security Command Center に送信するをご覧ください。

  • Dataplex に公開: ジョブの結果を Google Cloud のメタデータ管理サービスである Dataplex に送信します。

  • メールで通知: ジョブが完了したときにメールを送信します。メールは IAM プロジェクト オーナーと技術的な重要な連絡先の技術担当者に送信されます。

  • Cloud Monitoring への公開: 検査結果を Google Cloud のオペレーション スイートの Cloud Monitoring に送信します。

  • 匿名化されたコピーを作成する: 検査されたデータのすべての検出結果を匿名化し、匿名化されたコンテンツを新しいファイルに書き込みます。その後、機密情報を含むデータの代わりに、匿名化されたコピーをビジネス プロセスで使用できます。詳細については、Google Cloud コンソールで Cloud DLP を使用して Cloud Storage データの匿名化コピーを作成するをご覧ください。

詳しくは、アクションをご覧ください。

アクションを選択し終えたら、[続行] をクリックします。

確認

[確認] セクションには、指定したジョブ設定の概要が JSON 形式で表示されます。

[作成] をクリックしてジョブを作成し(スケジュールを指定しなかった場合)、ジョブを 1 回実行します。ジョブの情報ページが表示され、ステータスなどの情報を確認できます。現在実行中のジョブがあれば、[キャンセル] ボタンをクリックして停止できます。[削除] をクリックしてジョブを削除することもできます。

Cloud DLP のメインページに戻るには、Google Cloud コンソールの戻る矢印をクリックします。

プロトコル

ジョブは、DLP API で DlpJobs リソースによって表現されます。DlpJob リソースの projects.dlpJobs.create メソッドを使用して新しいジョブを作成できます。

このサンプル JSON は、POST リクエストによって、指定された Cloud DLP REST エンドポイントに送信できます。このサンプルの JSON では、Cloud DLP でジョブを作成する方法を示します。ジョブは、Datastore 検査スキャンです。

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。リクエストが API Explorer で作成された場合でも、リクエストが正常な場合は、ジョブが作成されることに注意してください。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

JSON 入力:

{
  "inspectJob": {
    "storageConfig": {
      "bigQueryOptions": {
        "tableReference": {
          "projectId": "bigquery-public-data",
          "datasetId": "san_francisco_sfpd_incidents",
          "tableId": "sfpd_incidents"
        }
      },
      "timespanConfig": {
        "startTime": "2020-01-01T00:00:01Z",
        "endTime": "2020-01-31T23:59:59Z",
        "timestampField": {
          "name": "timestamp"
        }
      }
    },
    "inspectConfig": {
      "infoTypes": [
        {
          "name": "PERSON_NAME"
        },
        {
          "name": "STREET_ADDRESS"
        }
      ],
      "excludeInfoTypes": false,
      "includeQuote": true,
      "minLikelihood": "LIKELY"
    },
    "actions": [
      {
        "saveFindings": {
          "outputConfig": {
            "table": {
              "projectId": "[PROJECT-ID]",
              "datasetId": "[DATASET-ID]"
            }
          }
        }
      }
    ]
  }
}

JSON 出力:

次の出力は、ジョブが正常に作成されたことを示しています。

{
  "name": "projects/[PROJECT-ID]/dlpJobs/[JOB-ID]",
  "type": "INSPECT_JOB",
  "state": "PENDING",
  "inspectDetails": {
    "requestedOptions": {
      "snapshotInspectTemplate": {},
      "jobConfig": {
        "storageConfig": {
          "bigQueryOptions": {
            "tableReference": {
              "projectId": "bigquery-public-data",
              "datasetId": "san_francisco_sfpd_incidents",
              "tableId": "sfpd_incidents"
            }
          },
          "timespanConfig": {
            "startTime": "2020-01-01T00:00:01Z",
            "endTime": "2020-01-31T23:59:59Z",
            "timestampField": {
              "name": "timestamp"
            }
          }
        },
        "inspectConfig": {
          "infoTypes": [
            {
              "name": "PERSON_NAME"
            },
            {
              "name": "STREET_ADDRESS"
            }
          ],
          "minLikelihood": "LIKELY",
          "limits": {},
          "includeQuote": true
        },
        "actions": [
          {
            "saveFindings": {
              "outputConfig": {
                "table": {
                  "projectId": "[PROJECT-ID]",
                  "datasetId": "[DATASET-ID]",
                  "tableId": "[TABLE-ID]"
                }
              }
            }
          }
        ]
      }
    },
    "result": {}
  },
  "createTime": "2020-07-10T07:26:33.643Z"
}

Java

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.Action;
import com.google.privacy.dlp.v2.CloudStorageOptions;
import com.google.privacy.dlp.v2.CreateDlpJobRequest;
import com.google.privacy.dlp.v2.DlpJob;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.InspectJobConfig;
import com.google.privacy.dlp.v2.Likelihood;
import com.google.privacy.dlp.v2.LocationName;
import com.google.privacy.dlp.v2.StorageConfig;
import com.google.privacy.dlp.v2.StorageConfig.TimespanConfig;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class JobsCreate {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String gcsPath = "gs://" + "your-bucket-name" + "path/to/file.txt";
    createJobs(projectId, gcsPath);
  }

  // Creates a DLP Job
  public static void createJobs(String projectId, String gcsPath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Set autoPopulateTimespan to true to scan only new content
      boolean autoPopulateTimespan = true;
      TimespanConfig timespanConfig =
          TimespanConfig.newBuilder()
              .setEnableAutoPopulationOfTimespanConfig(autoPopulateTimespan)
              .build();

      // Specify the GCS file to be inspected.
      CloudStorageOptions cloudStorageOptions =
          CloudStorageOptions.newBuilder()
              .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(gcsPath))
              .build();
      StorageConfig storageConfig =
          StorageConfig.newBuilder()
              .setCloudStorageOptions(cloudStorageOptions)
              .setTimespanConfig(timespanConfig)
              .build();

      // Specify the type of info the inspection will look for.
      // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types
      List<InfoType> infoTypes =
          Stream.of("EMAIL_ADDRESS", "PERSON_NAME", "LOCATION", "PHONE_NUMBER")
              .map(it -> InfoType.newBuilder().setName(it).build())
              .collect(Collectors.toList());
      // The minimum likelihood required before returning a match:
      // See: https://cloud.google.com/dlp/docs/likelihood
      Likelihood minLikelihood = Likelihood.UNLIKELY;

      // The maximum number of findings to report (0 = server maximum)
      InspectConfig.FindingLimits findingLimits =
          InspectConfig.FindingLimits.newBuilder().setMaxFindingsPerItem(100).build();

      InspectConfig inspectConfig =
          InspectConfig.newBuilder()
              .addAllInfoTypes(infoTypes)
              .setIncludeQuote(true)
              .setMinLikelihood(minLikelihood)
              .setLimits(findingLimits)
              .build();

      // Specify the action that is triggered when the job completes.
      Action.PublishSummaryToCscc publishSummaryToCscc =
          Action.PublishSummaryToCscc.getDefaultInstance();
      Action action = Action.newBuilder().setPublishSummaryToCscc(publishSummaryToCscc).build();

      // Configure the inspection job we want the service to perform.
      InspectJobConfig inspectJobConfig =
          InspectJobConfig.newBuilder()
              .setInspectConfig(inspectConfig)
              .setStorageConfig(storageConfig)
              .addActions(action)
              .build();

      // Construct the job creation request to be sent by the client.
      CreateDlpJobRequest createDlpJobRequest =
          CreateDlpJobRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .setInspectJob(inspectJobConfig)
              .build();

      // Send the job creation request and process the response.
      DlpJob createdDlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest);
      System.out.println("Job created successfully: " + createdDlpJob.getName());
    }
  }
}

新しいジョブトリガーを作成する

新しい Cloud DLP ジョブトリガーを作成するには、次のようにします。

Console

  1. Google Cloud コンソールで、[データ損失防止] ページに移動します。

    [データ損失防止] に移動

  2. [検査] タブをクリックし、[ジョブとジョブトリガーを作成] をクリックします。

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

    新しいジョブトリガーを作成

[ジョブトリガーを作成] ページには次のセクションがあります。

入力データを選択

名前

ジョブトリガーの名前を入力します。文字、数字、ハイフンを使用できます。 ジョブトリガーの名前は省略可能です。名前を入力しない場合、Cloud DLP はジョブまたはジョブトリガーに一意の番号識別子を付与します。

場所

[ストレージの種類] メニューで、スキャンするデータが保存されているリポジトリの種類を選択します。

  • Cloud Storage: スキャンするバケットの URL を入力します。または、[ロケーション タイプ] メニューから [含める / 含めない] を選択した後、[BROWSE] をクリックしてスキャン対象のバケットまたはサブフォルダに移動します。指定したディレクトリとそこに含まれるすべてのディレクトリをスキャンするには、[フォルダを再帰的にスキャンする] チェックボックスをオンにします。下位ディレクトリを対象にせず、指定したディレクトリだけをスキャンする場合は、このチェックボックスはオフのままにします。
  • BigQuery: スキャンするプロジェクト、データセット、テーブルの識別子を入力します。
  • Datastore: スキャンするプロジェクト、名前空間(省略可能)、種類の識別子を入力します。

サンプリング

サンプリングは、大量のデータがある場合にリソースを節約するオプションの方法です。

[サンプリング] では、選択したすべてのデータをスキャンするか、特定の割合のデータだけをスキャンしてサンプリングを行うかを選択できます。サンプリングは、スキャンするストレージ リポジトリの種類によって動作が異なります。

  • BigQuery の場合、スキャンに含めるように指定したファイルの割合に応じて、選択された合計行数のサブセットをサンプリングします。
  • Cloud Storage の場合、[1 ファイルあたりのスキャンの最大バイト数] で指定したサイズを超えるファイルについては、その最大サイズまでスキャンしてから次のファイルに進みます。

サンプリングを有効にするには、最初のメニューで、以下のいずれかのオプションを選択します。

  • 上からサンプリングを開始する: データの先頭から部分スキャンが開始されます。BigQuery の場合、最初の行からスキャンが開始されます。Cloud Storage の場合、各ファイルの先頭からスキャンが開始され、指定された最大ファイルサイズまでスキャンするとスキャンが停止します(上記参照)。
  • ランダム スタートからサンプリングを開始する: データ内のランダムな場所から部分スキャンが開始されます。BigQuery の場合、ランダムな行からスキャンが開始されます。Cloud Storage の場合、この設定は、指定された最大サイズを超えるファイルにのみ適用されます。最大ファイルサイズ未満のファイルは全体がスキャンされ、最大ファイルサイズを超えるファイルは最大サイズまでスキャンされます。

部分スキャンを実行するには、データのうち何パーセントをスキャンするかを指定する必要があります。スライダーを使って割合を設定します。

詳細構成

Cloud Storage バケットまたは BigQuery テーブルのスキャン ジョブトリガーを作成する際に、詳細構成を指定して検索を絞り込むことができます。具体的には、以下を構成できます。

  • ファイル(Cloud Storage のみ): スキャンするファイルの種類。テキスト、バイナリ、画像ファイルを含めることができます。
  • 識別フィールド(BigQuery のみ): テーブル内で一意の行識別子。
  • Cloud Storage の場合、[1 ファイルあたりのスキャンの最大バイト数] で指定したサイズを超えるファイルについては、その最大サイズまでスキャンしてから次のファイルに進みます。

サンプリングを有効にするには、データのうち何パーセントをスキャンするかを指定する必要があります。スライダーを使って割合を設定します。次に、最初のメニューで、以下のいずれかのオプションを選択します。

  • 上からサンプリングを開始する: データの先頭から部分スキャンが開始されます。BigQuery の場合、最初の行からスキャンが開始されます。Cloud Storage の場合、各ファイルの先頭からスキャンが開始され、指定された最大ファイルサイズまでスキャンするとスキャンが停止します(上記参照)。
  • ランダム スタートからサンプリングを開始する: データ内のランダムな場所から部分スキャンが開始されます。BigQuery の場合、ランダムな行からスキャンが開始されます。Cloud Storage の場合、この設定は、指定された最大サイズを超えるファイルにのみ適用されます。最大ファイルサイズ未満のファイルは全体がスキャンされ、最大ファイルサイズを超えるファイルは最大サイズまでスキャンされます。

ファイル

Cloud Storage に保存されているファイルの場合は、[ファイル] でスキャンに含めるファイルの種類を指定できます。

バイナリ、テキスト、画像、Microsoft Word、Microsoft Excel、Microsoft PowerPoint、PDF、Apache Avro ファイルから選択できます。Cloud Storage バケット内で Cloud DLP がスキャンできるファイル拡張子の完全なリストについては、FileType をご覧ください。[バイナリ] を選択すると、Cloud DLP で認識されない形式のファイルをスキャンできます。

識別フィールド

BigQuery のテーブルの場合、[識別フィールド] フィールドで、テーブルの主キー列の値を結果に含めるように Cloud DLP に指示できます。こうすることで、検出結果が含まれるテーブルの行に検索結果をリンクできます。

テーブル内の各行を一意に識別する列の名前を入力します。必要に応じて、ドット表記を使用して、ネストされたフィールドを指定します。追加できるフィールドの数に制限はありません。

検出結果を BigQuery にエクスポートするには、[BigQuery に保存] アクションも有効にする必要があります。検出結果が BigQuery にエクスポートされると、各検出結果には識別フィールドのそれぞれの値が含まれます。詳細については、identifyingFields をご覧ください。

検出を構成する

[検出の設定] セクションでは、スキャン対象のセンシティブ データの種類を指定します。このセクションは省略可能です。このセクションをスキップすると、Cloud DLP はデフォルトの infoType のセットのデータをスキャンします。

テンプレート

Cloud DLP テンプレートを使用して、以前に指定した構成情報を再利用することもできます。

使用するテンプレートをすでに作成している場合は、[テンプレート名] フィールドをクリックして既存の検査テンプレートのリストを表示します。使用するテンプレートの名前を選択または入力します。

テンプレートの作成について詳しくは、Cloud DLP 検査テンプレートの作成をご覧ください。

infoType

infoType 検出器は、特定の型の機密データを検出します。たとえば、Cloud DLP 組み込みの US_SOCIAL_SECURITY_NUMBER infoType 検出器では、米国社会保障番号が検出されます。組み込みの infoType 検出器に加えて、独自のカスタム infoType 検出器を作成できます。

[InfoType] で、スキャンするデータ型に対応する infoType 検出器を選択します。このフィールドを空白のままにして、デフォルトのすべての infoTypes をスキャン対象にすることもできます。それぞれの検出器の詳細については、InfoType 検出器リファレンスをご覧ください。

また、[カスタム infoType] セクションでカスタム infoType 検出器を追加し、[検査ルールセット] セクションで組み込みとカスタムの両方の infoType 検出器をカスタマイズできます。

カスタム infoType

To add a custom infoType detector, do the following:

  1. Click Add custom infoType.
  2. Choose the type of custom infoType detector you want to create:
    • Words or phrases: Matches on one or more words or phrases that you enter into the field. Use this custom infoType when you have just a few words or phrases to search for. Give your custom infoType a name, and then, under List of words or phrases, type the word or phrase you want Cloud DLP to match on. To search on multiple words or phrases, press Enter after each one. For more information, see Creating a regular custom dictionary detector.
    • Dictionary path: Searches your content for items in a list of words and phrases. The list is stored in a text file in Cloud Storage. Use this custom infoType when you have anywhere from a few to several hundred thousand words or phrases to search for. This method is also useful if your list contains sensitive elements and you don't want to store them inside of a job or template. Give your custom infoType a name, and then, under Dictionary location, enter or browse to the Cloud Storage path where the dictionary file is stored. For more information, see Creating a regular custom dictionary detector.
    • Regex: Matches content based on a regular expression. Give your custom infoType a name, and then, in the Regex field, enter a regex pattern to match words and phrases. See the supported regex syntax.
    • Stored infoType: This option adds a stored custom dictionary detector, which is a kind of dictionary detector that is built from either a large text file stored in Cloud Storage or a single column of a BigQuery table. Use this kind of custom infoType when you have anywhere from several hundred thousand to tens of millions of words or phrases to search for. Be aware that this is the only option in this menu for which you must have already created the stored infoType to use it. Give your custom infoType a name (different from the name you gave the stored infoType), and then, in the Stored infoType field, enter the name of the stored infoType. For more information about creating stored custom dictionaries, see Creating a stored custom dictionary detector.

Click Add custom infoType again to add additional custom infoType detectors.

検査ルールセット

Inspection rulesets allow you to customize both built-in and custom infoType detectors using context rules. The two types of inspection rules are:

To add a new ruleset, first specify one or more built-in or custom infoType detectors in the InfoTypes section. These are the infoType detectors that your rulesets will be modifying. Then, do the following:

  1. Click in the Choose infoTypes field. The infoType or infoTypes you specified previously appear below the field in a menu, as shown here:
  2. Screenshot of the DLP UI's inspection rulesets configuration.
  3. Choose an infoType from the menu, and then click Add rule. A menu appears with the two options Hotword rule and Exclusion rule.

For hotword rules, choose Hotword rules. Then, do the following:

  1. In the Hotword field, enter a regular expression that Cloud DLP should look for.
  2. From the Hotword proximity menu, choose whether the hotword you entered is found before or after the chosen infoType.
  3. In Hotword distance from infoType, enter the approximate number of characters between the hotword and the chosen infoType.
  4. In Confidence level adjustment, choose whether to assign matches a fixed likelihood level, or to increase or decrease the default likelihood level by a certain amount.

For exclusion rules, choose Exclusion rules. Then, do the following:

  1. In the Exclude field, enter a regular expression (regex) that Cloud DLP should look for.
  2. From the Matching type menu, choose one of the following:
    • Full match: The finding must completely match the regex.
    • Partial match: A substring of the finding can match the regex.
    • Inverse match: The finding doesn't match the regex.

You can add additional hotword or exclusion rules and rulesets to further refine your scan results.

信頼度のしきい値

Cloud DLP で機密データの一致候補が検出されるたびに、可能性の値が「かなり低い」から「かなり高い」までの尺度で割り当てられます。ここで可能性の値を設定すると、Cloud DLP ではその設定に従って、その可能性の値以上のデータの一致のみが検出されます。

「可能性あり」はデフォルト値で、ほとんどの用途に十分対応できます。検出される一致が常に、あまりに広範に及ぶ場合は、スライダーを右に動かしてください。一致が少なすぎる場合は、スライダーを左に動かしてください。

設定が完了したら、[続行] をクリックします。

アクションの追加

[アクションの追加] には、ジョブの完了後に実行させるアクションを 1 つ以上選択します。

次のアクションを構成できます。

  • BigQuery に保存: DLP ジョブの結果を BigQuery テーブルに保存します。結果の表示や分析を行う前に、ジョブが完了していることを確認します。

    スキャンが実行されるたびに、Cloud DLP は指定された BigQuery テーブルにスキャンの検出結果を保存します。エクスポートされた知見には、各知見の場所と一致の可能性に関する詳細が含まれています。検出結果に infoType 検出器に一致する文字列を含めるには、[見積もりを含める] オプションを有効にします。

    テーブル ID を指定しなければ、スキャンの最初の実行時に BigQuery によってデフォルトの名前が新しいテーブルに割り当てられます。既存のテーブルを指定した場合、Cloud DLP はスキャンの検出結果をそのデーブルに追加します。

    検出結果を BigQuery に保存しない場合、スキャン結果には検出結果の数と infoType に関する統計情報のみが含まれます。

    データが BigQuery テーブルに書き込まれると、課金と割り当て使用量は、宛先テーブルが含まれるプロジェクトに適用されます。

  • Pub/Sub に公開: DLP ジョブの名前を属性として含む通知を Pub/Sub チャネルに公開します。通知メッセージの送信先にするトピックを 1 つ以上指定できます。スキャンジョブを実行する Cloud DLP サービス アカウントに、トピックに対する公開アクセス権があることを確認します。

  • Publish Command Center に公開: ジョブの結果の概要を Security Command Center に公開します。詳細については、Cloud DLP スキャンの結果を Security Command Center に送信するをご覧ください。

  • Dataplex に公開: ジョブの結果を Google Cloud のメタデータ管理サービスである Dataplex に送信します。

  • メールで通知: ジョブが完了したときにメールを送信します。メールは IAM プロジェクト オーナーと技術的な重要な連絡先の技術担当者に送信されます。

  • Cloud Monitoring への公開: 検査結果を Google Cloud のオペレーション スイートの Cloud Monitoring に送信します。

  • 匿名化されたコピーを作成する: 検査されたデータのすべての検出結果を匿名化し、匿名化されたコンテンツを新しいファイルに書き込みます。その後、機密情報を含むデータの代わりに、匿名化されたコピーをビジネス プロセスで使用できます。詳細については、Google Cloud コンソールで Cloud DLP を使用して Cloud Storage データの匿名化コピーを作成するをご覧ください。

詳しくは、アクションをご覧ください。

アクションを選択し終えたら、[続行] をクリックします。

スケジュール

[スケジュール] セクションでは、次の 2 つのことが行えます。

  • 期間を指定: このオプションを選択すると、スキャンするファイルまたは行が日付で制限されます。[開始時刻] をクリックして、対象に含めるファイルの一番古いタイムスタンプを指定します。すべてのファイルを指定するには、この値を空白のままにします。[終了時刻] をクリックして、対象に含めるファイルの一番新しいタイムスタンプを指定します。タイムスタンプの上限を指定しない場合は、この値を空白のままにします。
  • 周期スケジュールでジョブを実行するトリガーを作成: このオプションを選択すると、ジョブトリガーが作成され、周期スケジュールで指定したジョブを実行するように設定されます。デフォルト値は最小値の「24 時間」、最大値は「60 日」です。Cloud DLP に新しいファイルまたは行のみをスキャンさせるには、[スキャンを新しいコンテンツのみに制限する] を選択します。

確認

[確認] セクションには、指定したジョブ設定の概要が JSON 形式で表示されます。

[作成] をクリックして、ジョブトリガーを作成します(スケジュールを指定した場合)。ジョブトリガーの情報ページが開き、ステータスとその他の情報が表示されます。現在実行中のジョブがあれば、[キャンセル] ボタンをクリックして停止できます。[削除] をクリックしてジョブトリガーを削除することもできます。

Cloud DLP のメインページに戻るには、Google Cloud コンソールの戻る矢印をクリックします。

プロトコル

ジョブトリガーは、DLP API で JobTrigger リソースによって表現されます。新しいジョブトリガーを作成するには、JobTrigger リソースの projects.jobTriggers.create メソッドを使用します。

このサンプル JSON は、POST リクエストによって、指定された Cloud DLP REST エンドポイントに送信できます。このサンプル JSON では、Cloud DLP でジョブトリガーを作成する方法を示します。このトリガーが開始するジョブは Datastore 検査スキャンです。作成されたジョブトリガーは、86,400 秒(24 時間)ごとに実行されます。

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。リクエストが API Explorer で作成された場合でも、リクエストが正常な場合は、スケジュールされたジョブトリガーが新規に作成されることに注意してください。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

JSON 入力:

{
  "jobTrigger":{
    "displayName":"JobTrigger1",
    "description":"Starts a DLP scan job of a Datastore kind",
    "triggers":[
      {
        "schedule":{
          "recurrencePeriodDuration":"86400s"
        }
      }
    ],
    "status":"HEALTHY",
    "inspectJob":{
      "storageConfig":{
        "datastoreOptions":{
          "kind":{
            "name":"Example-Kind"
          },
          "partitionId":{
            "projectId":"[PROJECT_ID]",
            "namespaceId":"[NAMESPACE_ID]"
          }
        }
      },
      "inspectConfig":{
        "infoTypes":[
          {
            "name":"PHONE_NUMBER"
          }
        ],
        "excludeInfoTypes":false,
        "includeQuote":true,
        "minLikelihood":"LIKELY"
      },
      "actions":[
        {
          "saveFindings":{
            "outputConfig":{
              "table":{
                "projectId":"[PROJECT_ID]",
                "datasetId":"[BIGQUERY_DATASET_NAME]",
                "tableId":"[BIGQUERY_TABLE_NAME]"
              }
            }
          }
        }
      ]
    }
  }
}

JSON 出力:

次の出力は、ジョブトリガーが正常に作成されたことを示しています。

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "displayName":"JobTrigger1",
  "description":"Starts a DLP scan job of a Datastore kind",
  "inspectJob":{
    "storageConfig":{
      "datastoreOptions":{
        "partitionId":{
          "projectId":"[PROJECT_ID]",
          "namespaceId":"[NAMESPACE_ID]"
        },
        "kind":{
          "name":"Example-Kind"
        }
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"PHONE_NUMBER"
        }
      ],
      "minLikelihood":"LIKELY",
      "limits":{

      },
      "includeQuote":true
    },
    "actions":[
      {
        "saveFindings":{
          "outputConfig":{
            "table":{
              "projectId":"[PROJECT_ID]",
              "datasetId":"[BIGQUERY_DATASET_NAME]",
              "tableId":"[BIGQUERY_TABLE_NAME]"
            }
          }
        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2018-11-30T01:52:41.171857Z",
  "updateTime":"2018-11-30T01:52:41.171857Z",
  "status":"HEALTHY"
}

Java

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.CloudStorageOptions;
import com.google.privacy.dlp.v2.CreateJobTriggerRequest;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.InspectJobConfig;
import com.google.privacy.dlp.v2.JobTrigger;
import com.google.privacy.dlp.v2.LocationName;
import com.google.privacy.dlp.v2.Schedule;
import com.google.privacy.dlp.v2.StorageConfig;
import com.google.privacy.dlp.v2.StorageConfig.TimespanConfig;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class TriggersCreate {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String gcsPath = "gs://" + "your-bucket-name" + "path/to/file.txt";
    createTrigger(projectId, gcsPath);
  }

  public static void createTrigger(String projectId, String gcsPath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Set autoPopulateTimespan to true to scan only new content
      boolean autoPopulateTimespan = true;
      TimespanConfig timespanConfig =
          TimespanConfig.newBuilder()
              .setEnableAutoPopulationOfTimespanConfig(autoPopulateTimespan)
              .build();

      // Specify the GCS file to be inspected.
      CloudStorageOptions cloudStorageOptions =
          CloudStorageOptions.newBuilder()
              .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(gcsPath))
              .build();
      StorageConfig storageConfig =
          StorageConfig.newBuilder()
              .setCloudStorageOptions(cloudStorageOptions)
              .setTimespanConfig(timespanConfig)
              .build();

      // Specify the type of info the inspection will look for.
      // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types
      List<InfoType> infoTypes =
          Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER")
              .map(it -> InfoType.newBuilder().setName(it).build())
              .collect(Collectors.toList());

      InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build();

      // Configure the inspection job we want the service to perform.
      InspectJobConfig inspectJobConfig =
          InspectJobConfig.newBuilder()
              .setInspectConfig(inspectConfig)
              .setStorageConfig(storageConfig)
              .build();

      // Set scanPeriod to the number of days between scans (minimum: 1 day)
      int scanPeriod = 1;

      // Optionally set a display name of max 100 chars and a description of max 250 chars
      String displayName = "Daily Scan";
      String description = "A daily inspection for personally identifiable information.";

      // Schedule scan of GCS bucket every scanPeriod number of days (minimum = 1 day)
      Duration duration = Duration.newBuilder().setSeconds(scanPeriod * 24 * 3600).build();
      Schedule schedule = Schedule.newBuilder().setRecurrencePeriodDuration(duration).build();
      JobTrigger.Trigger trigger = JobTrigger.Trigger.newBuilder().setSchedule(schedule).build();
      JobTrigger jobTrigger =
          JobTrigger.newBuilder()
              .setInspectJob(inspectJobConfig)
              .setDisplayName(displayName)
              .setDescription(description)
              .setStatus(JobTrigger.Status.HEALTHY)
              .addTriggers(trigger)
              .build();

      // Create scan request to be sent by client
      CreateJobTriggerRequest createJobTriggerRequest =
          CreateJobTriggerRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .setJobTrigger(jobTrigger)
              .build();

      // Send the scan request and process the response
      JobTrigger createdJobTrigger = dlpServiceClient.createJobTrigger(createJobTriggerRequest);

      System.out.println("Created Trigger: " + createdJobTrigger.getName());
      System.out.println("Display Name: " + createdJobTrigger.getDisplayName());
      System.out.println("Description: " + createdJobTrigger.getDescription());
    }
  }
}

Node.js

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project';

// (Optional) The name of the trigger to be created.
// const triggerId = 'my-trigger';

// (Optional) A display name for the trigger to be created
// const displayName = 'My Trigger';

// (Optional) A description for the trigger to be created
// const description = "This is a sample trigger.";

// The name of the bucket to scan.
// const bucketName = 'YOUR-BUCKET';

// Limit scan to new content only.
// const autoPopulateTimespan = true;

// How often to wait between scans, in days (minimum = 1 day)
// const scanPeriod = 1;

// The infoTypes of information to match
// const infoTypes = [{ name: 'PHONE_NUMBER' }, { name: 'EMAIL_ADDRESS' }, { name: 'CREDIT_CARD_NUMBER' }];

// The minimum likelihood required before returning a match
// const minLikelihood = 'LIKELIHOOD_UNSPECIFIED';

// The maximum number of findings to report per request (0 = server maximum)
// const maxFindings = 0;

async function createTrigger() {
  // Get reference to the bucket to be inspected
  const storageItem = {
    cloudStorageOptions: {
      fileSet: {url: `gs://${bucketName}/*`},
    },
    timeSpanConfig: {
      enableAutoPopulationOfTimespanConfig: autoPopulateTimespan,
    },
  };

  // Construct job to be triggered
  const job = {
    inspectConfig: {
      infoTypes: infoTypes,
      minLikelihood: minLikelihood,
      limits: {
        maxFindingsPerRequest: maxFindings,
      },
    },
    storageConfig: storageItem,
  };

  // Construct trigger creation request
  const request = {
    parent: `projects/${projectId}/locations/global`,
    jobTrigger: {
      inspectJob: job,
      displayName: displayName,
      description: description,
      triggers: [
        {
          schedule: {
            recurrencePeriodDuration: {
              seconds: scanPeriod * 60 * 60 * 24, // Trigger the scan daily
            },
          },
        },
      ],
      status: 'HEALTHY',
    },
    triggerId: triggerId,
  };

  // Run trigger creation request
  const [trigger] = await dlp.createJobTrigger(request);
  console.log(`Successfully created trigger ${trigger.name}.`);
}

createTrigger();

Python

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

def create_trigger(
    project,
    bucket,
    scan_period_days,
    info_types,
    trigger_id=None,
    display_name=None,
    description=None,
    min_likelihood=None,
    max_findings=None,
    auto_populate_timespan=False,
):
    """Creates a scheduled Data Loss Prevention API inspect_content trigger.
    Args:
        project: The Google Cloud project id to use as a parent resource.
        bucket: The name of the GCS bucket to scan. This sample scans all
            files in the bucket using a wildcard.
        scan_period_days: How often to repeat the scan, in days.
            The minimum is 1 day.
        info_types: A list of strings representing info types to look for.
            A full list of info type categories can be fetched from the API.
        trigger_id: The id of the trigger. If omitted, an id will be randomly
            generated.
        display_name: The optional display name of the trigger.
        description: The optional description of the trigger.
        min_likelihood: A string representing the minimum likelihood threshold
            that constitutes a match. One of: 'LIKELIHOOD_UNSPECIFIED',
            'VERY_UNLIKELY', 'UNLIKELY', 'POSSIBLE', 'LIKELY', 'VERY_LIKELY'.
        max_findings: The maximum number of findings to report; 0 = no maximum.
        auto_populate_timespan: Automatically populates time span config start
            and end times in order to scan new content only.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Prepare info_types by converting the list of strings into a list of
    # dictionaries (protos are also accepted).
    info_types = [{"name": info_type} for info_type in info_types]

    # Construct the configuration dictionary. Keys which are None may
    # optionally be omitted entirely.
    inspect_config = {
        "info_types": info_types,
        "min_likelihood": min_likelihood,
        "limits": {"max_findings_per_request": max_findings},
    }

    # Construct a cloud_storage_options dictionary with the bucket's URL.
    url = "gs://{}/*".format(bucket)
    storage_config = {
        "cloud_storage_options": {"file_set": {"url": url}},
        # Time-based configuration for each storage object.
        "timespan_config": {
            # Auto-populate start and end times in order to scan new objects
            # only.
            "enable_auto_population_of_timespan_config": auto_populate_timespan
        },
    }

    # Construct the job definition.
    job = {"inspect_config": inspect_config, "storage_config": storage_config}

    # Construct the schedule definition:
    schedule = {
        "recurrence_period_duration": {"seconds": scan_period_days * 60 * 60 * 24}
    }

    # Construct the trigger definition.
    job_trigger = {
        "inspect_job": job,
        "display_name": display_name,
        "description": description,
        "triggers": [{"schedule": schedule}],
        "status": google.cloud.dlp_v2.JobTrigger.Status.HEALTHY,
    }

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Call the API.
    response = dlp.create_job_trigger(
        request={"parent": parent, "job_trigger": job_trigger, "trigger_id": trigger_id}
    )

    print("Successfully created trigger {}".format(response.name))

Go

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"cloud.google.com/go/dlp/apiv2/dlppb"
	"github.com/golang/protobuf/ptypes/duration"
)

// createTrigger creates a trigger with the given configuration.
func createTrigger(w io.Writer, projectID string, triggerID, displayName, description, bucketName string, infoTypeNames []string) error {
	// projectID := "my-project-id"
	// triggerID := "my-trigger"
	// displayName := "My Trigger"
	// description := "My trigger description"
	// bucketName := "my-bucket"
	// infoTypeNames := []string{"US_SOCIAL_SECURITY_NUMBER"}

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}
	defer client.Close()

	// Convert the info type strings to a list of InfoTypes.
	var infoTypes []*dlppb.InfoType
	for _, it := range infoTypeNames {
		infoTypes = append(infoTypes, &dlppb.InfoType{Name: it})
	}

	// Create a configured request.
	req := &dlppb.CreateJobTriggerRequest{
		Parent:    fmt.Sprintf("projects/%s/locations/global", projectID),
		TriggerId: triggerID,
		JobTrigger: &dlppb.JobTrigger{
			DisplayName: displayName,
			Description: description,
			Status:      dlppb.JobTrigger_HEALTHY,
			// Triggers control when the job will start.
			Triggers: []*dlppb.JobTrigger_Trigger{
				{
					Trigger: &dlppb.JobTrigger_Trigger_Schedule{
						Schedule: &dlppb.Schedule{
							Option: &dlppb.Schedule_RecurrencePeriodDuration{
								RecurrencePeriodDuration: &duration.Duration{
									Seconds: 10 * 60 * 60 * 24, // 10 days in seconds.
								},
							},
						},
					},
				},
			},
			// Job configures the job to run when the trigger runs.
			Job: &dlppb.JobTrigger_InspectJob{
				InspectJob: &dlppb.InspectJobConfig{
					InspectConfig: &dlppb.InspectConfig{
						InfoTypes:     infoTypes,
						MinLikelihood: dlppb.Likelihood_POSSIBLE,
						Limits: &dlppb.InspectConfig_FindingLimits{
							MaxFindingsPerRequest: 10,
						},
					},
					StorageConfig: &dlppb.StorageConfig{
						Type: &dlppb.StorageConfig_CloudStorageOptions{
							CloudStorageOptions: &dlppb.CloudStorageOptions{
								FileSet: &dlppb.CloudStorageOptions_FileSet{
									Url: "gs://" + bucketName + "/*",
								},
							},
						},
						// Time-based configuration for each storage object. See more at
						// https://cloud.google.com/dlp/docs/reference/rest/v2/InspectJobConfig#TimespanConfig
						TimespanConfig: &dlppb.StorageConfig_TimespanConfig{
							// Auto-populate start and end times in order to scan new objects only.
							EnableAutoPopulationOfTimespanConfig: true,
						},
					},
				},
			},
		},
	}

	// Send the request.
	resp, err := client.CreateJobTrigger(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateJobTrigger: %v", err)
	}
	fmt.Fprintf(w, "Successfully created trigger: %v", resp.GetName())
	return nil
}

PHP

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

use Google\Cloud\Dlp\V2\DlpServiceClient;
use Google\Cloud\Dlp\V2\JobTrigger;
use Google\Cloud\Dlp\V2\JobTrigger\Trigger;
use Google\Cloud\Dlp\V2\JobTrigger\Status;
use Google\Cloud\Dlp\V2\InspectConfig;
use Google\Cloud\Dlp\V2\InspectJobConfig;
use Google\Cloud\Dlp\V2\Schedule;
use Google\Cloud\Dlp\V2\CloudStorageOptions;
use Google\Cloud\Dlp\V2\CloudStorageOptions_FileSet;
use Google\Cloud\Dlp\V2\StorageConfig;
use Google\Cloud\Dlp\V2\StorageConfig_TimespanConfig;
use Google\Cloud\Dlp\V2\InfoType;
use Google\Cloud\Dlp\V2\Likelihood;
use Google\Cloud\Dlp\V2\InspectConfig\FindingLimits;
use Google\Protobuf\Duration;

/**
 * Create a Data Loss Prevention API job trigger.
 *
 * @param string $callingProjectId     The project ID to run the API call under
 * @param string $bucketName           The name of the bucket to scan
 * @param string $triggerId            (Optional) The name of the trigger to be created
 * @param string $displayName          (Optional) The human-readable name to give the trigger
 * @param string $description          (Optional) A description for the trigger to be created
 * @param int    $scanPeriod           (Optional) How often to wait between scans, in days (minimum = 1 day)
 * @param bool   $autoPopulateTimespan (Optional) Automatically limit scan to new content only
 * @param int    $maxFindings          (Optional) The maximum number of findings to report per request (0 = server maximum)
 */
function create_trigger(
    string $callingProjectId,
    string $bucketName,
    string $triggerId = '',
    string $displayName = '',
    string $description = '',
    int $scanPeriod = 0,
    bool $autoPopulateTimespan = false,
    int $maxFindings = 0
): void {
    // Instantiate a client.
    $dlp = new DlpServiceClient();

    // ----- Construct job config -----
    // The infoTypes of information to match
    $personNameInfoType = (new InfoType())
        ->setName('PERSON_NAME');
    $phoneNumberInfoType = (new InfoType())
        ->setName('PHONE_NUMBER');
    $infoTypes = [$personNameInfoType, $phoneNumberInfoType];

    // The minimum likelihood required before returning a match
    $minLikelihood = likelihood::LIKELIHOOD_UNSPECIFIED;

    // Specify finding limits
    $limits = (new FindingLimits())
        ->setMaxFindingsPerRequest($maxFindings);

    // Create the inspectConfig object
    $inspectConfig = (new InspectConfig())
        ->setMinLikelihood($minLikelihood)
        ->setLimits($limits)
        ->setInfoTypes($infoTypes);

    // Create triggers
    $duration = (new Duration())
        ->setSeconds($scanPeriod * 60 * 60 * 24);

    $schedule = (new Schedule())
        ->setRecurrencePeriodDuration($duration);

    $triggerObject = (new Trigger())
        ->setSchedule($schedule);

    // Create the storageConfig object
    $fileSet = (new CloudStorageOptions_FileSet())
        ->setUrl('gs://' . $bucketName . '/*');

    $storageOptions = (new CloudStorageOptions())
        ->setFileSet($fileSet);

    // Auto-populate start and end times in order to scan new objects only.
    $timespanConfig = (new StorageConfig_TimespanConfig())
        ->setEnableAutoPopulationOfTimespanConfig($autoPopulateTimespan);

    $storageConfig = (new StorageConfig())
        ->setCloudStorageOptions($storageOptions)
        ->setTimespanConfig($timespanConfig);

    // Construct the jobConfig object
    $jobConfig = (new InspectJobConfig())
        ->setInspectConfig($inspectConfig)
        ->setStorageConfig($storageConfig);

    // ----- Construct trigger object -----
    $jobTriggerObject = (new JobTrigger())
        ->setTriggers([$triggerObject])
        ->setInspectJob($jobConfig)
        ->setStatus(Status::HEALTHY)
        ->setDisplayName($displayName)
        ->setDescription($description);

    // Run trigger creation request
    $parent = "projects/$callingProjectId/locations/global";
    $trigger = $dlp->createJobTrigger($parent, $jobTriggerObject, [
        'triggerId' => $triggerId
    ]);

    // Print results
    printf('Successfully created trigger %s' . PHP_EOL, $trigger->getName());
}

C#

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dlp.V2;
using System;
using System.Collections.Generic;
using static Google.Cloud.Dlp.V2.CloudStorageOptions.Types;
using static Google.Cloud.Dlp.V2.InspectConfig.Types;
using static Google.Cloud.Dlp.V2.JobTrigger.Types;
using static Google.Cloud.Dlp.V2.StorageConfig.Types;

public class TriggersCreate
{
    public static JobTrigger Create(
        string projectId,
        string bucketName,
        Likelihood minLikelihood,
        int maxFindings,
        bool autoPopulateTimespan,
        int scanPeriod,
        IEnumerable<InfoType> infoTypes,
        string triggerId,
        string displayName,
        string description)
    {
        var dlp = DlpServiceClient.Create();

        var jobConfig = new InspectJobConfig
        {
            InspectConfig = new InspectConfig
            {
                MinLikelihood = minLikelihood,
                Limits = new FindingLimits
                {
                    MaxFindingsPerRequest = maxFindings
                },
                InfoTypes = { infoTypes }
            },
            StorageConfig = new StorageConfig
            {
                CloudStorageOptions = new CloudStorageOptions
                {
                    FileSet = new FileSet
                    {
                        Url = $"gs://{bucketName}/*"
                    }
                },
                TimespanConfig = new TimespanConfig
                {
                    EnableAutoPopulationOfTimespanConfig = autoPopulateTimespan
                }
            }
        };

        var jobTrigger = new JobTrigger
        {
            Triggers =
            {
                new Trigger
                {
                    Schedule = new Schedule
                    {
                        RecurrencePeriodDuration = new Google.Protobuf.WellKnownTypes.Duration
                        {
                            Seconds = scanPeriod * 60 * 60 * 24
                        }
                    }
                }
            },
            InspectJob = jobConfig,
            Status = Status.Healthy,
            DisplayName = displayName,
            Description = description
        };

        var response = dlp.CreateJobTrigger(
            new CreateJobTriggerRequest
            {
                Parent = new LocationName(projectId, "global").ToString(),
                JobTrigger = jobTrigger,
                TriggerId = triggerId
            });

        Console.WriteLine($"Successfully created trigger {response.Name}");
        return response;
    }
}

すべてのジョブを一覧表示する

現在のプロジェクトのすべてのジョブを一覧表示するには:

Console

  1. Google Cloud コンソールで、[データ損失防止] ページに移動します。

    [データ損失防止] に移動

  2. [検査] タブをクリックしてから、[検査ジョブ] サブクラスをクリックします。

コンソールに、現在のプロジェクトのすべてのジョブのリスト(ジョブの識別子、状態、作成時間、終了時間を含む)が表示されます。ジョブの識別子をクリックすると、ジョブの詳細情報と結果の概要が表示されます。

プロトコル

DlpJob リソースの projects.dlpJobs.list メソッドを使用すると、すべてのジョブを一覧表示できます。

プロジェクトで現在定義されているすべてのジョブを一覧表示するには、以下に示すように、GET リクエストを dlpJobs エンドポイントに送信します。

URL:

GET https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/dlpJobs?key={YOUR_API_KEY}

次の JSON 出力は、返されたジョブのうちの 1 つを示しています。ジョブの構造は DlpJob リソースの構造をそのまま反映しています。

JSON 出力:

{
  "jobs":[
    {
      "name":"projects/[PROJECT-ID]/dlpJobs/i-5270277269264714623",
      "type":"INSPECT_JOB",
      "state":"DONE",
      "inspectDetails":{
        "requestedOptions":{
          "snapshotInspectTemplate":{
          },
          "jobConfig":{
            "storageConfig":{
              "cloudStorageOptions":{
                "fileSet":{
                  "url":"[CLOUD-STORAGE-URL]"
                },
                "fileTypes":[
                  "FILE_TYPE_UNSPECIFIED"
                ],
                "filesLimitPercent":100
              },
              "timespanConfig":{
                "startTime":"2019-09-08T22:43:16.623Z",
                "enableAutoPopulationOfTimespanConfig":true
              }
            },
            "inspectConfig":{
              "infoTypes":[
                {
                  "name":"US_SOCIAL_SECURITY_NUMBER"
                },
                {
                  "name":"CANADA_SOCIAL_INSURANCE_NUMBER"
                }
              ],
              "minLikelihood":"LIKELY",
              "limits":{
              },
              "includeQuote":true
            },
            "actions":[
              {
                "saveFindings":{
                  "outputConfig":{
                    "table":{
                      "projectId":"[PROJECT-ID]",
                      "datasetId":"[DATASET-ID]",
                      "tableId":"[TABLE-ID]"
                    }
                  }
                }
              }
            ]
          }
        },
        "result":{
          ...
        }
      },
      "createTime":"2019-09-09T22:43:16.918Z",
      "startTime":"2019-09-09T22:43:16.918Z",
      "endTime":"2019-09-09T22:43:53.091Z",
      "jobTriggerName":"projects/[PROJECT-ID]/jobTriggers/sample-trigger2"
    },
    ...

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

Java

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DlpJob;
import com.google.privacy.dlp.v2.DlpJobType;
import com.google.privacy.dlp.v2.ListDlpJobsRequest;
import com.google.privacy.dlp.v2.LocationName;
import java.io.IOException;

public class JobsList {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    listJobs(projectId);
  }

  // Lists DLP jobs
  public static void listJobs(String projectId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Construct the request to be sent by the client.
      // For more info on filters and job types,
      // see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
      ListDlpJobsRequest listDlpJobsRequest =
          ListDlpJobsRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .setFilter("state=DONE")
              .setType(DlpJobType.valueOf("INSPECT_JOB"))
              .build();

      // Send the request to list jobs and process the response
      DlpServiceClient.ListDlpJobsPagedResponse response =
          dlpServiceClient.listDlpJobs(listDlpJobsRequest);

      System.out.println("DLP jobs found:");
      for (DlpJob dlpJob : response.getPage().getValues()) {
        System.out.println(dlpJob.getName() + " -- " + dlpJob.getState());
      }
    }
  }
}

Node.js

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project';

// The filter expression to use
// For more information and filter syntax, see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
// const filter = `state=DONE`;

// The type of job to list (either 'INSPECT_JOB' or 'RISK_ANALYSIS_JOB')
// const jobType = 'INSPECT_JOB';
async function listJobs() {
  // Construct request for listing DLP scan jobs
  const request = {
    parent: `projects/${projectId}/locations/global`,
    filter: filter,
    type: jobType,
  };

  // Run job-listing request
  const [jobs] = await dlp.listDlpJobs(request);
  jobs.forEach(job => {
    console.log(`Job ${job.name} status: ${job.state}`);
  });
}

listJobs();

Python

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

def list_dlp_jobs(project, filter_string=None, job_type=None):
    """Uses the Data Loss Prevention API to lists DLP jobs that match the
        specified filter in the request.
    Args:
        project: The project id to use as a parent resource.
        filter: (Optional) Allows filtering.
            Supported syntax:
            * Filter expressions are made up of one or more restrictions.
            * Restrictions can be combined by 'AND' or 'OR' logical operators.
            A sequence of restrictions implicitly uses 'AND'.
            * A restriction has the form of '<field> <operator> <value>'.
            * Supported fields/values for inspect jobs:
                - `state` - PENDING|RUNNING|CANCELED|FINISHED|FAILED
                - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY
                - `trigger_name` - The resource name of the trigger that
                                   created job.
            * Supported fields for risk analysis jobs:
                - `state` - RUNNING|CANCELED|FINISHED|FAILED
            * The operator must be '=' or '!='.
            Examples:
            * inspected_storage = cloud_storage AND state = done
            * inspected_storage = cloud_storage OR inspected_storage = bigquery
            * inspected_storage = cloud_storage AND
                                  (state = done OR state = canceled)
        type: (Optional) The type of job. Defaults to 'INSPECT'.
            Choices:
            DLP_JOB_TYPE_UNSPECIFIED
            INSPECT_JOB: The job inspected content for sensitive data.
            RISK_ANALYSIS_JOB: The job executed a Risk Analysis computation.

    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library.
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Job type dictionary
    job_type_to_int = {
        "DLP_JOB_TYPE_UNSPECIFIED": google.cloud.dlp.DlpJobType.DLP_JOB_TYPE_UNSPECIFIED,
        "INSPECT_JOB": google.cloud.dlp.DlpJobType.INSPECT_JOB,
        "RISK_ANALYSIS_JOB": google.cloud.dlp.DlpJobType.RISK_ANALYSIS_JOB,
    }
    # If job type is specified, convert job type to number through enums.
    if job_type:
        job_type = job_type_to_int[job_type]

    # Call the API to get a list of jobs.
    response = dlp.list_dlp_jobs(
        request={"parent": parent, "filter": filter_string, "type_": job_type}
    )

    # Iterate over results.
    for job in response:
        print("Job: %s; status: %s" % (job.name, job.state.name))

Go

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"cloud.google.com/go/dlp/apiv2/dlppb"
	"google.golang.org/api/iterator"
)

// listJobs lists jobs matching the given optional filter and optional jobType.
func listJobs(w io.Writer, projectID, filter, jobType string) error {
	// projectID := "my-project-id"
	// filter := "`state` = FINISHED"
	// jobType := "RISK_ANALYSIS_JOB"
	ctx := context.Background()
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}
	defer client.Close()

	// Create a configured request.
	req := &dlppb.ListDlpJobsRequest{
		Parent: fmt.Sprintf("projects/%s/locations/global", projectID),
		Filter: filter,
		Type:   dlppb.DlpJobType(dlppb.DlpJobType_value[jobType]),
	}
	// Send the request and iterate over the results.
	it := client.ListDlpJobs(ctx, req)
	for {
		j, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}
		fmt.Fprintf(w, "Job %v status: %v\n", j.GetName(), j.GetState())
	}
	return nil
}

PHP

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

use Google\Cloud\Dlp\V2\DlpServiceClient;
use Google\Cloud\Dlp\V2\DlpJob\JobState;
use Google\Cloud\Dlp\V2\DlpJobType;

/**
 * List Data Loss Prevention API jobs corresponding to a given filter.
 *
 * @param string $callingProjectId  The project ID to run the API call under
 * @param string $filter            The filter expression to use
 */
function list_jobs(string $callingProjectId, string $filter): void
{
    // Instantiate a client.
    $dlp = new DlpServiceClient();

    // The type of job to list (either 'INSPECT_JOB' or 'REDACT_JOB')
    $jobType = DlpJobType::INSPECT_JOB;

    // Run job-listing request
    // For more information and filter syntax,
    // @see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
    $parent = "projects/$callingProjectId/locations/global";
    $response = $dlp->listDlpJobs($parent, [
    'filter' => $filter,
    'type' => $jobType
    ]);

    // Print job list
    $jobs = $response->iterateAllElements();
    foreach ($jobs as $job) {
        printf('Job %s status: %s' . PHP_EOL, $job->getName(), $job->getState());
        $infoTypeStats = $job->getInspectDetails()->getResult()->getInfoTypeStats();

        if ($job->getState() == JobState::DONE) {
            if (count($infoTypeStats) > 0) {
                foreach ($infoTypeStats as $infoTypeStat) {
                    printf(
                        '  Found %s instance(s) of type %s' . PHP_EOL,
                        $infoTypeStat->getCount(),
                        $infoTypeStat->getInfoType()->getName()
                    );
                }
            } else {
                print('  No findings.' . PHP_EOL);
            }
        }
    }
}

C#

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


using Google.Api.Gax;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dlp.V2;

public class JobsList
{
    public static PagedEnumerable<ListDlpJobsResponse, DlpJob> ListDlpJobs(string projectId, string filter, DlpJobType jobType)
    {
        var dlp = DlpServiceClient.Create();

        var response = dlp.ListDlpJobs(new ListDlpJobsRequest
        {
            Parent = new LocationName(projectId, "global").ToString(),
            Filter = filter,
            Type = jobType
        });

        // Uncomment to print jobs
        // foreach (var job in response)
        // {
        //     Console.WriteLine($"Job: {job.Name} status: {job.State}");
        // }

        return response;
    }
}

すべてのジョブトリガーを一覧表示する

現在のプロジェクトのすべてのジョブトリガーを一覧表示するには:

Console

Google Cloud コンソールで、[データ損失防止] ページに移動します。

[データ損失防止] に移動

[検査] タブの [ジョブトリガー] サブタブに、コンソールによって、現在のプロジェクトのすべてのジョブトリガーのリストが表示されます。

プロトコル

JobTrigger リソースの projects.jobTriggers.list メソッドを使用すると、すべてのジョブトリガーを一覧表示できます。

プロジェクトで現在定義されているすべてのジョブトリガーを一覧表示するには、以下に示すように、GET リクエストを jobTriggers エンドポイントに送信します。

URL:

GET https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/jobTriggers?key={YOUR_API_KEY}

次の JSON 出力には、前のセクションで作成したジョブトリガーが一覧表示されています。ジョブトリガーの構造は JobTrigger リソースの構造をそのまま反映しています。

JSON 出力:

{
  "jobTriggers":[
    {
      "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
      "displayName":"JobTrigger1",
      "description":"Starts a DLP scan job of a Datastore kind",
      "inspectJob":{
        "storageConfig":{
          "datastoreOptions":{
            "partitionId":{
              "projectId":"[PROJECT_ID]",
              "namespaceId":"[NAMESPACE_ID]"
            },
            "kind":{
              "name":"Example-Kind"
            }
          }
        },
        "inspectConfig":{
          "infoTypes":[
            {
              "name":"PHONE_NUMBER"
            }
          ],
          "minLikelihood":"LIKELY",
          "limits":{

          },
          "includeQuote":true
        },
        "actions":[
          {
            "saveFindings":{
              "outputConfig":{
                "table":{
                  "projectId":"[PROJECT_ID]",
                  "datasetId":"[BIGQUERY_DATASET_NAME]",
                  "tableId":"[BIGQUERY_TABLE_NAME]"
                }
              }
            }
          }
        ]
      },
      "triggers":[
        {
          "schedule":{
            "recurrencePeriodDuration":"86400s"
          }
        }
      ],
      "createTime":"2018-11-30T01:52:41.171857Z",
      "updateTime":"2018-11-30T01:52:41.171857Z",
      "status":"HEALTHY"
    },

    ...

],
  "nextPageToken":"KkwKCQjivJ2UpPreAgo_Kj1wcm9qZWN0cy92ZWx2ZXR5LXN0dWR5LTE5NjEwMS9qb2JUcmlnZ2Vycy8xNTA5NzEyOTczMDI0MDc1NzY0"
}

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

Java

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.JobTrigger;
import com.google.privacy.dlp.v2.ListJobTriggersRequest;
import com.google.privacy.dlp.v2.LocationName;
import java.io.IOException;

class TriggersList {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    listTriggers(projectId);
  }

  public static void listTriggers(String projectId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {
      // Build the request to be sent by the client
      ListJobTriggersRequest listJobTriggersRequest =
          ListJobTriggersRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .build();

      // Use the client to send the API request.
      DlpServiceClient.ListJobTriggersPagedResponse response =
          dlpServiceClient.listJobTriggers(listJobTriggersRequest);

      // Parse the response and process the results
      System.out.println("DLP triggers found:");
      for (JobTrigger trigger : response.getPage().getValues()) {
        System.out.println("Trigger: " + trigger.getName());
        System.out.println("\tCreated: " + trigger.getCreateTime());
        System.out.println("\tUpdated: " + trigger.getUpdateTime());
        if (trigger.getDisplayName() != null) {
          System.out.println("\tDisplay name: " + trigger.getDisplayName());
        }
        if (trigger.getDescription() != null) {
          System.out.println("\tDescription: " + trigger.getDescription());
        }
        System.out.println("\tStatus: " + trigger.getStatus());
        System.out.println("\tError count: " + trigger.getErrorsCount());
      }
      ;
    }
  }
}

Node.js

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

  // Imports the Google Cloud Data Loss Prevention library
  const DLP = require('@google-cloud/dlp');

  // Instantiates a client
  const dlp = new DLP.DlpServiceClient();

  // The project ID to run the API call under
  // const projectId = 'my-project'

  async function listTriggers() {
    // Construct trigger listing request
    const request = {
      parent: `projects/${projectId}/locations/global`,
    };

    // Helper function to pretty-print dates
    const formatDate = date => {
      const msSinceEpoch = parseInt(date.seconds, 10) * 1000;
      return new Date(msSinceEpoch).toLocaleString('en-US');
    };

    // Run trigger listing request
    const [triggers] = await dlp.listJobTriggers(request);
    triggers.forEach(trigger => {
      // Log trigger details
      console.log(`Trigger ${trigger.name}:`);
      console.log(`  Created: ${formatDate(trigger.createTime)}`);
      console.log(`  Updated: ${formatDate(trigger.updateTime)}`);
      if (trigger.displayName) {
        console.log(`  Display Name: ${trigger.displayName}`);
      }
      if (trigger.description) {
        console.log(`  Description: ${trigger.description}`);
      }
      console.log(`  Status: ${trigger.status}`);
      console.log(`  Error count: ${trigger.errors.length}`);
    });
  }

  listTriggers();
}

main(...process.argv.slice(2));
process.on('unhandledRejection', err => {
  console.error(err.message);
  process.exitCode = 1;
});

Python

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

def list_triggers(project):
    """Lists all Data Loss Prevention API triggers.
    Args:
        project: The Google Cloud project id to use as a parent resource.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Call the API.
    response = dlp.list_job_triggers(request={"parent": parent})

    for trigger in response:
        print("Trigger {}:".format(trigger.name))
        print("  Created: {}".format(trigger.create_time))
        print("  Updated: {}".format(trigger.update_time))
        if trigger.display_name:
            print("  Display Name: {}".format(trigger.display_name))
        if trigger.description:
            print("  Description: {}".format(trigger.discription))
        print("  Status: {}".format(trigger.status))
        print("  Error count: {}".format(len(trigger.errors)))

Go

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

import (
	"context"
	"fmt"
	"io"
	"time"

	dlp "cloud.google.com/go/dlp/apiv2"
	"cloud.google.com/go/dlp/apiv2/dlppb"
	"github.com/golang/protobuf/ptypes"
	"google.golang.org/api/iterator"
)

// listTriggers lists the triggers for the given project.
func listTriggers(w io.Writer, projectID string) error {
	// projectID := "my-project-id"

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}
	defer client.Close()

	// Create a configured request.
	req := &dlppb.ListJobTriggersRequest{
		Parent: fmt.Sprintf("projects/%s/locations/global", projectID),
	}
	// Send the request and iterate over the results.
	it := client.ListJobTriggers(ctx, req)
	for {
		t, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}
		fmt.Fprintf(w, "Trigger %v\n", t.GetName())
		c, err := ptypes.Timestamp(t.GetCreateTime())
		if err != nil {
			return fmt.Errorf("CreateTime Timestamp: %v", err)
		}
		fmt.Fprintf(w, "  Created: %v\n", c.Format(time.RFC1123))
		u, err := ptypes.Timestamp(t.GetUpdateTime())
		if err != nil {
			return fmt.Errorf("UpdateTime Timestamp: %v", err)
		}
		fmt.Fprintf(w, "  Updated: %v\n", u.Format(time.RFC1123))
		fmt.Fprintf(w, "  Display Name: %q\n", t.GetDisplayName())
		fmt.Fprintf(w, "  Description: %q\n", t.GetDescription())
		fmt.Fprintf(w, "  Status: %v\n", t.GetStatus())
		fmt.Fprintf(w, "  Error Count: %v\n", len(t.GetErrors()))
	}

	return nil
}

PHP

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

use Google\Cloud\Dlp\V2\DlpServiceClient;

/**
 * List Data Loss Prevention API job triggers.
 *
 * @param string $callingProjectId  The project ID to run the API call under
 */
function list_triggers(string $callingProjectId): void
{
    // Instantiate a client.
    $dlp = new DlpServiceClient();

    $parent = "projects/$callingProjectId/locations/global";

    // Run request
    $response = $dlp->listJobTriggers($parent);

    // Print results
    $triggers = $response->iterateAllElements();
    foreach ($triggers as $trigger) {
        printf('Trigger %s' . PHP_EOL, $trigger->getName());
        printf('  Created: %s' . PHP_EOL, $trigger->getCreateTime()->getSeconds());
        printf('  Updated: %s' . PHP_EOL, $trigger->getUpdateTime()->getSeconds());
        printf('  Display Name: %s' . PHP_EOL, $trigger->getDisplayName());
        printf('  Description: %s' . PHP_EOL, $trigger->getDescription());
        printf('  Status: %s' . PHP_EOL, $trigger->getStatus());
        printf('  Error count: %s' . PHP_EOL, count($trigger->getErrors()));
        $timespanConfig = $trigger->getInspectJob()->getStorageConfig()->getTimespanConfig();
        printf('  Auto-populates timespan config: %s' . PHP_EOL,
            ($timespanConfig && $timespanConfig->getEnableAutoPopulationOfTimespanConfig() ? 'yes' : 'no'));
    }
}

C#

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


using Google.Api.Gax;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dlp.V2;
using System;

public class TriggersList
{
    public static PagedEnumerable<ListJobTriggersResponse, JobTrigger> List(string projectId)
    {
        var dlp = DlpServiceClient.Create();

        var response = dlp.ListJobTriggers(
            new ListJobTriggersRequest
            {
                Parent = new LocationName(projectId, "global").ToString(),
            });

        foreach (var trigger in response)
        {
            Console.WriteLine($"Name: {trigger.Name}");
            Console.WriteLine($"  Created: {trigger.CreateTime}");
            Console.WriteLine($"  Updated: {trigger.UpdateTime}");
            Console.WriteLine($"  Display Name: {trigger.DisplayName}");
            Console.WriteLine($"  Description: {trigger.Description}");
            Console.WriteLine($"  Status: {trigger.Status}");
            Console.WriteLine($"  Error count: {trigger.Errors.Count}");
        }

        return response;
    }
}

ジョブの削除

プロジェクトからジョブとジョブの結果を削除するには、次のようにします。外部(BigQuery など)に保存された結果は、この操作をしても削除されません。

Console

  1. Google Cloud コンソールで、[データ損失防止] ページに移動します。

    [データ損失防止] に移動

  2. [検査] タブをクリックしてから、[検査ジョブ] サブクラスをクリックします。Google Cloud コンソールに、現在のプロジェクトにあるすべてのジョブが一覧表示されます。

  3. 削除するジョブトリガーの [操作] 列で、[その他の操作] メニュー(縦に並んだ 3 つの点で表示) をクリックし、[削除] をクリックします。

または、ジョブの一覧で削除対象のジョブの識別子をクリックし、ジョブの詳細ページで [削除] をクリックします。

プロトコル

現在のプロジェクトからジョブを削除するには、以下に示すように、DELETE リクエストを dlpJobs エンドポイントに送信します。[JOB-IDENTIFIER] フィールドは、i- で始まるジョブの識別子に置き換えます。

URL:

DELETE https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/dlpJobs/[JOB-IDENTIFIER]?key={YOUR_API_KEY}

リクエストが成功した場合、DLP API は成功レスポンスを返します。ジョブが正常に削除されたことを確認するには、すべてのジョブを一覧表示します。

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

Java

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DeleteDlpJobRequest;
import com.google.privacy.dlp.v2.DlpJobName;
import java.io.IOException;

public class JobsDelete {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String jobId = "your-job-id";
    deleteJobs(projectId, jobId);
  }

  // Deletes a DLP Job with the given jobId
  public static void deleteJobs(String projectId, String jobId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Construct the complete job name from the projectId and jobId
      DlpJobName jobName = DlpJobName.of(projectId, jobId);

      // Construct the job deletion request to be sent by the client.
      DeleteDlpJobRequest deleteDlpJobRequest =
          DeleteDlpJobRequest.newBuilder().setName(jobName.toString()).build();

      // Send the job deletion request
      dlpServiceClient.deleteDlpJob(deleteDlpJobRequest);
      System.out.println("Job deleted successfully.");
    }
  }
}

Node.js

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project';

// The name of the job whose results should be deleted
// Parent project ID is automatically extracted from this parameter
// const jobName = 'projects/my-project/dlpJobs/X-#####'

function deleteJob() {
  // Construct job deletion request
  const request = {
    name: jobName,
  };

  // Run job deletion request
  dlp
    .deleteDlpJob(request)
    .then(() => {
      console.log(`Successfully deleted job ${jobName}.`);
    })
    .catch(err => {
      console.log(`Error in deleteJob: ${err.message || err}`);
    });
}

deleteJob();

Python

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

def delete_dlp_job(project, job_name):
    """Uses the Data Loss Prevention API to delete a long-running DLP job.
    Args:
        project: The project id to use as a parent resource.
        job_name: The name of the DlpJob resource to be deleted.

    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library.
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id and job name into a full resource id.
    name = f"projects/{project}/dlpJobs/{job_name}"

    # Call the API to delete job.
    dlp.delete_dlp_job(request={"name": name})

    print("Successfully deleted %s" % job_name)

Go

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"cloud.google.com/go/dlp/apiv2/dlppb"
)

// deleteJob deletes the job with the given name.
func deleteJob(w io.Writer, jobName string) error {
	// jobName := "job-example"
	ctx := context.Background()
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}
	defer client.Close()
	req := &dlppb.DeleteDlpJobRequest{
		Name: jobName,
	}
	if err = client.DeleteDlpJob(ctx, req); err != nil {
		return fmt.Errorf("DeleteDlpJob: %v", err)
	}
	fmt.Fprintf(w, "Successfully deleted job")
	return nil
}

PHP

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

use Google\Cloud\Dlp\V2\DlpServiceClient;

/**
 * Delete results of a Data Loss Prevention API job
 *
 * @param string $jobId The name of the job whose results should be deleted
 */
function delete_job(string $jobId): void
{
    // Instantiate a client.
    $dlp = new DlpServiceClient();

    // Run job-deletion request
    // The Parent project ID is automatically extracted from this parameter
    $dlp->deleteDlpJob($jobId);

    // Print status
    printf('Successfully deleted job %s' . PHP_EOL, $jobId);
}

C#

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


using System;
using Google.Cloud.Dlp.V2;

public class JobsDelete
{
    public static void DeleteJob(string jobName)
    {
        var dlp = DlpServiceClient.Create();

        dlp.DeleteDlpJob(new DeleteDlpJobRequest
        {
            Name = jobName
        });

        Console.WriteLine($"Successfully deleted job {jobName}.");
    }
}

ジョブトリガーを削除する

Console

  1. Google Cloud コンソールで、[データ損失防止] ページに移動します。

    [データ損失防止] に移動

    [検査] タブの [ジョブトリガー] サブタブに、コンソールによって、現在のプロジェクトのすべてのジョブトリガーのリストが表示されます。

  2. 削除するジョブトリガーの [操作] 列で、[その他の操作] メニュー(縦に並んだ 3 つの点で表示) をクリックし、[削除] をクリックします。

または、ジョブトリガーの一覧で削除対象のジョブの名前をクリックし、ジョブトリガーの詳細ページで [削除] をクリックします。

プロトコル

現在のプロジェクトからジョブトリガーを削除するには、以下に示すように、DELETE リクエストを jobTriggers エンドポイントに送信します。[JOB-TRIGGER-NAME] フィールドは、ジョブトリガーの名前に置き換えます。

URL:

DELETE https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/jobTriggers/[JOB-TRIGGER-NAME]?key={YOUR_API_KEY}

リクエストが成功した場合、DLP API は成功レスポンスを返します。ジョブトリガーが正常に削除されたことを確認するには、すべてのジョブトリガーを一覧表示します

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

Java

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DeleteJobTriggerRequest;
import com.google.privacy.dlp.v2.ProjectJobTriggerName;
import java.io.IOException;

class TriggersDelete {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String triggerId = "your-trigger-id";
    deleteTrigger(projectId, triggerId);
  }

  public static void deleteTrigger(String projectId, String triggerId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Get the full trigger name from the given triggerId and ProjectId
      ProjectJobTriggerName triggerName = ProjectJobTriggerName.of(projectId, triggerId);

      // Construct the trigger deletion request to be sent by the client
      DeleteJobTriggerRequest deleteJobTriggerRequest =
          DeleteJobTriggerRequest.newBuilder().setName(triggerName.toString()).build();

      // Send the trigger deletion request
      dlpServiceClient.deleteJobTrigger(deleteJobTriggerRequest);
      System.out.println("Trigger deleted: " + triggerName.toString());
    }
  }
}

Node.js

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project'

// The name of the trigger to be deleted
// Parent project ID is automatically extracted from this parameter
// const triggerId = 'projects/my-project/triggers/my-trigger';

async function deleteTrigger() {
  // Construct trigger deletion request
  const request = {
    name: triggerId,
  };

  // Run trigger deletion request
  await dlp.deleteJobTrigger(request);
  console.log(`Successfully deleted trigger ${triggerId}.`);
}

deleteTrigger();

Python

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

def delete_trigger(project, trigger_id):
    """Deletes a Data Loss Prevention API trigger.
    Args:
        project: The id of the Google Cloud project which owns the trigger.
        trigger_id: The id of the trigger to delete.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Combine the trigger id with the parent id.
    trigger_resource = "{}/jobTriggers/{}".format(parent, trigger_id)

    # Call the API.
    dlp.delete_job_trigger(request={"name": trigger_resource})

    print("Trigger {} successfully deleted.".format(trigger_resource))

if __name__ == "__main__":
    default_project = os.environ.get("GOOGLE_CLOUD_PROJECT")

    parser = argparse.ArgumentParser(description=__doc__)
    subparsers = parser.add_subparsers(
        dest="action", help="Select which action to perform."
    )
    subparsers.required = True

    parser_create = subparsers.add_parser("create", help="Create a trigger.")
    parser_create.add_argument(
        "bucket", help="The name of the GCS bucket containing the file."
    )
    parser_create.add_argument(
        "scan_period_days",
        type=int,
        help="How often to repeat the scan, in days. The minimum is 1 day.",
    )
    parser_create.add_argument(
        "--trigger_id",
        help="The id of the trigger. If omitted, an id will be randomly " "generated",
    )
    parser_create.add_argument(
        "--display_name", help="The optional display name of the trigger."
    )
    parser_create.add_argument(
        "--description", help="The optional description of the trigger."
    )
    parser_create.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )
    parser_create.add_argument(
        "--info_types",
        nargs="+",
        help="Strings representing info types to look for. A full list of "
        "info categories and types is available from the API. Examples "
        'include "FIRST_NAME", "LAST_NAME", "EMAIL_ADDRESS". '
        "If unspecified, the three above examples will be used.",
        default=["FIRST_NAME", "LAST_NAME", "EMAIL_ADDRESS"],
    )
    parser_create.add_argument(
        "--min_likelihood",
        choices=[
            "LIKELIHOOD_UNSPECIFIED",
            "VERY_UNLIKELY",
            "UNLIKELY",
            "POSSIBLE",
            "LIKELY",
            "VERY_LIKELY",
        ],
        help="A string representing the minimum likelihood threshold that "
        "constitutes a match.",
    )
    parser_create.add_argument(
        "--max_findings",
        type=int,
        help="The maximum number of findings to report; 0 = no maximum.",
    )
    parser_create.add_argument(
        "--auto_populate_timespan",
        type=bool,
        help="Limit scan to new content only.",
    )

    parser_list = subparsers.add_parser("list", help="List all triggers.")
    parser_list.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )

    parser_delete = subparsers.add_parser("delete", help="Delete a trigger.")
    parser_delete.add_argument("trigger_id", help="The id of the trigger to delete.")
    parser_delete.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )

    args = parser.parse_args()

    if args.action == "create":
        create_trigger(
            args.project,
            args.bucket,
            args.scan_period_days,
            args.info_types,
            trigger_id=args.trigger_id,
            display_name=args.display_name,
            description=args.description,
            min_likelihood=args.min_likelihood,
            max_findings=args.max_findings,
            auto_populate_timespan=args.auto_populate_timespan,
        )
    elif args.action == "list":
        list_triggers(args.project)
    elif args.action == "delete":
        delete_trigger(args.project, args.trigger_id)

Go

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"cloud.google.com/go/dlp/apiv2/dlppb"
)

// deleteTrigger deletes the given trigger.
func deleteTrigger(w io.Writer, triggerID string) error {
	// projectID := "my-project-id"
	// triggerID := "my-trigger"

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}
	defer client.Close()

	req := &dlppb.DeleteJobTriggerRequest{
		Name: triggerID,
	}

	if err := client.DeleteJobTrigger(ctx, req); err != nil {
		return fmt.Errorf("DeleteJobTrigger: %v", err)
	}
	fmt.Fprintf(w, "Successfully deleted trigger %v", triggerID)
	return nil
}

PHP

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。

use Google\Cloud\Dlp\V2\DlpServiceClient;

/**
 * Delete a Data Loss Prevention API job trigger.
 *
 * @param string $callingProjectId  The project ID to run the API call under
 * @param string $triggerId         The name of the trigger to be deleted.
 */
function delete_trigger(string $callingProjectId, string $triggerId): void
{
    // Instantiate a client.
    $dlp = new DlpServiceClient();

    // Run request
    // The Parent project ID is automatically extracted from this parameter
    $triggerName = "projects/$callingProjectId/locations/global/jobTriggers/$triggerId";
    $response = $dlp->deleteJobTrigger($triggerName);

    // Print the results
    printf('Successfully deleted trigger %s' . PHP_EOL, $triggerName);
}

C#

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


using Google.Cloud.Dlp.V2;
using System;

public class TriggersDelete
{

    public static void Delete(string triggerName)
    {
        var dlp = DlpServiceClient.Create();

        dlp.DeleteJobTrigger(
            new DeleteJobTriggerRequest
            {
                Name = triggerName
            });

        Console.WriteLine($"Successfully deleted trigger {triggerName}.");
    }
}

ジョブの取得

プロジェクトからジョブとジョブの結果を取得するには、次のようにします。外部(BigQuery など)に保存された結果は、この操作をしても削除されません。

プロトコル

現在のプロジェクトからジョブを取得するには、以下に示すように、GET リクエストを dlpJobs エンドポイントに送信します。[JOB-IDENTIFIER] フィールドは、i- で始まるジョブの識別子に置き換えます。

URL:

GET https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/dlpJobs/[JOB-IDENTIFIER]?key={YOUR_API_KEY}

リクエストが成功した場合、DLP API は成功レスポンスを返します。

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

Java

Cloud DLP 用のクライアント ライブラリをインストールして使用する方法については、Cloud DLP クライアント ライブラリをご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DlpJobName;
import com.google.privacy.dlp.v2.GetDlpJobRequest;
import java.io.IOException;

public class JobsGet {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String jobId = "your-job-id";
    getJobs(projectId, jobId);
  }

  // Gets a DLP Job with the given jobId
  public static void getJobs(String projectId, String jobId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Construct the complete job name from the projectId and jobId
      DlpJobName jobName = DlpJobName.of(projectId, jobId);

      // Construct the get job request to be sent by the client.
      GetDlpJobRequest getDlpJobRequest =
          GetDlpJobRequest.newBuilder().setName(jobName.toString()).build();

      // Send the get job request
      dlpServiceClient.getDlpJob(getDlpJobRequest);
      System.out.println("Job got successfully.");
    }
  }
}

ジョブトリガーの即時実行

ジョブトリガーが作成された後、トリガーを有効にすると、トリガーを強制的にすぐに実行できます。これを行うには、次のコマンドを実行します。

curl --request POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    'https://dlp.googleapis.com/v2/JOB_TRIGGER_NAME:activate'

以下を置き換えます。

  • PROJECT_ID: リクエストに関連付けられたアクセス料金が請求される Google Cloud プロジェクトの ID
  • JOB_TRIGGER_NAME: ジョブトリガーの完全なリソース名(例: projects/my-project/locations/global/jobTriggers/123456789)。

既存のジョブトリガーを更新する

ジョブトリガーの作成、一覧表示、削除に加えて、既存のジョブトリガーを更新することもできます。既存のジョブトリガーの構成を変更するには、次の操作を行います。

Console

  1. Google Cloud コンソールで、[データ損失防止] ページに移動します。

    [データ損失防止] に移動

  2. [検査] タブをクリックしてから、[ジョブトリガー] サブタブをクリックします。

    現在のプロジェクトにあるすべてのジョブトリガーが一覧表示されます。

  3. 削除するジョブトリガーの [操作] 列で、[その他] をクリックし、続いて [詳細を表示] をクリックします。

  4. ジョブトリガーの詳細ページで、[編集] をクリックします。

  5. [トリガーの編集] ページでは、入力データの場所や、テンプレート、infoType、可能性などの検出の詳細、スキャン後の操作、およびジョブトリガーのスケジュールを変更できます。変更が終わったら、[保存] をクリックします。

プロトコル

projects.jobTriggers.patch メソッドを使用して、新しい JobTrigger の値を Cloud DLP API に送信し、指定したジョブトリガー内でそれらの値を更新します。

たとえば、次の簡単なジョブトリガーで考えてみましょう。ジョブトリガーを表現したこの JSON は、現在のプロジェクトのジョブトリガー エンドポイントに GET リクエストを送信したときに戻されたものです。

JSON 出力:

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "inspectJob":{
    "storageConfig":{
      "cloudStorageOptions":{
        "fileSet":{
          "url":"gs://dlptesting/*"
        },
        "fileTypes":[
          "FILE_TYPE_UNSPECIFIED"
        ],
        "filesLimitPercent":100
      },
      "timespanConfig":{
        "enableAutoPopulationOfTimespanConfig":true
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"US_SOCIAL_SECURITY_NUMBER"
        }
      ],
      "minLikelihood":"POSSIBLE",
      "limits":{

      }
    },
    "actions":[
      {
        "jobNotificationEmails":{

        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2019-03-06T21:19:45.774841Z",
  "updateTime":"2019-03-06T21:19:45.774841Z",
  "status":"HEALTHY"
}

次の JSON は、指定されたエンドポイントに PATCH リクエストで送信されると、スキャン対象となる新しい infoType と新しい最小可能性でジョブトリガーを更新します。updateMask 属性も指定する必要があり、その値は FieldMask 形式であるので注意してください。

JSON 入力:

PATCH https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]?key={YOUR_API_KEY}

{
  "jobTrigger":{
    "inspectJob":{
      "inspectConfig":{
        "infoTypes":[
          {
            "name":"US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER"
          }
        ],
        "minLikelihood":"LIKELY"
      }
    }
  },
  "updateMask":"inspectJob(inspectConfig(infoTypes,minLikelihood))"
}

この JSON を指定された URL に送信すると、更新されたジョブトリガーを表す次の情報が返されます。元の infoType と可能性の値が新しい値に置き換えられていることに注意してください。

JSON 出力:

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "inspectJob":{
    "storageConfig":{
      "cloudStorageOptions":{
        "fileSet":{
          "url":"gs://dlptesting/*"
        },
        "fileTypes":[
          "FILE_TYPE_UNSPECIFIED"
        ],
        "filesLimitPercent":100
      },
      "timespanConfig":{
        "enableAutoPopulationOfTimespanConfig":true
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER"
        }
      ],
      "minLikelihood":"LIKELY",
      "limits":{

      }
    },
    "actions":[
      {
        "jobNotificationEmails":{

        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2019-03-06T21:19:45.774841Z",
  "updateTime":"2019-03-06T21:27:01.650183Z",
  "lastRunTime":"1970-01-01T00:00:00Z",
  "status":"HEALTHY"
}

以下に埋め込まれている API Explorer を使用すれば、これをすぐに試すことができます。JSON を使用して DLP API にリクエストを送信する方法については、JSON クイックスタートをご覧ください。

スキャンを新しいコンテンツのみに制限する

Cloud Storage または BigQuery に保存されるファイルのタイムスパンの日付を自動的に設定するジョブトリガーを構成できます。TimespanConfig オブジェクトを自動入力に設定すると、Cloud DLP はトリガーが最後に実行されてから追加または変更されたデータのみをスキャンします。

...
  timespan_config {
        enable_auto_population_of_timespan_config: true
      }
...

ファイルのアップロード時にジョブをトリガーする

Cloud DLP に組み込まれているジョブトリガーのサポートに加えて、Google Cloud には DLP ジョブの統合やトリガーに使用できるさまざまなコンポーネントがあります。たとえば、ファイルを Cloud Storage にアップロードするたびに、Cloud Functions を使用して DLP スキャンを開始できます。

このオペレーションの設定方法については、Cloud Storage にアップロードされたデータの分類の自動化をご覧ください。

次のステップ