infoType 및 infoType 감지기

민감한 정보 보호는 정보 유형(즉, infoType)을 사용하여 스캔할 대상을 정의합니다. infoType은 이름, 이메일 주소, 전화번호, 식별 번호, 신용카드 번호와 같은 민감한 정보 유형입니다. infoType 감지기는 infoType의 일치 기준과의 일치 여부를 감지하는 메커니즘입니다.

infoType 선택 권장사항

데이터를 보호하기 위한 첫 번째 중요한 단계 중 하나는 데이터를 이해하는 것입니다. 비즈니스 요구사항이 있는 정보만 수집, 저장, 처리하는 것이 좋습니다. 처리 중인 데이터를 식별하면 비즈니스, 사용자, 데이터 보안 및 개인 정보 보호 상태에 관해 정보에 입각한 결정을 내릴 수 있습니다.

일부 비즈니스 사용 사례에는 특정 민감한 정보가 필요할 수 있고, 그렇지 않은 경우도 있습니다. 모든 사용 사례를 지원하는 단일 솔루션은 없습니다. 이러한 이유로 Sensitive Data Protection은 스캔할 데이터 유형을 유연하게 제어할 수 있습니다. 익명화 또는 마스킹에 infoType을 사용하는 경우 데이터가 변환되는 시점과 방식도 제어할 수 있습니다.

일반 가이드라인

infoTypes을 선택할 때는 다음과 같은 일반적인 가이드라인을 고려하세요.

수집할 필요가 없는 민감한 정보

비즈니스의 각 서비스는 서비스에 필요한 데이터만 수집해야 합니다. 예를 들어 비즈니스의 특정 서비스는 금융 정보를 수집할 필요가 없습니다. 이러한 서비스의 경우 CREDIT_CARD_NUMBER, FINANCIAL_ACCOUNT_NUMBER과 같은 infoType 감지기와 업계 카테고리 FINANCE의 기타 infoType을 사용 설정하는 것이 좋습니다.

수집해야 하지만 팀과 광범위하게 공유하고 싶지 않은 정보

개인 정보를 수집하는 데 타당한 사용 사례가 있을 수 있지만 팀과 광범위하게 공유해서는 안 됩니다. 예를 들어 고객이 지원 티켓을 제출하면 문제를 해결하기 위해 연락할 수 있도록 연락처 정보를 제공할 수 있습니다. 티켓을 보는 팀원 모두에게 개인 식별 정보 (PII)가 표시되지 않도록 하려면 유형 카테고리 PII에서 PHONE_NUMBER, EMAIL_ADDRESS 및 기타 infoType과 같은 infoType 감지기를 사용 설정하는 것이 좋습니다.

업계, 데이터 개인 정보 보호 또는 관할권 규제 대상인 민감한 데이터 카테고리

특정 정보 유형은 발급 방식이나 사용 용도 때문에 민감한 정보로 간주됩니다. 그 밖의 경우에는 문맥 및 인구통계 정보가 보호되는 카테고리로 간주됩니다. 이러한 유형의 정보는 수집, 사용, 관리 방법에 추가 제한이 적용될 수 있습니다. 다음 카테고리에서 infoType 감지기를 사용 설정하는 것이 좋습니다.

유사한 infoType 중에서 선택

유사한 infoType 감지기 중에서 선택할 때는 다음 사항을 고려하세요.

여권

특정 국가의 여권 식별자를 스캔할 필요가 없는 경우 일반화된 감지기 PASSPORT를 선택합니다.

UK_PASSPORT와 같은 특정 국가별 여권 감지기를 사용할 수 있습니다. 하지만 일부 국가별 여권 감지기는 특정 형식의 여권이나 문맥적 단서가 있는 여권만 식별할 수 있습니다.

사람 이름

사람 이름을 스캔할 때 대부분의 사용 사례에서는 FIRST_NAME 또는 LAST_NAME 대신 PERSON_NAME를 사용하세요.

PERSON_NAME은 사람 이름 감지기입니다. 단어 하나의 이름과 전체 이름이 포함됩니다. 이 감지기는 자연어 이해를 비롯한 다양한 기술을 사용하여 제인, 제인 스미스, 제인 마리 스미스와 같은 이름을 감지하려고 시도합니다. FIRST_NAMELAST_NAME는 이름의 일부를 식별하려는 이 감지기의 하위 집합입니다. 이러한 감지기의 발견 항목은 항상 PERSON_NAME의 발견 항목의 하위 집합입니다.

날짜 및 시간

모든 날짜를 스캔할 필요가 없는 경우 DATE_OF_BIRTH와 같은 타겟팅된 날짜 감지기를 사용하는 것이 좋습니다. 이 감지기는 날짜가 사람의 출생 날짜와 관련이 있음을 나타내는 컨텍스트를 식별하려고 시도합니다.

DATE 감지기는 컨텍스트와 관계없이 모든 날짜를 찾으려고 시도합니다. 또한 오늘 또는 어제와 같은 상대 날짜를 표시합니다. 마찬가지로 TIME는 모든 타임스탬프를 찾으려고 시도합니다.

위치

모든 위치를 스캔할 필요가 없는 경우 LOCATION 감지기 대신 STREET_ADDRESS를 사용하는 것이 좋습니다. STREET_ADDRESS 감지기는 일반적인 위치보다 일반적으로 더 정확하고 더 민감하다고 간주될 수 있는 정규화된 주소를 찾으려고 시도합니다.

LOCATION infoType 감지기는 컨텍스트와 관계없이 위치를 찾으려고 시도합니다(예: 파리 또는 캐나다).

컨텍스트가 필요한 InfoType 감지기

많은 infoType 감지기는 일치 항목을 식별하기 전에 문맥 단서가 있어야 합니다. 내장 infoType 감지기가 해당 항목과 매우 가까운 위치에 문맥 단서가 없으므로 예상되는 항목을 표시하지 않는 경우 GENERIC_ID 또는 커스텀 infoType 감지기를 대신 사용하는 것이 좋습니다.

일반적인 업계 정의가 없는 정보 유형

일부 정보 유형에는 공통적인 업계 정의가 없습니다. 예를 들어 의료 기록 번호, 계정 번호, PIN, 보안 코드 등이 있습니다. 이러한 유형의 경우 GENERIC_ID, FINANCIAL_ACCOUNT_NUMBER, MEDICAL_RECORD_NUMBER와 같은 infoType을 사용하는 것이 좋습니다. 이러한 감지기는 엔티티 감지와 컨텍스트를 조합하여 민감할 수 있는 요소를 찾습니다.

지연 시간이 더 긴 infoType 감지기

  • 필요하지 않은 infoType 감지기는 사용 설정하지 않습니다. 특정 시나리오에서는 infoType이 유용할 수 있지만 이러한 infoType이 포함되지 않은 요청보다 훨씬 느리게 실행될 수 있습니다.

    • PERSON_NAME
    • FEMALE_NAME
    • MALE_NAME
    • FIRST_NAME
    • LAST_NAME
    • DATE_OF_BIRTH
    • LOCATION
    • STREET_ADDRESS
    • ORGANIZATION_NAME
  • 항상 infoType 감지기를 명시적으로 지정하세요. 비어 있는 infoTypes 목록을 사용하지 마세요.

infoType 사용 방법

민감한 정보 보호는 해당 스캔 구성에서 infoType 감지기를 사용하여 검사 대상과 발견 항목 변환 방법을 결정합니다. infoType 이름은 스캔 결과를 표시 또는 보고할 때도 사용됩니다.

예를 들어 텍스트 블록에서 이메일 주소를 찾으려면 검사 구성에 EMAIL_ADDRESS infoType 감지기를 지정합니다. 텍스트 블록에서 이메일 주소를 수정하려면 검사 구성과 익명화 구성 모두에 EMAIL_ADDRESS를 지정하여 해당 유형을 수정하거나 변환하는 방법을 지정합니다.

또한 기본 제공 infoType 감지기와 커스텀 infoType 감지기를 적절히 조합해 사용하여 스캔 결과에서 일부 이메일 주소를 제외할 수 있습니다. 먼저 INTERNAL_EMAIL_ADDRESS라는 커스텀 infoType을 만들고 내부 테스트 이메일 주소를 제외하도록 구성합니다. 그런 다음 EMAIL_ADDRESS에 대한 결과를 포함하되 INTERNAL_EMAIL_ADDRESS와 일치하는 결과를 제외하는 제외 규칙을 포함하도록 스캔을 설정할 수 있습니다. 제외 규칙 및 커스텀 infoType 감지기의 기타 기능에 대한 자세한 내용은 커스텀 infoType 감지기 만들기를 참조하세요.

민감한 정보 보호는 이름으로 지정한 일련의 infoType 감지기를 기본 제공합니다. 각 항목은 InfoType 감지기 참조에 나와 있습니다. 이러한 감지기는 다양한 기술을 사용하여 각 유형을 탐색하고 분류합니다. 예를 들어 일부 유형에는 패턴 일치가 필요하고, 일부 유형에는 수학 체크섬을 사용하고, 일부에는 특수한 자릿수 제한이 있으며, 다른 일부에는 결과에 특정 프리픽스 또는 컨텍스트가 있을 수 있습니다.

예시

콘텐츠를 스캔하도록 민감한 정보 보호를 설정할 때는 스캔 구성에 사용할 infoType 감지기를 포함합니다.

예를 들어 다음 JSON 및 코드 샘플은 DLP API에 대한 간단한 스캔 요청을 보여줍니다. PHONE_NUMBER 감지기는 inspectConfig에 지정되어 있으며, 이는 민감한 정보 보호가 지정된 문자열에서 전화번호를 스캔하도록 지시합니다.

C#

민감한 정보 보호의 클라이언트 라이브러리를 설치하고 사용하는 방법은 민감한 정보 보호 클라이언트 라이브러리를 참조하세요.

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에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

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에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


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에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// 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에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

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에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

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"
    }
  }
}

앞의 요청을 지정된 엔드포인트로 보내면 민감한 정보 보호에서 다음을 반환합니다.

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을 지정하지 않으면 민감한 정보 보호는 테스트 전용 기본 infoTypes 목록을 사용합니다. 기본 목록은 사용 사례에 적합하지 않을 수 있습니다.

infoType 감지기를 사용하여 콘텐츠를 스캔하는 방법에 대한 자세한 내용은 검사, 수정, 익명화에 대한 안내 항목을 참조하세요.

확실성 및 테스트

결과는 가능성이라는 확실성 점수로 보고됩니다. 가능성 점수는 결과가 해당 유형과 일치할 가능성을 나타냅니다. 예를 들어 유형이 패턴과만 일치하는 경우 더 낮은 가능성을 반환하며, 패턴과 일치하고 주변에 긍정적인 컨텍스트가 있는 경우 더 높은 가능성을 반환할 수 있습니다. 따라서 단일 결과가 낮은 가능성 점수로 여러 유형에 일치할 수 있습니다. 또한 결과가 제대로 일치하지 않거나 주변에 부정적인 컨텍스트가 있는 경우 결과가 나타나지 않거나 확실성이 더 낮을 수 있습니다. 예를 들어 지정된 infoType의 구조와 일치하지만 infoType의 체크섬에 실패하면 결과가 보고되지 않을 수 있습니다. 또는 결과가 두 개 이상의 infoType과 일치할 수 있지만 그중 하나의 점수를 올리는 컨텍스트가 있는 경우 해당 유형에 대해서만 보고됩니다.

다양한 감지기를 테스트하는 경우 허위 또는 샘플 데이터가 보고하기에 충분한 검사를 통과하지 못하여 허위 또는 샘플 데이터가 보고되지 않는 경우가 있을 수 있습니다.

infoType 감지기의 종류

민감한 정보 보호에는 여러 종류의 infoType 감지기가 있습니다. 이러한 모든 감지기를 요약하면 다음과 같습니다.

  • 기본 제공 infoType 감지기는 민감한 정보 보호에 기본 제공된 감지기입니다. 여기에는 전역적으로 적용 가능한 데이터 유형은 물론 국가 또는 리전별 민감한 정보 유형에 대한 감지기가 포함됩니다.
  • 커스텀 infoType 감지기는 개발자가 직접 만드는 감지기입니다. 커스텀 infoType 감지기에는 다음과 같은 세 가지 종류가 있습니다.
    • 소형 커스텀 사전 감지기는 민감한 정보 보호 조치에서 일치 항목을 검색하는 간단한 단어 목록입니다. 목록에 포함된 단어 또는 구문의 수가 최대 수만 개 수준인 경우 소형 커스텀 사전 감지기를 사용합니다. 단어 목록이 크게 변경되지 않을 것으로 예상되는 경우 소형 커스텀 사전 감지기를 사용하는 것이 좋습니다.
    • 대형 커스텀 사전 감지기는 Cloud Storage 또는 BigQuery에 저장된 대량의 단어 또는 구문 목록을 통해 민감한 정보 보호에서 생성됩니다. 목록에 포함된 단어 또는 구문의 수가 최대 수천만 개 수준으로 많은 경우 대형 커스텀 사전 감지기를 사용합니다.
    • 정규 표현식(정규식) 감지기를 사용 설정하면 민감한 정보 보호에서 정규 표현식 패턴을 기준으로 일치 항목을 감지할 수 있습니다.

또한 민감한 정보 보호에는 다음을 사용하여 스캔 결과를 세부 조정할 수 있게 해주는 검사 규칙 개념이 포함되어 있습니다.

  • 제외 규칙은 기본 제공 또는 커스텀 infoType 감지기에 규칙을 추가하여 반환되는 결과의 수를 줄일 수 있게 해줍니다.
  • 핫워드 규칙을 사용하면 기본 제공 또는 커스텀 infoType 감지기에 규칙을 추가하여 반환되는 결과의 양을 늘리거나 가능성 값을 변경할 수 있습니다.

내장 infoType 감지기

기본 제공 infoType 감지기는 민감한 정보 보호에 기본 제공되며 프랑스 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 감지기 참조에서 볼 수 있습니다.

또한 민감한 정보 보호의 infoTypes.list 메서드를 호출하여 기본 제공되는 모든 infoType 감지기의 전체 목록을 볼 수 있습니다.

언어 지원

국가별 infoType은 영어와 해당 국가의 언어를 지원합니다. 대부분의 전역 infoType은 여러 언어로 작동합니다. 데이터로 민감한 정보 보호를 테스트하여 요구사항을 충족하는지 확인합니다.

커스텀 infoType 감지기

커스텀 infoType 감지기에는 다음과 같은 세 가지 종류가 있습니다.

또한 민감한 정보 보호에는 기존 감지기에 다음을 추가하여 스캔 결과를 세부 조정할 수 있게 해주는 검사 규칙이 포함됩니다.

소형 커스텀 사전 감지기

소형 커스텀 사전 감지기('일반 커스텀 사전 감지기'라고도 함)를 사용하여 최대 수만 개로 구성된 짧은 단어 또는 구문 목록과 일치 항목을 확인할 수 있습니다. 소형 커스텀 사전은 그 자체로 고유한 감지기가 될 수 있습니다.

커스텀 사전 감지기는 정규 표현식 또는 기본 제공 감지기로는 쉽게 일치 항목을 확인할 수 없는 단어 또는 구문 목록을 스캔하려는 경우 유용합니다. 예를 들어 방 번호보다는 시 또는 지역 이름, 명소, 가상 캐릭터 등 할당된 방 이름으로 지칭되는 경우가 많은 회의실을 스캔하려는 경우를 가정해 보겠습니다. 이러한 방 이름 목록을 포함하는 소형 커스텀 사전 감지기를 만들 수 있습니다. 민감한 정보 보호는 콘텐츠에서 각 방 이름을 스캔하고 컨텍스트에서 이러한 방 이름 중 하나를 발견하면 일치 항목을 반환합니다. 일반 커스텀 사전 감지기 만들기의 '사전 일치 세부사항' 섹션에서 민감한 정보 보호에서 일치하는 사전 단어와 구문을 검색하는 방법을 알아보세요.

소형 사전 커스텀 infoType 감지기의 작동 방식과 실제 예시는 일반 커스텀 사전 감지기 만들기를 참조하세요.

대형 커스텀 사전 감지기

스캔할 단어나 구문이 많거나 단어 또는 구문 목록이 자주 변경되는 경우 대형 커스텀 사전 감지기('저장된 커스텀 사전 감지기'라고도 함)를 사용합니다. 대형 커스텀 사전 감지기는 최대 수천만 개의 단어 또는 구문에서 일치 항목을 확인할 수 있습니다.

대형 커스텀 사전 감지기는 정규 표현식 커스텀 감지기 및 일반 커스텀 사전 감지기와는 다르게 만들어집니다. 각 대형 커스텀 사전에는 다음과 같은 두 가지 구성요소가 있습니다.

  • 사용자가 만들고 정의하는 구문 목록. 이 목록은 Cloud Storage 내에 텍스트 파일로 또는 BigQuery 테이블에 열로 저장됩니다.
  • 구문 목록을 기준으로 민감한 정보 보호에서 생성한 사전 파일. 사전 파일은 Cloud Storage에 저장되며 원본 구문 데이터, 그리고 검색 및 일치 확인을 보조하는 블룸 필터로 구성됩니다. 이러한 파일은 직접 편집할 수 없습니다.

단어 목록을 만든 후 민감한 정보 보호를 사용하여 커스텀 사전을 생성했으면 다른 infoType 감지기와 비슷한 방식으로 대형 커스텀 사전 감지기를 사용하여 스캔을 시작하거나 예약할 수 있습니다.

대형 커스텀 사전 감지기의 작동 방식과 실제 예시는 저장된 커스텀 사전 감지기 만들기를 참조하세요.

정규 표현식

정규 표현식(정규식) 커스텀 infoType 감지기를 사용하면 민감한 정보 보호에서 정규 표현식 패턴을 기준으로 일치 항목을 감지할 수 있게 해주는 자체 infoType 감지기를 만들 수 있습니다. 예를 들어 ###-#-##### 형식의 의료 레코드 번호가 있다고 가정한다면 다음과 같은 정규 표현식 패턴을 정의할 수 있습니다.

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

그러면 민감한 정보 보호에서 다음과 같은 일치 항목을 검색합니다.

123-4-56789

또한 각 커스텀 infoType 일치 항목에 할당할 가능성을 지정할 수 있습니다. 즉, 민감한 정보 보호가 지정한 시퀀스와 일치하면 개발자가 지정한 가능성을 할당합니다. 커스텀 정규식에서 정의한 시퀀스가 다른 무작위 시퀀스와 쉽게 일치할 정도로 충분히 일반적이면 민감한 정보 보호가 모든 일치 항목에 VERY_LIKELY 라벨을 지정하도록 할 필요가 없으므로 이 기능이 도움이 됩니다. 그렇지 않으면 스캔 결과의 신뢰도가 낮아지고 잘못된 정보가 익명화될 수 있습니다.

정규 표현식 커스텀 infoType 감지기에 대한 자세한 내용과 사용 예시는 커스텀 정규 표현식 감지기 만들기를 참조하세요.

검사 규칙

검사 규칙을 사용하여 기존 infoType 감지기(기본 제공 또는 커스텀)가 반환한 결과를 상세검색할 수 있습니다. 검사 규칙은 기존 infoType 감지기에서 추가 및 제외하는 방법으로 민감한 정보 보호에서 반환하는 결과를 보강해야 하는 경우에 유용할 수 있습니다.

검사 규칙의 두 가지 유형은 다음과 같습니다.

  • 제외 규칙
  • 핫워드 규칙

검사 규칙에 대한 자세한 내용은 InfoType 감지기를 수정하여 스캔 결과 상세검색을 참조하세요.

제외 규칙

제외 규칙은 기본 제공 또는 커스텀 infoType 감지기에 규칙을 추가하여 반환되는 결과의 수량 또는 정밀도를 낮출 수 있게 해줍니다. 제외 규칙은 infoType 감지기에서 반환하는 노이즈 또는 기타 원치 않는 결과를 줄이는 데 도움이 될 수 있습니다.

예를 들어 데이터베이스에서 이메일 주소를 스캔하는 경우 커스텀 정규식 형태로 제외 규칙을 추가하여 민감한 정보 보호에 '@example.com'으로 끝나는 모든 발견 항목을 제외하도록 지시할 수 있습니다.

제외 규칙에 대한 자세한 내용은 InfoType 감지기를 수정하여 스캔 결과 상세검색을 참조하세요.

핫워드 규칙

핫워드 규칙은 기본 제공 또는 커스텀 infoType 감지기에 규칙을 추가하여 반환되는 결과의 수량 또는 정확성을 높일 수 있게 해줍니다. 핫워드 규칙은 기존 infoType 감지기의 규칙을 느슨하게 하는 데 효과적입니다.

예를 들어 의료 데이터베이스에서 환자 이름을 스캔하려는 경우를 가정해 보겠습니다. 민감한 정보 보호에서 기본 제공하는 PERSON_NAME infoType 감지기를 사용할 수 있지만 민감한 정보 보호는 환자 이름뿐만 아니라 모든 사람의 이름에서 일치 항목을 검색합니다. 이 문제를 해결하려면 잠재적인 일치 항목의 첫 글자로부터 특정 문자 수만큼의 근접도 내에서 'patient'라는 단어를 찾는 정규식 커스텀 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_NUMBERUS_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER 모두 표준 형식입니다.
  • 9로 시작하며 US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER의 확실성을 높이는 다른 자릿수 검사가 있습니다.
  • 컨텍스트가 부족하여 두 가지 모두 확실성이 떨어집니다.

다음 단계

민감한 정보 보호팀은 새 infoType 감지기와 그룹을 정기적으로 출시합니다. 기본 제공 infoType의 최신 목록을 가져오는 방법은 기본 제공 infoType 감지기 나열을 참조하세요.