Especificar ubicaciones de procesamiento

Con la capacidad de especificar una región en la que se realizan las operaciones de Protección de datos sensibles, puedes controlar el procesamiento de tus datos sensibles. En este documento, se explica el concepto de ubicación de procesamiento de la Protección de datos sensibles y se muestra cómo especificar una región.

Para ver una lista de las regiones y multirregiones compatibles, consulta Ubicaciones de Protección de datos sensibles.

Acerca de las regiones y las multirregiones

Una región es un lugar geográfico específico, como el oeste de los Estados Unidos o Asia Oriental. Una ubicación multirregión (o solo multirregión) es un área geográfica grande, como la Unión Europea, que contiene dos o más regiones geográficas.

Consideraciones de ubicación

Una buena ubicación balancea los costos de latencia, disponibilidad y ancho de banda.

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

  • Usa una multirregión cuando desees procesar datos desde fuera de la red de Google y distribuirse en grandes áreas geográficas, o cuando quieras obtener la disponibilidad que brinda la redundancia en las regiones.

  • En general, debes procesar los datos en una ubicación que sea conveniente o que contenga a la mayoría de los usuarios de los datos.

  • Si tu organización debe mantener los datos en tránsito dentro de una región especificada, usa solo las regiones que admiten extremos regionales (REP). En este caso, debes usar la API de Cloud Data Loss Prevention, ya que los extremos regionales de la Protección de datos sensibles no están disponibles para usarse con la consola de Google Cloud.

Especifica una región

La forma en que especifiques la región de procesamiento depende del tipo de extremo al que le envías la solicitud: el extremo global o un extremo regional. El tipo de extremo que elijas depende de si debes mantener los datos en tránsito dentro de una región especificada. Para obtener más información, consulta Extremos globales y regionales para la Protección de datos sensibles.

Especifica una región en una solicitud al extremo global

Console

Elige una región cuando configures tu operación de Protección de datos sensibles.

Por ejemplo, cuando crees un activador de trabajo, elige una ubicación del menú Ubicación de recursos, como se muestra aquí:

Si la ubicación de procesamiento no es un problema, usa la región global y Google elegirá la ubicación en la que debe realizarse el procesamiento. Global es la opción de región predeterminada.

REST

Inserta la información de la región en la URL del extremo de la solicitud. Si la ubicación de procesamiento no es un problema, usa la región global y Google elige la ubicación en la que debe realizarse el procesamiento. Ten en cuenta que todos los recursos que crea una solicitud que especifican la región global se almacenan en la región global.

Los siguientes son algunos ejemplos de solicitudes al extremo global.

Cómo 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

Usa una región específica

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

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

Especifica una región en una solicitud a un extremo regional

Console

En el caso de la Protección de datos sensibles, los extremos regionales no están disponibles para usarse con la consola de Google Cloud.

C#

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las Bibliotecas cliente de Protección de datos sensibles.

Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para 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 obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las Bibliotecas cliente de Protección de datos sensibles.

Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para 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 obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las Bibliotecas cliente de Protección de datos sensibles.

Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para 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 extremo regional. Los datos adjuntos a esta solicitud permanecen en la región especificada mientras están en tránsito, en uso y en reposo.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • REP_REGION: Es una región en la que hay un extremo regional (REP) para la Protección de datos sensibles disponible, por ejemplo, us-west2. Para obtener una lista completa de las regiones, consulta Ubicaciones de Sensitive Data Protection.
  • PROJECT_ID: Es el ID de tu proyecto de 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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 ubicación conjunta

Cuando analizas un repositorio de almacenamiento como Cloud Storage o BigQuery, debes especificar la misma ubicación en tu solicitud de Protección de datos sensibles como la ubicación del repositorio que analizas. Por ejemplo, si el conjunto de datos de BigQuery está en la ubicación multirregional de la Unión Europea, especifica la multirregión de la Unión Europea (europe) cuando configures el trabajo de Protección de datos sensibles.

Si no ubicas juntas tu solicitud de Protección de datos sensibles con el repositorio de almacenamiento que escaneas, el procesamiento de tu solicitud se puede dividir entre la ubicación de los datos y la ubicación especificada en la solicitud.

¿Qué sigue?