infoType と infoType 検出器

Sensitive Data Protection では、情報タイプ(infoType)を使用してスキャンする対象を定義します。infoType は、名前、メールアドレス、電話番号、識別番号、クレジット カード番号などの機密データのタイプを表します。infoType 検出器は、infoType の一致条件で照合する検出メカニズムです。

infoType を選択する際のベスト プラクティス

データを保護するための最初の重要なステップの 1 つは、データを理解することです。ベスト プラクティスとして、ビジネス上必要な情報のみを収集、保存、処理する必要があります。取り扱うデータを特定することで、ビジネス、ユーザー、データ セキュリティ、プライバシー体制について、情報に基づいた意思決定を行うことができます。

ビジネス ユースケースによっては、特定の機密情報が必要な場合と、必要でない場合があります。すべてのユースケースをサポートする単一のソリューションはありません。このため、Sensitive Data Protection では、スキャンするデータの種類を柔軟に制御できます。匿名化またはマスキングに infoType を使用している場合は、データの変換のタイミングと方法も制御できます。

一般的なガイドライン

infoType を選択する際は、次の一般的なガイドラインを考慮してください。

特定の infoType の代わりに一般的な infoType を使用する

検出された特定の infoType をスキャン結果に表示する必要がない場合は、検査構成で特定の infoType ではなく一般的な infoType を使用することを検討してください。リクエストで一般的な infoType 検出器を使用するメリットについては、このページの一般的な infoType 検出器と特定の infoType 検出器をご覧ください。

一般的な infoType と、それらに含まれる特定の infoType の完全なリストについては、一般的な infoType をご覧ください。

収集する必要のない機密情報

ビジネスの各サービスは、そのサービスに必要なデータのみを収集する必要があります。たとえば、ビジネスの一部のサービスでは、財務情報を収集する必要はありません。これらのサービスでは、CREDIT_CARD_NUMBER、FINANCIAL_ACCOUNT_NUMBER などの infoType 検出機能や、業界カテゴリ FINANCE のその他の infoType を有効にすることを検討してください。

収集する必要があるが、チームと広く共有したくない情報

個人情報を収集する正当なユースケースがあるかもしれませんが、チーム内で広く共有すべきではありません。たとえば、サポート チケットを提出したお客様が連絡先情報を提供し、問題の解決のために連絡できるようにすることがあります。チケットを閲覧するチームの全員に個人を特定できる情報(PII)を表示したくないとします。PHONE_NUMBER、EMAIL_ADDRESS などの infoType 検出機能や、タイプカテゴリ PII のその他の infoType を有効にすることを検討してください。

業界、データ プライバシー、または管轄区域の規制の対象となる機密データのカテゴリ

特定の情報タイプは、発行方法や使用目的により、機密情報と見なされます。また、コンテキスト情報やユーザー属性情報が保護対象カテゴリと見なされる場合もあります。これらの種類の情報には、収集、使用、管理の方法に関する追加の制限が適用される場合があります。次のカテゴリの infoType 検出器を有効にすることを検討してください。

類似する infoType の選択

類似した infoType 検出器を選択する際は、次の点を考慮してください。

パスポート

特定の国のパスポート識別子をスキャンする必要がない場合は、一般化された検出機能 PASSPORT を選択します。

UK_PASSPORT など、国固有のパスポート検出機能を使用できます。ただし、国固有のパスポート検出機能の中には、特定の形式のパスポートや、コンテキストの手がかりがあるパスポートのみを識別できるものもあります。

個人名

人名をスキャンする場合は、ほとんどのユースケースで FIRST_NAME や LAST_NAME ではなく PERSON_NAME を使用します。

PERSON_NAME は、人名の検出機能です。これには、1 語の名前とフルネームが含まれます。この検出機能は、自然言語理解などのさまざまなテクノロジーを使用して、Jane、Jane Smith、Jane Marie Smith などの名前を検出します。FIRST_NAME と LAST_NAME は、名前の一部を識別しようとするこの検出機能のサブセットです。これらの検出機能からの検出結果は、常に PERSON_NAME からの検出結果のサブセットです。

日付と時刻

すべての日付をスキャンする必要がない場合は、DATE_OF_BIRTH などのターゲット日付検出機能の使用を検討してください。この検出機能は、日付が個人の生年月日に関連していることを示すコンテキストを識別しようとします。

DATE 検出機能は、コンテキストに関係なく、すべての日付を検出しようとします。また、今日や昨日などの相対的な日付もフラグが設定されます。同様に、TIME はすべてのタイムスタンプを検索しようとします。

ロケーション

すべてのロケーションをスキャンする必要がない場合は、LOCATION 検出機能ではなく STREET_ADDRESS の使用を検討してください。STREET_ADDRESS 検出機能は、完全修飾アドレスの検出を試みます。完全修飾アドレスは通常、おおよその現在地よりも正確であり、より機密性が高いと見なされます。

LOCATION infoType 検出機能は、コンテキストに関係なく、任意の場所(Paris や Canada など)を検索しようとします。

コンテキストを必要とする infoType 検出器

多くの infoType 検出器では、一致を識別する前にコンテキストの手がかりが必要です。組み込みの infoType 検出器が、フラグを付けることが想定されるアイテムにフラグを付けていない場合、それらのアイテムの近くにコンテキストの手がかりがないため、代わりに GENERIC_ID またはカスタム infoType 検出器の使用を検討してください。

業界共通の定義がない情報タイプ

一部の情報タイプには、業界共通の定義がありません。たとえば、医療記録番号、口座番号、PIN、セキュリティ コードなどです。これらのタイプには、GENERIC_ID、FINANCIAL_ACCOUNT_NUMBER、MEDICAL_RECORD_NUMBER などの infoType の使用を検討してください。これらの検出機能は、エンティティ検出とコンテキストの組み合わせを使用して、機密性の高い要素を検出します。

高レイテンシの infoType 検出器

  • 不要な infoType 検出機能は有効にしないでください。以下は特定のシナリオで有用ですが、これらの infoType により、リクエストの実行速度がこれらを含まないリクエストよりもはるかに遅くなる可能性があります。

    • PERSON_NAME
    • FEMALE_NAME
    • MALE_NAME
    • FIRST_NAME
    • LAST_NAME
    • DATE_OF_BIRTH
    • LOCATION
    • STREET_ADDRESS
    • ORGANIZATION_NAME
  • infoType 検出器は常に明示的に指定します。空の infoType リストを使用しないでください。

infoType の使用方法

Sensitive Data Protection では、スキャンの構成に含まれる infoType 検出機能を使用して、検査の対象と検出結果の変換方法が決定されます。infoType の名前は、スキャン結果の表示や報告時にも使用されます。

たとえば、テキスト ブロックでメールアドレスを検索する場合は、検査構成で EMAIL_ADDRESS infoType 検出機能 を指定します。テキスト ブロックのメールアドレスを秘匿化する場合は、検査構成と匿名化構成の両方で EMAIL_ADDRESS を指定し、そのタイプを秘匿化または変換する方法を示します。

さらに、組み込みの infoType 検出器とカスタム infoType 検出機能を組み合わせて、スキャン検出結果からメールアドレスのサブセットを除外することもできます。まず、INTERNAL_EMAIL_ADDRESS というカスタム infoType を作成し、内部テスト用メールアドレスを除外するように構成します。次に、EMAIL_ADDRESS の検出結果を含めるようにスキャンを設定しますが、INTERNAL_EMAIL_ADDRESS に一致する検出結果を除外する排他ルールを含めます。カスタム infoType 検出機能の排他ルールやその他の機能の詳細については、カスタム infoType 検出機能の作成をご覧ください。

Sensitive Data Protection には、名前で指定する一連の組み込み infoType 検出機能が用意されています。それぞれについては、infoType 検出機能リファレンスにリストされています。これらの検出器では、さまざまな手法を使用して各タイプを検出し、分類します。たとえば、パターン一致が必要なタイプ、数学的なチェックサムがあるタイプ、特別な数字制限があるタイプ、検出結果に特定の接頭辞またはコンテキストがあるタイプが存在します。

例

コンテンツをスキャンするように Sensitive Data Protection を設定する場合は、スキャンの構成で使用する infoType 検出器を指定します。

たとえば、次の JSON とコードサンプルは、DLP API への単純なスキャン リクエストを示しています。inspectConfig で PHONE_NUMBER 検出機能が指定されています。これは Sensitive Data Protection に対して、指定された文字列内で電話番号をスキャンするように指示しています。

C#

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

Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


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

public class InspectPhoneNumber
{
    public static InspectContentResponse Inspect(
        string projectId,
        string text,
        Likelihood minLikelihood = Likelihood.Possible)
    {
        // Instantiate a client.
        var dlp = DlpServiceClient.Create();

        // Set content item.
        var contentItem = new ContentItem { Value = text };

        // Construct inspect config.
        var inspectConfig = new InspectConfig
        {
            InfoTypes = { new InfoType { Name = "PHONE_NUMBER" } },
            IncludeQuote = true,
            MinLikelihood = minLikelihood
        };

        // Construct a request.
        var request = new InspectContentRequest
        {
            ParentAsLocationName = new LocationName(projectId, "global"),
            InspectConfig = inspectConfig,
            Item = contentItem,
        };

        // Call the API.
        var response = dlp.InspectContent(request);

        // Inspect the results.
        var resultFindings = response.Result.Findings;

        Console.WriteLine($"Findings: {resultFindings.Count}");

        foreach (var f in resultFindings)
        {
            Console.WriteLine("\tQuote: " + f.Quote);
            Console.WriteLine("\tInfo type: " + f.InfoType.Name);
            Console.WriteLine("\tLikelihood: " + f.Likelihood);
        }

        return response;
    }
}

Go

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

Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import (
	"context"
	"fmt"
	"io"

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

// inspectPhoneNumber demonstrates a simple scan request to the Cloud DLP API.
// Notice that the PHONE_NUMBER detector is specified in inspectConfig,
// which instructs Cloud DLP to scan the given string for a phone number.
func inspectPhoneNumber(w io.Writer, projectID, textToInspect string) error {
	// projectID := "my-project-id"
	// textToInspect := "My phone number is (123) 555-6789"

	ctx := context.Background()

	// Initialize a client once and reuse it to send multiple requests. Clients
	// are safe to use across goroutines. When the client is no longer needed,
	// call the Close method to cleanup its resources.
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return err
	}
	// Closing the client safely cleans up background resources.
	defer client.Close()

	// Create and send the request.
	req := &dlppb.InspectContentRequest{
		Parent: fmt.Sprintf("projects/%s/locations/global", projectID),
		Item: &dlppb.ContentItem{
			DataItem: &dlppb.ContentItem_Value{
				Value: textToInspect,
			},
		},
		InspectConfig: &dlppb.InspectConfig{
			// 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
			InfoTypes: []*dlppb.InfoType{
				{Name: "PHONE_NUMBER"},
			},
			IncludeQuote: true,
		},
	}

	// Send the request.
	resp, err := client.InspectContent(ctx, req)
	if err != nil {
		fmt.Fprintf(w, "receive: %v", err)
		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

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

Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


import com.google.cloud.dlp.v2.DlpServiceClient;
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.Likelihood;
import com.google.privacy.dlp.v2.LocationName;
import java.io.IOException;

public class InspectPhoneNumber {

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

  // Inspects the provided text.
  public static void inspectString(String projectId, String textToInspect) 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 dlp = DlpServiceClient.create()) {
      // Specify the type and content to be inspected.
      ContentItem item = ContentItem.newBuilder().setValue(textToInspect).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
      InfoType infoType = InfoType.newBuilder().setName("PHONE_NUMBER").build();

      // Construct the configuration for the Inspect request.
      InspectConfig config =
          InspectConfig.newBuilder()
              .setIncludeQuote(true)
              .setMinLikelihood(Likelihood.POSSIBLE)
              .addInfoTypes(infoType)
              .build();

      // Construct the Inspect request to be sent by the client.
      InspectContentRequest request =
          InspectContentRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").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());
      }
    }
  }
}

Node.js

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

Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// 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 string to inspect
// const string = 'My email is gary@example.com and my phone number is (223) 456-7890.';

// 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;

// The infoTypes of information to match
// See https://cloud.google.com/dlp/docs/concepts-infotypes for more information
// about supported infoTypes.
// const infoTypes = [{ name: 'PHONE_NUMBER' }];

// The customInfoTypes of information to match
// const customInfoTypes = [{ infoType: { name: 'DICT_TYPE' }, dictionary: { wordList: { words: ['foo', 'bar', 'baz']}}},
//   { infoType: { name: 'REGEX_TYPE' }, regex: {pattern: '\\(\\d{3}\\) \\d{3}-\\d{4}'}}];

// Whether to include the matching string
// const includeQuote = true;

async function inspectPhoneNumber() {
  // Construct item to inspect
  const item = {value: string};

  // Construct request
  const request = {
    parent: `projects/${projectId}/locations/global`,
    inspectConfig: {
      infoTypes: infoTypes,
      customInfoTypes: customInfoTypes,
      minLikelihood: minLikelihood,
      includeQuote: includeQuote,
      limits: {
        maxFindingsPerRequest: maxFindings,
      },
    },
    item: item,
  };

  // Run request
  const [response] = await dlp.inspectContent(request);
  const findings = response.result.findings;
  if (findings.length > 0) {
    console.log('Findings:');
    findings.forEach(finding => {
      if (includeQuote) {
        console.log(`\tQuote: ${finding.quote}`);
      }
      console.log(`\tInfo type: ${finding.infoType.name}`);
      console.log(`\tLikelihood: ${finding.likelihood}`);
    });
  } else {
    console.log('No findings.');
  }
}
inspectPhoneNumber();

PHP

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

Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Cloud\Dlp\V2\Client\DlpServiceClient;
use Google\Cloud\Dlp\V2\ContentItem;
use Google\Cloud\Dlp\V2\InfoType;
use Google\Cloud\Dlp\V2\InspectConfig;
use Google\Cloud\Dlp\V2\InspectContentRequest;
use Google\Cloud\Dlp\V2\Likelihood;

/**
 * Inspect data for phone numbers
 * Demonstrates a simple scan request to the Cloud DLP API. Notice that the PHONE_NUMBER detector is specified in inspectConfig, which instructs Cloud DLP to scan the given string for a phone number.
 *
 * @param string $projectId         The Google Cloud project id to use as a parent resource.
 * @param string $textToInspect     The string to inspect.
 */
function inspect_phone_number(
    // TODO(developer): Replace sample parameters before running the code.
    string $projectId,
    string $textToInspect = 'My name is Gary and my phone number is (415) 555-0890'
): void {
    // Instantiate a client.
    $dlp = new DlpServiceClient();

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

    // Specify what content you want the service to Inspect.
    $item = (new ContentItem())
        ->setValue($textToInspect);

    $inspectConfig = (new InspectConfig())
        // The infoTypes of information to match
        ->setInfoTypes([
            (new InfoType())->setName('PHONE_NUMBER'),
        ])
        // Whether to include the matching string
        ->setIncludeQuote(true)
        ->setMinLikelihood(Likelihood::POSSIBLE);

    // Run request
    $inspectContentRequest = (new InspectContentRequest())
        ->setParent($parent)
        ->setInspectConfig($inspectConfig)
        ->setItem($item);
    $response = $dlp->inspectContent($inspectContentRequest);

    // Print the results
    $findings = $response->getResult()->getFindings();
    if (count($findings) == 0) {
        printf('No findings.' . PHP_EOL);
    } else {
        printf('Findings:' . PHP_EOL);
        foreach ($findings as $finding) {
            printf('  Quote: %s' . PHP_EOL, $finding->getQuote());
            printf('  Info type: %s' . PHP_EOL, $finding->getInfoType()->getName());
            printf('  Likelihood: %s' . PHP_EOL, Likelihood::name($finding->getLikelihood()));
        }
    }
}

Python

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

Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import google.cloud.dlp


def inspect_phone_number(
    project: str,
    content_string: str,
) -> None:
    """Uses the Data Loss Prevention API to analyze strings for protected data.
    Args:
        project: The Google Cloud project id to use as a parent resource.
        content_string: The string to inspect phone number from.
    """

    # 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": "PHONE_NUMBER"}]

    # Construct the configuration dictionary.
    inspect_config = {
        "info_types": info_types,
        "include_quote": True,
    }

    # Construct the `item`.
    item = {"value": content_string}

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

    # Call the API.
    response = dlp.inspect_content(
        request={"parent": parent, "inspect_config": inspect_config, "item": item}
    )

    # Print out the results.
    if response.result.findings:
        for finding in response.result.findings:
            print(f"Quote: {finding.quote}")
            print(f"Info type: {finding.info_type.name}")
            print(f"Likelihood: {finding.likelihood}")
    else:
        print("No findings.")

REST

JSON 入力:

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

{
  "item":{
    "value":"My phone number is (415) 555-0890"
  },
  "inspectConfig":{
    "includeQuote":true,
    "minLikelihood":"POSSIBLE",
    "infoTypes":{
      "name":"PHONE_NUMBER"
    }
  }
}

指定されたエンドポイントに上記のリクエストを送信すると、Sensitive Data Protection は次を返します。

JSON 出力:

{
  "result":{
    "findings":[
      {
        "quote":"(415) 555-0890",
        "infoType":{
          "name":"PHONE_NUMBER"
        },
        "likelihood":"VERY_LIKELY",
        "location":{
          "byteRange":{
            "start":"19",
            "end":"33"
          },
          "codepointRange":{
            "start":"19",
            "end":"33"
          }
        },
        "createTime":"2018-10-29T23:46:34.535Z"
      }
    ]
  }
}

検査構成で、リファレンスに記載されている特定の infoType を指定する必要があります。infoType を指定しないと、Sensitive Data Protection はテスト目的でのみ使用されるデフォルトの infoType リストを使用します。デフォルトのリストは、ユースケースに適していない可能性があります。

infoType 検出器を使用してコンテンツをスキャンする方法の詳細については、入門ガイドの検査、秘匿化、匿名化に関するトピックをご覧ください。

確実性とテスト

検出結果は、可能性と呼ばれる確実性スコアで報告されます。可能性スコアは、検出結果が対応するタイプと一致する可能性を示します。たとえば、タイプがパターンにのみ一致する場合は低い可能性を返します。タイプがパターンに一致し、正のコンテキストがある場合は高い可能性を返します。このため、1 つの検出結果が低い可能性で複数のタイプと一致する場合があります。また、適切に一致しない場合またはコンテキストが負の場合は、結果が表示されない、または確実性が低下する可能性があります。たとえば、指定された infoType の構造と一致していても、infoType のチェックサムに失敗した場合、検出結果は報告されないことがあります。ある結果が複数の infoType に一致しても、そのうちの 1 つを優先するコンテキストがあれば、そのタイプについてのみ報告されます。

さまざまな検出器をテストする場合、架空またはサンプルデータは報告に十分なチェックを通過しないため、報告されません。

infoType 検出器の種類

Sensitive Data Protection には、いくつかの種類の infoType 検出機能があります。ここではすべての種類をまとめています。

  • 組み込みの infoType 検出機能は、Sensitive Data Protection に組み込まれています。国またはリージョンに固有の機密データのタイプと、世界中のどこでも適用できるデータタイプに対応する検出器が含まれています。一般的な infoType を使用して、構成を簡素化することもできます。
  • カスタム infoType 検出機能は、ユーザーが作成する検出機能です。カスタム infoType 検出機能には、次の 3 種類があります。
    • 小規模なカスタム辞書検出器は、Sensitive Data Protection が照合する単純な単語リストです。含まれる単語やフレーズの数が数万個までのリストでは、小規模なカスタム辞書検出器を使用します。単語リストが大幅に変更される予定がない場合、小規模なカスタム辞書検出器の使用をおすすめします。
    • 大規模なカスタム辞書検出器は、Sensitive Data Protection によって、Cloud Storage または BigQuery に保存されている単語やフレーズの大規模なリストを使用して生成されます。含まれる単語やフレーズの数が数千万個までの大規模なリストでは、大規模なカスタム辞書検出器を使用します。
    • 正規表現(regex)検出機能を使用すると、Sensitive Data Protection は正規表現パターンに基づいて一致を検出できます。

スキャン結果を絞り込むには、検査ルールを作成します。

組み込みの infoType 検出器

組み込みの infoType 検出器は Sensitive Data Protection に組み込まれており、フランスの Numéro d'Inscription au Répertoire(NIR)(FRANCE_NIR)、英国の運転免許証番号(UK_DRIVERS_LICENSE_NUMBER)、米国の社会保障番号(US_SOCIAL_SECURITY_NUMBER)など、国またはリージョンに固有の機密データのタイプに対応する検出器が含まれています。また、個人名(PERSON_NAME)、電話番号(PHONE_NUMBER)、メールアドレス(EMAIL_ADDRESS)、クレジット カード番号(CREDIT_CARD_NUMBER)など、世界中のどこでも適用できるデータタイプに対応する検出器も含まれています。

組み込みの infoType 検出器のリストは常に更新されています。現在サポートされている組み込みの infoType の全リストについては、infoType 検出器リファレンスをご覧ください。

組み込みの infoType 検出器の全リストは、Sensitive Data Protection の infoTypes.list メソッドを呼び出して表示することもできます。

検出技術

組み込みの infoType に対応するコンテンツを検出するために、Sensitive Data Protection は、パターン マッチング、チェックサム検証、機械学習、コンテキスト分析などのさまざまな手法を使用します。たとえば、CREDIT_CARD_NUMBER infoType を検出するために、Sensitive Data Protection は既知の発行者プレフィックスを確認し、チェックサムを検証し、文字長を分析し、クレジット カード番号の候補が表示されるコンテキストを考慮します。

Sensitive Data Protection のデモは、組み込みの infoType 検出器をテストするために使用できるウェブベースのアプリケーションです。

言語サポート

国固有の infoType は、英語と各国の言語に対応しています。ほとんどのグローバル対応の infoType は複数の言語で動作します。お客様のデータで Sensitive Data Protection をテストし、要件を満たしていることを確認します。

一般的な infoType 検出器と特定の infoType 検出器

一般的な infoType 検出機能は、一般的な infoType 検出機能よりも広範に定義された検出機能であり、機密性の高い情報タイプを幅広く照合できます。一般的な infoType 検出器は、共通の属性または目的を共有する特定の infoType 検出器のスーパーセットです。たとえば、DRIVERS_LICENSE_NUMBER infoType 検出機能は、GERMANY_DRIVERS_LICENSE_NUMBER infoType と CANADA_DRIVERS_LICENSE_NUMBER infoType に一致するコンテンツを検出できます。

多くの場合、一般的な infoType 検出機能は、特定の infoType 検出機能では検出できない一致を検出することもできます。たとえば、PASSPORT 検出機能は、国固有のパスポート検出機能よりもパスポート番号の検出に優れています。国固有のパスポート検出機能では、コンテキストの手がかりや、特定の形式のコンテンツが必要になることがあります。

検査構成では、特定の infoType 検出機能の代わりに一般的な infoType 検出機能を使用できます。Sensitive Data Protection は、リクエストで指定した検出機能に基づいて結果を表示します。たとえば、検査する文字列が GERMANY_DRIVERS_LICENSE_NUMBER infoType と一致し、リクエストで DRIVERS_LICENSE_NUMBER と GERMANY_DRIVERS_LICENSE_NUMBER の両方をスキャンした場合、同じ文字列に対して 2 つの検出結果(DRIVERS_LICENSE_NUMBER 用と GERMANY_DRIVERS_LICENSE_NUMBER 用)が返されます。ただし、リクエストで DRIVERS_LICENSE_NUMBER のみをスキャンした場合、検査結果には DRIVERS_LICENSE_NUMBER の検出結果のみが表示されます。

一般的な infoType 検出機能を使用すると、次のようなメリットがあります。

  • 多くの場合、一般的な infoType 検出器は、特定の infoType 検出器よりも再現率が高くなります。再現率は、関連するインスタンスの総数のうち、真陽性のインスタンスの数です。

  • スキャンする必要がある特定の infoType を指定する必要がないため、Sensitive Data Protection リクエストを簡素化できます。たとえば、GOVERNMENT_ID infoType 検出機能だけでも、100 を超える異なる infoType 検出機能が含まれています。

  • リクエストごとに 150 個の infoType 検出器の上限に達する可能性は低くなります。

  • Sensitive Data Protection が新しい infoType をリリースし、既存の構成で指定されている一般的な infoType に追加すると、Sensitive Data Protection は新しい infoType をスキャンに自動的に含めます。新しくリリースされた infoType を既存の構成に手動で追加する必要はありません。

一般的な infoType と具体的な infoType には多対多の関係があります。つまり、一般的な infoType には多くの具体的な infoType を含めることができ、具体的な infoType は多くの一般的な infoType に属することができます。一般的な infoType と、それらに含まれる特定の infoType の完全なリストについては、一般的な infoType をご覧ください。

カスタム infoType 検出機能

カスタム infoType 検出機能には、次の 3 種類があります。

スキャン結果を絞り込むには、検査ルールを作成します。

小規模なカスタム辞書検出器

小規模なカスタム辞書検出器(「標準のカスタム辞書検出器」とも呼ばれます)を使用して、最大でも数万個の単語またはフレーズを含む小規模のリストを照合します。小規模なカスタム辞書は、この辞書独自の一意の検出器として使用できます。

カスタム辞書検出器は、正規表現や組み込みの検出器で簡単に照合できない単語やフレーズのリストをスキャンする場合に役立ちます。たとえば、会議室をスキャンする場合に、会議室が通常、番号ではなく割り当てられている名前(都道府県名や地域名、ランドマーク、架空の文字など)で呼ばれているとします。こうした会議室名のリストを含めて、小規模なカスタム辞書検出器を作成できます。Sensitive Data Protection は、各会議室名の内容をスキャンし、コンテキスト内でいずれかの会議室名が検出されると一致を返します。Sensitive Data Protection で辞書の単語とフレーズを照合する方法については、標準のカスタム辞書検出機能の作成の「辞書の照合の詳細」セクションをご覧ください。

小規模なカスタム infoType 検出機能の働きと実際の使用例については、標準のカスタム辞書検出器の作成をご覧ください。

大規模なカスタム辞書検出器

大規模なカスタム辞書検出器(「保存済みカスタム辞書検出器」とも呼ばれます)は、スキャンする単語またはフレーズの数が 2~3 個を超える場合、または単語あるいはフレーズのリストが頻繁に変更される場合に使用します。大規模なカスタム辞書検出器では、最大で数千万個もの単語やフレーズに対する照合ができます。

大規模なカスタム辞書検出器は、正規表現のカスタム検出器と小規模なカスタム辞書検出器のどちらとも異なる方法で作成されます。大規模なカスタム辞書には、それぞれ次の 2 つのコンポーネントがあります。

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

単語リストを作成し、Sensitive Data Protection を使用してカスタム辞書を生成したら、他の infoType 検出機能と同様の方法で、大規模なカスタム辞書検出機能を使用するスキャンを開始またはスケジュールします。

大規模なカスタム辞書検出器の働きと実際の使用例については、格納されるカスタム辞書検出器の作成をご覧ください。

正規表現

正規表現(regex)カスタム infoType 検出機能を使用すると、Sensitive Data Protection で正規表現パターンに基づいて一致を検出するための独自の infoType 検出機能を作成できます。たとえば、###-#-##### という形式のカルテ番号があるとします。この場合、次のような正規表現パターンを定義できます。

[1-9]{3}-[1-9]{1}-[1-9]{5}

Sensitive Data Protection では、次のような項目が照合されます。

123-4-56789

各カスタム infoType の一致に割り当てる可能性を指定することもできます。つまり、Sensitive Data Protection で指定したシーケンスと一致すると、指定した可能性が割り当てられます。これは、カスタム正規表現によって定義されたシーケンスが一般性の度合いが高く、他のランダムなシーケンスと容易に一致する場合に有効です。そのような場合に、Sensitive Data Protection によってすべての一致に VERY_LIKELY のラベルを付けると、スキャン結果の信頼性が損なわれ、誤った情報が一致し、匿名化するおそれがあります。

正規表現カスタム infoType 検出機能の詳細と実際の使用例については、カスタム正規表現検出機能の作成をご覧ください。

検査ルール

検査ルールを使用して、既存の infoType 検出器(組み込みまたはカスタム)によって返される結果を細かく調整できます。既存の infoType 検出器でルールを追加および除外することで、機密データの保護から返される結果を適切な内容にする必要がある場合に、検査ルールが有効です。

検査ルールの詳細については、スキャン結果を絞り込むための infoType 検出器の変更をご覧ください。

排他ルール

除外ルールを適用すると、組み込みまたはカスタムの infoType 検出器にルールを追加することで、返される結果の数や精度を下げることができます。除外ルールを適用すると、infoType 検出器によって返される結果に含まれるノイズや不要な内容を少なくできます。

たとえば、メールアドレスのデータベースをスキャンする場合、排他ルールをカスタムの正規表現の形式で追加することで、末尾が「@example.com」の検出結果を除外するように Sensitive Data Protection に指示できます。

除外ルールの詳細については、スキャン結果を絞り込むための infoType 検出器の変更をご覧ください。

起動ワードルール

起動ワードルールを適用すると、組み込みまたはカスタムの infoType 検出器にルールを追加することで、返される結果の数や精度を向上させることができます。ホットワード ルールによって、既存の infoType 検出器のルールを効果的に緩和できます。

たとえば、医療データベースで患者名をスキャンするとします。Sensitive Data Protection の組み込み PERSON_NAME infoType 検出機能を使用できますが、その場合、Sensitive Data Protection では、患者名だけでなくすべての人の名前が一致してしまいます。これを修正するには、起動ワードルールを正規表現のカスタム infoType の形式で組み込んで、一致候補の最初の文字から特定の文字の近接性の範囲内で単語「患者」を探します。このパターンに一致した結果は特殊な基準を満たしているので、可能性として「very likely」を割り当てることができます。

起動ワードルールの詳細については、スキャン結果を絞り込むための infoType 検出器の変更をご覧ください。

例

infoType の結果に対する一致の仕方を理解するには、次の例をご覧ください。一連の数字に対する一致の例を確認して、米国社会保障番号を構成しているか、米国個人納税者番号を構成しているかを判断します。これらの例は、組み込みの infoType 検出器を対象としていることに注意してください。カスタム infoType 検出機能を作成するときに、スキャンの一致の可能性を判断する条件を指定します。

例 1

"SSN 222-22-2222"

次の理由により、US_SOCIAL_SECURITY_NUMBER に対して高い可能性スコア VERY_LIKELY を報告します。

  • 標準的な社会保障番号の形式であるため、確実性が高まります。
  • コンテキスト(SSN)が近くにあり、US_SOCIAL_SECURITY_NUMBER に対して優先順位が上がります。

例 2

"999-99-9999"

次の理由により、US_SOCIAL_SECURITY_NUMBER に対して低い可能性スコア VERY_UNLIKELY を報告します。

  • 標準形式であるため、確実性が高まります。
  • 9 で始まります。これは社会保障番号では許可されていないため、確実性が低下します。
  • コンテキストが欠けているため、確実性が低下します。

例 3

"999-98-9999"

次の理由により、US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER に対して POSSIBLE、US_SOCIAL_SECURITY_NUMBER に対して VERY_UNLIKELY の可能性スコアを報告します。

  • US_SOCIAL_SECURITY_NUMBER と US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER の両方の標準形式があります。
  • 9 で始まり、別の数字チェックがあるので US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER の確実性が高まります。
  • コンテキストが欠けているため、両方の確実性が低下します。

調整ルール

調整ルールを使用すると、検出結果が表示されるコンテキストに基づいて、検出結果の可能性値を増減(ブーストとも呼ばれます)することで、検出精度を向上させることができます。

たとえば、調整ルールを使用して、DOCUMENT_TYPE/CONTEXT/FINANCE に一致するドキュメントに GENERIC_ID の検出結果が表示された場合に、その検出結果の可能性値を増やすことができます。

詳細については、調整ルールをご覧ください。

次のステップ

機密データの保護チームは、新しい infoType 検出器とグループを定期的にリリースしています。組み込み infoType の最新の一覧を取得する方法については、組み込みの infoType 検出器の一覧表示をご覧ください。