処理を行うロケーションの指定

機密データの保護オペレーションを実行するリージョンを指定することで、機密データが処理される可能性のある場所を制御できます。このドキュメントでは、機密データの保護の処理を行うロケーションのコンセプトと、リージョンの指定方法について説明します。

サポートされているリージョンとマルチリージョンのリストについては、機密データの保護のロケーションをご覧ください。

リージョンとマルチリージョンについて

リージョンとは、特定の地理的な場所(北米西部や北東アジアなど)のことです。マルチリージョン ロケーション(または単に、マルチリージョン)とは、2 つ以上の地理的リージョンを含む広い地理的領域(欧州連合など)のことです。

ロケーションに関する留意事項

レイテンシ、可用性、帯域幅のコストのバランスがとれた場所が適切なロケーションになります。

  • リージョンを使用すると、レイテンシとネットワーク帯域幅の最適化に役立ちます。

  • Google ネットワークの外部にあり、広域に分散しているデータを処理する場合や、リージョン間の冗長化による高可用性を求める場合は、マルチリージョンを使用します。

  • 通常、便利で、データを利用する大半のユーザーが含まれるロケーションでデータを処理する必要があります。

  • 組織で転送中のデータを特定のリージョン内に保持する必要がある場合は、リージョン エンドポイント(REP)をサポートするリージョンのみを使用します。この場合、Google Cloud コンソールで機密データの保護のリージョン エンドポイントを使用できないため、Cloud Data Loss Prevention API を使用する必要があります。

リージョンを指定する

処理リージョンを指定する方法は、リクエストを送信するエンドポイントのタイプ(グローバル エンドポイントまたはリージョン エンドポイント)によって異なります。選択するエンドポイントのタイプは、転送中のデータを指定のリージョン内に保持する必要があるかどうかによって異なります。詳細については、Sensitive Data Protection のグローバル エンドポイントとリージョン エンドポイントをご覧ください。

グローバル エンドポイントへのリクエストでリージョンを指定する

Console

機密データの保護オペレーションを設定するときにリージョンを選択します。

たとえば、ジョブトリガーを作成するときに、次のように [リソース ロケーション] メニューからロケーションを選択します。

処理場所が問題にならない場合は、Global リージョンを使用すると、Google が処理を行うロケーションを選択します。Global はデフォルトのリージョン選択です。

REST

リクエスト エンドポイントの URL にリージョン情報を挿入します。処理場所が問題にならない場合は、global リージョンを使用すると、Google が処理を行うロケーションを選択します。global リージョンを指定するリクエストによって作成されたリソースは、global リージョンに保存されることに注意してください。

グローバル エンドポイントへのリクエストの例を次に示します。

グローバル リージョンを使用する

次の 2 つのリクエストの結果は同じです。リージョンを含めないことは、locations/global/ を指定することと同じです。

POST https://www.googleapis.com/dlp/v2/projects/PROJECT_ID/locations/global/content:inspect
POST https://www.googleapis.com/dlp/v2/projects/PROJECT_ID/content:inspect

特定のリージョンを使用する

データ処理するリージョンを指定するには、リソース URL 内に locations/ を挿入し、次にリージョン名を挿入します。

POST https://www.googleapis.com/dlp/v2/projects/PROJECT_ID/locations/us-west2/content:inspect

リージョン エンドポイントへのリクエストでリージョンを指定する

Console

機密データの保護では、Google Cloud コンソールでリージョン エンドポイントを使用できません。

C#

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

機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。


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

public class InspectStringRep
{
    public static InspectContentResponse Inspect(
        string projectId,
        string repLocation,
        string dataValue,
        string minLikelihood,
        int maxFindings,
        bool includeQuote,
        IEnumerable<InfoType> infoTypes,
        IEnumerable<CustomInfoType> customInfoTypes)
    {
        var inspectConfig = new InspectConfig
        {
            MinLikelihood = (Likelihood)Enum.Parse(typeof(Likelihood), minLikelihood, true),
            Limits = new FindingLimits
            {
                MaxFindingsPerRequest = maxFindings
            },
            IncludeQuote = includeQuote,
            InfoTypes = { infoTypes },
            CustomInfoTypes = { customInfoTypes }
        };
        var request = new InspectContentRequest
        {
            Parent = new LocationName(projectId, repLocation).ToString(),
            Item = new ContentItem
            {
                Value = dataValue
            },
            InspectConfig = inspectConfig
        };

        var dlp = new DlpServiceClientBuilder
        {
            Endpoint = $"dlp.{repLocation}.rep.googleapis.com"
        }.Build();

        var response = dlp.InspectContent(request);

        PrintResponse(includeQuote, response);

        return response;
    }

    private static void PrintResponse(bool includeQuote, InspectContentResponse response)
    {
        var findings = response.Result.Findings;
        if (findings.Any())
        {
            Console.WriteLine("Findings:");
            foreach (var finding in findings)
            {
                if (includeQuote)
                {
                    Console.WriteLine($"  Quote: {finding.Quote}");
                }
                Console.WriteLine($"  InfoType: {finding.InfoType}");
                Console.WriteLine($"  Likelihood: {finding.Likelihood}");
            }
        }
        else
        {
            Console.WriteLine("No findings.");
        }
    }
}

Go

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

機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

import (
	"context"
	"fmt"
	"io"

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

// inspectString inspects the a given string, and prints results.
func inspectStringRep(w io.Writer, projectID, repLocation, textToInspect string) error {
	// projectID := "my-project-id"
	// textToInspect := "My name is Gary and my email is gary@example.com"
	ctx := context.Background()

	// Assemble the regional endpoint url using provided rep location
	repEndpoint := fmt.Sprintf("dlp.%s.rep.googleapis.com:443", repLocation)

	// Initialize client.
	client, err := dlp.NewClient(ctx, option.WithEndpoint(repEndpoint))
	if err != nil {
		return err
	}
	defer client.Close() // Closing the client safely cleans up background resources.

	// Create and send the request.
	req := &dlppb.InspectContentRequest{
		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, repLocation),
		Item: &dlppb.ContentItem{
			DataItem: &dlppb.ContentItem_Value{
				Value: textToInspect,
			},
		},
		InspectConfig: &dlppb.InspectConfig{
			InfoTypes: []*dlppb.InfoType{
				{Name: "PHONE_NUMBER"},
				{Name: "EMAIL_ADDRESS"},
				{Name: "CREDIT_CARD_NUMBER"},
			},
			IncludeQuote: true,
		},
	}
	resp, err := client.InspectContent(ctx, req)
	if err != nil {
		return err
	}

	// Process the results.
	result := resp.Result
	fmt.Fprintf(w, "Findings: %d\n", len(result.Findings))
	for _, f := range result.Findings {
		fmt.Fprintf(w, "\tQuote: %s\n", f.Quote)
		fmt.Fprintf(w, "\tInfo type: %s\n", f.InfoType.Name)
		fmt.Fprintf(w, "\tLikelihood: %s\n", f.Likelihood)
	}
	return nil
}

Java

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

機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.cloud.dlp.v2.DlpServiceSettings;
import com.google.privacy.dlp.v2.ByteContentItem;
import com.google.privacy.dlp.v2.ByteContentItem.BytesType;
import com.google.privacy.dlp.v2.ContentItem;
import com.google.privacy.dlp.v2.Finding;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.InspectContentRequest;
import com.google.privacy.dlp.v2.InspectContentResponse;
import com.google.privacy.dlp.v2.LocationName;
import com.google.protobuf.ByteString;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class InspectStringRep {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String repLocation = "regional-endpoint-location-to-use";
    String textToInspect = "My name is Gary and my email is gary@example.com";
    inspectString(projectId, repLocation, textToInspect);
  }

  // Inspects the provided text.
  public static void inspectString(String projectId, String repLocation, String textToInspect)
      throws IOException {
    // Assemble the regional endpoint url using provided rep location
    String repEndpoint = String.format("dlp.%s.rep.googleapis.com:443", repLocation);
    DlpServiceSettings settings = DlpServiceSettings.newBuilder()
        .setEndpoint(repEndpoint)
        .build();
    // 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 dlp = DlpServiceClient.create(settings)) {
      // Specify the type and content to be inspected.
      ByteContentItem byteItem =
          ByteContentItem.newBuilder()
              .setType(BytesType.TEXT_UTF8)
              .setData(ByteString.copyFromUtf8(textToInspect))
              .build();
      ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build();

      // Specify the type of info the inspection will look for.
      List<InfoType> infoTypes = new ArrayList<>();
      // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types
      for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) {
        infoTypes.add(InfoType.newBuilder().setName(typeName).build());
      }

      // Construct the configuration for the Inspect request.
      InspectConfig config =
          InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build();

      // Construct the Inspect request to be sent by the client.
      InspectContentRequest request =
          InspectContentRequest.newBuilder()
              .setParent(LocationName.of(projectId, repLocation).toString())
              .setItem(item)
              .setInspectConfig(config)
              .build();

      // Use the client to send the API request.
      InspectContentResponse response = dlp.inspectContent(request);

      // Parse the response and process results
      System.out.println("Findings: " + response.getResult().getFindingsCount());
      for (Finding f : response.getResult().getFindingsList()) {
        System.out.println("\tQuote: " + f.getQuote());
        System.out.println("\tInfo type: " + f.getInfoType().getName());
        System.out.println("\tLikelihood: " + f.getLikelihood());
      }
    }
  }
}

REST

次の例では、content.inspect リクエストをリージョン エンドポイントに送信します。このリクエストに関連付けられたデータは、転送中、使用中、保存中も指定されたリージョンに保持されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • REP_REGION: 機密データ保護のリージョン エンドポイント(REP)を使用できるリージョン(例: us-west2)。リージョンの一覧については、Sensitive Data Protection のロケーションをご覧ください。
  • PROJECT_ID: Google Cloud プロジェクト ID。 プロジェクト ID は英数字からなる文字列です(例: example-project)。

HTTP メソッドと URL:

POST https://dlp.REP_REGION.rep.googleapis.com/v2/projects/PROJECT_ID/locations/REP_REGION/content:inspect

リクエストの本文(JSON):

{
  "inspectConfig": {
    "infoTypes": [
      {
        "name": "CREDIT_CARD_NUMBER"
      }
    ]
  },
  "item": {
    "value": "hi, my ccn is 4111111111111111"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "result": {
    "findings": [
      {
        "infoType": {
          "name": "CREDIT_CARD_NUMBER",
          "sensitivityScore": {
            "score": "SENSITIVITY_HIGH"
          }
        },
        "likelihood": "LIKELY",
        "location": {
          "byteRange": {
            "start": "14",
            "end": "30"
          },
          "codepointRange": {
            "start": "14",
            "end": "30"
          }
        },
        "createTime": "2024-08-09T19:54:13.348Z",
        "findingId": "2024-08-09T19:54:13.352163Z4747901452516738787"
      }
    ]
  }
}

コロケーションに関する留意事項

Cloud Storage や BigQuery などのストレージ リポジトリをスキャンする場合は、スキャンするリポジトリのロケーションと同じロケーションを機密データの保護リクエストで指定する必要があります。たとえば、BigQuery データセットが欧州連合のマルチリージョン ロケーションにある場合は、機密データの保護ジョブを構成するときに欧州連合のマルチリージョン(europe)を指定します。

機密データの保護リクエストをスキャン対象のストレージ リポジトリと同じ場所に配置しない場合、リクエストの処理はデータのロケーションとリクエストで指定されたロケーションに分割されます。

次のステップ