Specifica delle località di elaborazione

Grazie alla possibilità di specificare una regione in cui eseguire le operazioni di Sensitive Data Protection, puoi controllare dove vengono trattati i tuoi dati potenzialmente sensibili. Questo documento spiega il concetto di località di trattamento di Sensitive Data Protection e mostra come specificare una regione.

Per un elenco delle regioni e delle regioni multiple supportate, consulta Località di Sensitive Data Protection.

Informazioni su regioni e regioni multiple

Una regione è un luogo geografico ben preciso, come gli Stati Uniti occidentali o l'Asia nord-orientale. Una località a più regioni (o semplicemente più regioni) è un'area geografica di grandi dimensioni, come l'Unione Europea, che contiene due o più regioni geografiche.

Considerazioni sulla località

Una buona località bilancia i costi di latenza, disponibilità e larghezza di banda.

  • Usa una regione per ottimizzare la latenza e la larghezza di banda della rete.

  • Utilizza più regioni quando vuoi trattare i dati al di fuori della rete Google e distribuiti in aree geografiche di grandi dimensioni o quando vuoi la maggiore disponibilità offerta dalla ridondanza tra le regioni.

  • In genere, devi trattare i dati in una località comoda o che contenga la maggior parte degli utenti dei tuoi dati.

  • Se la tua organizzazione è tenuta a conservare i dati in transito all'interno di una località specificata, utilizza solo le regioni o le regioni multiple che supportano gli endpoint regionali (REP). In questo caso, devi utilizzare l'API Cloud Data Loss Prevention, perché gli endpoint regionali per Sensitive Data Protection non sono disponibili per l'utilizzo con la Google Cloud console.

Specificare una regione

La modalità di specificare la regione di trattamento dipende dal tipo di endpoint a cui invii la richiesta: l'endpoint globale o un endpoint regionale. Il tipo di endpoint scelto dipende dal fatto che tu sia tenuto a conservare i dati in transito all'interno di una regione specificata. Per ulteriori informazioni, consulta Endpoint globali e regionali per Sensitive Data Protection.

Specificare una regione in una richiesta all'endpoint globale

Console

Scegli una regione quando configuri l'operazione di Sensitive Data Protection.

Ad esempio, quando crei un trigger di job, scegli una località dal menu Località delle risorse, come mostrato di seguito:

Se la località di trattamento non è un problema, utilizza la regione Globale e Google sceglie la località in cui deve avvenire il trattamento. Globale è la scelta della regione predefinita.

REST

Inserisci le informazioni sulla regione nell'URL dell'endpoint della richiesta. Se la località di trattamento non è un problema, utilizza la regione global e Google sceglie la località in cui deve avvenire il trattamento. Tieni presente che tutte le risorse create da una richiesta che specifica la regione global vengono archiviate nella regione global.

Di seguito sono riportate alcune richieste di esempio all'endpoint globale.

Utilizzo della regione globale

Le due richieste seguenti hanno lo stesso effetto. Non includere una regione equivale a specificare 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

Utilizzo di una regione specifica

Per specificare una regione per il trattamento, inserisci locations/ e poi il nome della regione nell'URL della risorsa.

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

Specificare una regione in una richiesta a un endpoint regionale

Console

Per Sensitive Data Protection, gli endpoint regionali non sono disponibili per l'utilizzo con la Google Cloud console.

C#

Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.

Per eseguire l'autenticazione in Sensitive Data Protection, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


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

Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.

Per eseguire l'autenticazione in Sensitive Data Protection, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.

Per eseguire l'autenticazione in Sensitive Data Protection, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


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

L'esempio seguente invia una richiesta content.inspect a un endpoint regionale. Tutti i dati allegati a questa richiesta rimangono nella regione specificata durante il transito, l'utilizzo e l'archiviazione.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • REP_REGION: una regione in cui è disponibile un endpoint regionale (REP) per Sensitive Data Protection, ad esempio us-west2. Per un elenco completo delle regioni, consulta Località di Sensitive Data Protection.
  • PROJECT_ID: il tuo Google Cloud ID progetto. Gli ID progetto sono stringhe alfanumeriche, come example-project.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Considerazioni sulla colocation

Quando esegui la scansione di un repository di archiviazione come Cloud Storage o BigQuery, devi specificare la stessa località nella richiesta di Sensitive Data Protection della località del repository di cui stai eseguendo la scansione. Ad esempio, se il set di dati BigQuery si trova nella località a più regioni dell'Unione Europea, specifica la località a più regioni dell'Unione Europea (europe) quando configuri il job di Sensitive Data Protection.

Se non esegui la colocation della richiesta di Sensitive Data Protection con il repository di archiviazione di cui stai eseguendo la scansione, il trattamento della richiesta potrebbe essere suddiviso tra la località dei dati e la località specificata nella richiesta.

Passaggi successivi