Especificar ubicaciones de procesamiento

Al poder especificar una región en la que realizar tus operaciones de Protección de Datos Sensibles, puedes controlar dónde se tratan tus datos potencialmente sensibles. En este documento se explica el concepto de ubicación de procesamiento de Protección de Datos Sensibles y se muestra cómo especificar una región.

Para ver una lista de las regiones y multirregiones admitidas, consulta Ubicaciones de Protección de Datos Sensibles.

Información sobre las regiones y las multirregiones

Una región es un lugar geográfico específico, como el oeste de Estados Unidos o el noreste de Asia. Una ubicación multirregional (o simplemente multirregión) es una zona geográfica amplia, como la Unión Europea, que contiene dos o más regiones geográficas.

Consideraciones de ubicación

Una buena ubicación equilibra la latencia, la disponibilidad y los costes de ancho de banda.

  • Usa una región para optimizar la latencia y el ancho de banda de la red.

  • Usa una multirregión cuando quieras procesar datos de fuera de la red de Google y distribuidos en grandes áreas geográficas, o cuando quieras disfrutar de la mayor disponibilidad que ofrece la redundancia entre regiones.

  • Por lo general, debes tratar tus datos en una ubicación que te resulte cómoda o que contenga a la mayoría de los usuarios de tus datos.

  • Si tu organización tiene la obligación de mantener los datos en tránsito en una ubicación específica, utiliza solo las regiones o multirregiones que admitan endpoints regionales (REP). En este caso, debes usar la API Cloud Data Loss Prevention, ya que los endpoints regionales de Protección de datos sensibles no se pueden usar con la consola deGoogle Cloud .

Especificar una región

La forma de especificar la región de tratamiento depende del tipo de endpoint al que envíes la solicitud: el endpoint global o un endpoint regional. El tipo de endpoint que elijas dependerá de si tienes que mantener los datos en tránsito en una región específica. Para obtener más información, consulta Puntos finales globales y regionales de Protección de Datos Sensibles.

Especificar una región en una solicitud al endpoint global

Consola

Elige una región al configurar tu operación de protección de datos sensibles.

Por ejemplo, al crear un activador de trabajo, elige una ubicación en el menú Ubicación del recurso, como se muestra a continuación:

Si la ubicación del tratamiento no es un problema, usa la región Global y Google elegirá la ubicación en la que se debe realizar el tratamiento. Global es la opción predeterminada.

REST

Inserta la información de la región en la URL del endpoint de la solicitud. Si la ubicación del tratamiento no es un problema, utiliza la región global y Google elegirá la ubicación en la que se debe llevar a cabo el tratamiento. Ten en cuenta que los recursos creados por una solicitud que especifique la región global se almacenan en esa región.global

A continuación, se muestran algunas solicitudes de ejemplo al endpoint global.

Usar la región global

Las dos solicitudes siguientes tienen el mismo efecto. No incluir una región es lo mismo que especificar 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

Usar una región específica

Para especificar una región de procesamiento, inserta locations/ y, a continuación, el nombre de la región en la URL del recurso.

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

Especificar una región en una solicitud a un endpoint regional

Consola

En Protección de Datos Sensibles, los puntos finales regionales no se pueden usar con la consola Google Cloud .

C#

Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.

Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


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

Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.

Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.

Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


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

En el siguiente ejemplo se envía una solicitud content.inspect a un endpoint regional. Los datos adjuntos a esta solicitud permanecen en la región especificada durante el tránsito, el uso y el almacenamiento.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • REP_REGION: una región en la que está disponible un endpoint regional (REP) de Protección de Datos Sensibles, como us-west2. Para ver una lista completa de las regiones, consulta Ubicaciones de Protección de Datos Sensibles.
  • PROJECT_ID: tu ID de proyecto Google Cloud . Los IDs de proyecto son cadenas alfanuméricas, como example-project.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

Consideraciones sobre la colocación

Cuando analices un repositorio de almacenamiento, como Cloud Storage o BigQuery, debes especificar la misma ubicación en tu solicitud de Protección de Datos Sensibles que la del repositorio que estés analizando. Por ejemplo, si el conjunto de datos de BigQuery se encuentra en la multirregión de la Unión Europea, especifica la multirregión de la Unión Europea (europe) al configurar el trabajo de Protección de Datos Sensibles.

Si no colocas tu solicitud de protección de datos sensibles en el mismo lugar que el repositorio de almacenamiento que estás analizando, el tratamiento de tu solicitud puede dividirse entre la ubicación de los datos y la ubicación especificada en la solicitud.

Siguientes pasos