Crea y programa trabajos de inspección de Cloud DLP

En este tema, se describe en detalle cómo crear un nuevo trabajo o activador de trabajo. Para obtener una explicación rápida acerca de cómo crear un activador de trabajo nuevo con la IU de Cloud DLP, consulta la página sobre la guía de inicio rápido para crear un activador de trabajo de Cloud DLP.

Acerca de los trabajos y los activadores de trabajo

Cuando Cloud Data Loss Prevention (DLP) realiza un análisis de inspección para identificar datos sensibles, cada análisis se ejecuta como un trabajo. Cloud DLP crea y ejecuta un recurso de trabajo cada vez que le indicas que inspeccione tus repositorios de Google Cloud Storage, incluidos los depósitos de Cloud Storage, las tablas de BigQuery y los tipos de Datastore.

Para programar trabajos de análisis de inspección, crea activadores de trabajo. Un activador de trabajo es un evento que automatiza la creación de trabajos de DLP de forma periódica.

Para obtener más información sobre trabajos y activadores de trabajo en Cloud DLP, consulta la página conceptual Activadores de trabajos.

Crea un trabajo o activador de trabajo nuevo

Para crear un nuevo trabajo o activador de trabajo de Cloud DLP, sigue estos pasos:

Console

  1. En Cloud Console, abre Cloud DLP.

    Ir a la IU de Cloud DLP

  2. En el menú Create (Crear), elige Job or job trigger (Trabajo o activador de trabajo).

    Captura de pantalla de la opción del menú para crear un nuevo trabajo o activador de trabajo.

    También puedes hacer clic en el siguiente botón:

    Crear un nuevo activador de trabajo

En la página Crear trabajo o activador de trabajo, se incluyen las siguientes secciones:

Elige los datos de entrada

Nombre

Ingresa un nombre para el trabajo o el activador de trabajo. Puedes usar letras, números y guiones. Nombrar tu trabajo o activador de trabajo es opcional. Si no ingresas un nombre, Cloud DLP le dará al trabajo o activador de trabajo un identificador de número único.

Ubicación

En el menú Tipo de almacenamiento, elige el tipo de repositorio que almacena los datos que deseas analizar:

  • Cloud Storage: ingresa la URL del depósito que deseas analizar o selecciona Incluir/excluir en el menú Tipo de ubicación y, luego, haz clic en Examinar para navegar al depósito o subcarpeta que deseas analizar. Selecciona la casilla de verificación Analizar carpeta de forma recurrente para analizar el directorio especificado y todos los directorios contenidos. Déjalo sin seleccionar para analizar solo el directorio especificado y nada más.
  • BigQuery: ingresa los identificadores del proyecto, el conjunto de datos y la tabla que deseas analizar.
  • Datastore: ingresa los identificadores para el proyecto, el espacio de nombres (opcional) y el tipo que deseas analizar.

Muestreo

El muestreo es una forma opcional de ahorrar recursos si tienes una gran cantidad de datos.

En Muestreo, puedes elegir si deseas analizar todos los datos seleccionados o tomar muestras de un porcentaje determinado. El muestreo funciona de manera diferente según el tipo de repositorio de almacenamiento que analices:

  • Para BigQuery, puedes muestrear un subconjunto del total de filas seleccionadas, que corresponde al porcentaje de archivos que especificas en el análisis.
  • En el caso de Cloud Storage, si algún archivo excede el tamaño especificado en el tamaño máximo de bytes para analizar por archivo, Cloud DLP lo escanea hasta ese tamaño máximo y luego pasa al siguiente archivo.

Para activar el muestreo, elige una de las siguientes opciones del primer menú:

  • Iniciar el muestreo desde la parte superior: Cloud DLP inicia el análisis parcial al comienzo de los datos. Para BigQuery, esto inicia el análisis en la primera fila. En el caso de Cloud Storage, esto inicia el análisis al comienzo de cada archivo y lo detiene una vez que Cloud DLP analice hasta cualquier tamaño máximo de archivo (ver arriba).
  • Iniciar el muestreo desde el inicio aleatorio: Cloud DLP inicia el análisis parcial en una ubicación aleatoria dentro de los datos. Para BigQuery, esto inicia el análisis en una fila aleatoria. Para Cloud Storage, esta configuración solo se aplica a los archivos que superan cualquier tamaño máximo especificado. Cloud DLP analiza los archivos por debajo del tamaño máximo en su totalidad y los archivos por encima del tamaño máximo hasta el máximo.

Para realizar un análisis parcial, también debes elegir qué porcentaje de los datos deseas analizar. Usa el control deslizante para establecer el porcentaje.

Configuración avanzada

Cuando creas un trabajo o activador de trabajo para un análisis de los depósitos de Cloud Storage o las tablas de BigQuery, puedes especificar una configuración avanzada. Específicamente, puedes configurar lo siguiente:

  • Archivos (solo Cloud Storage): los tipos de archivo que se deben analizar, incluidos los archivos de texto, binarios e imágenes.
  • Campos de identificación (solo BigQuery): identificadores de fila únicos dentro de la tabla.
  • En el caso de Cloud Storage, si algún archivo excede el tamaño especificado en el tamaño máximo de bytes para analizar por archivo, Cloud DLP lo escanea hasta ese tamaño máximo y luego pasa al siguiente archivo.

Para activar el muestreo, elige el porcentaje de datos que deseas analizar. Usa el control deslizante para establecer el porcentaje. Luego, elige una de las siguientes opciones del primer menú:

  • Iniciar el muestreo desde la parte superior: Cloud DLP inicia el análisis parcial al comienzo de los datos. Para BigQuery, esto inicia el análisis en la primera fila. En el caso de Cloud Storage, esto inicia el análisis al comienzo de cada archivo y lo detiene una vez que Cloud DLP analiza hasta cualquier tamaño máximo de archivo (ver arriba).
  • Iniciar el muestreo desde el inicio aleatorio: Cloud DLP inicia el análisis parcial en una ubicación aleatoria dentro de los datos. Para BigQuery, esto inicia el análisis en una fila aleatoria. Para Cloud Storage, esta configuración solo se aplica a los archivos que superan cualquier tamaño máximo especificado. Cloud DLP analiza los archivos por debajo del tamaño máximo en su totalidad y los archivos por encima del tamaño máximo hasta el máximo.

Archivos

Para los archivos almacenados en Cloud Storage, puedes especificar los tipos que se incluirán en tu análisis en Archivos.

Puedes elegir entre archivos binarios, de texto y de imagen. En la página de referencia de la API, se incluye una lista exhaustiva de las extensiones de archivo que Cloud DLP puede analizar en FileType. Ten en cuenta que elegir Binario hace que Cloud DLP analice archivos de tipos que no se reconocen.

Campos de identificación

Para las tablas en BigQuery, en Identificación de campos, puedes indicar a Cloud DLP que analice solo las filas que tienen valores en un campo o campos específicos.

Para agregar un campo, haz clic en Agregar campo de identificación. Ingresa el nombre del campo con la notación de puntos para especificar campos anidados, si es necesario.

Puedes agregar todos los campos que desees. Para quitar un campo, haz clic en Borrar elemento (el ícono de la papelera) junto al campo que deseas borrar.

Configura la detección

En la sección Configura la detección especificas los tipos de datos sensibles que deseas analizar. Completar esta sección es opcional. Si omites esta sección, Cloud DLP analizará tus datos en busca de un conjunto de tipos comunes de datos sensibles mediante la opción Más comunes, que corresponde al detector de Infotipo ALL_BASIC.

Plantilla

De manera opcional, puedes usar una plantilla de Cloud DLP para reutilizar la información de configuración que especificaste anteriormente.

Si ya creaste una plantilla que deseas usar, haz clic en el campo Nombre de la plantilla para ver una lista de las plantillas de inspección existentes. Elige o escribe el nombre de la plantilla que deseas usar.

Para obtener más información sobre la creación de plantillas, consulta la página sobre cómo crear plantillas de inspección de Cloud DLP.

Infotipos

Los detectores de Infotipo encuentran datos sensibles de un tipo determinado. Por ejemplo, el detector de Infotipo integrado US_SOCIAL_SECURITY_NUMBER de Cloud DLP busca números de identificación personal de EE.UU. Además de los detectores de Infotipo incorporados, puedes crear tus propios detectores de Infotipo personalizados.

En Infotipos, elige el detector de Infotipo que corresponda al tipo de datos que deseas analizar. También puedes dejar este campo en blanco para buscar todos los Infotipos predeterminados. Para obtener más información sobre cada detector, consulta la referencia del detector de Infotipo.

También puedes agregar detectores de Infotipo personalizados en la sección Infotipos personalizados y personalizar los detectores de Infotipos integrados y personalizados en la sección Conjuntos de reglas de inspección.

Infotipos personalizados

To add a custom infoType detector:

  1. Click Add custom infoType.
  2. Choose the type of custom infoType detector you want to create:
    • Words or phrases: Matches on one or more words or phrases that you enter into the field. Use this custom infoType when you have just a few words or phrases to search for. Give your custom infoType a name, and then, under List of words or phrases, type the word or phrase you want Cloud DLP to match on. To search on multiple words or phrases, press Enter after each one. For more information, see Creating a regular custom dictionary detector.
    • Dictionary path: Searches your content for items in a list of words and phrases. The list is stored in a text file in Cloud Storage. Use this custom infoType when you have anywhere from a few to several hundred thousand words or phrases to search for. This method is also useful if your list contains sensitive elements and you don't want to store them inside of a job or template. Give your custom infoType a name, and then, under Dictionary location, enter or browse to the Cloud Storage path where the dictionary file is stored. For more information, see Creating a regular custom dictionary detector.
    • Regex: Matches content based on a regular expression. Give your custom infoType a name, and then, in the Regex field, enter a regex pattern to match words and phrases. See the supported regex syntax.
    • Stored infoType: This option adds a stored custom dictionary detector, which is a kind of dictionary detector that is built from either a large text file stored in Cloud Storage or a single column of a BigQuery table. Use this kind of custom infoType when you have anywhere from several hundred thousand to tens of millions of words or phrases to search for. Be aware that this is the only option in this menu for which you must have already created the stored infoType to use it. Give your custom infoType a name (different from the name you gave the stored infoType), and then, in the Stored infoType field, enter the name of the stored infoType. For more information about creating stored custom dictionaries, see Creating a stored custom dictionary detector.

Click Add custom infoType again to add additional custom infoType detectors.

Conjuntos de reglas de inspección

Inspection rulesets allow you to customize both built-in and custom infoType detectors using context rules. The two types of inspection rules are:

To add a new ruleset, first specify one or more built-in or custom infoType detectors in the InfoTypes section. These are the infoType detectors that your rulesets will be modifying. Then, do the following:

  1. Click in the Choose infoTypes field. The infoType or infoTypes you specified previously appear below the field in a menu, as shown here:
  2. Screenshot of the DLP UI's inspection rulesets configuration.
  3. Choose an infoType from the menu, and then click Add rule. A menu appears with the two options Hotword rule and Exclusion rule.

For hotword rules, choose Hotword rules. Then, do the following:

  1. In the Hotword field, enter a regular expression that Cloud DLP should look for.
  2. From the Hotword proximity menu, choose whether the hotword you entered is found before or after the chosen infoType.
  3. In Hotword distance from infoType, enter the approximate number of characters between the hotword and the chosen infoType.
  4. In Confidence level adjustment, choose whether to assign matches a fixed likelihood level, or to increase or decrease the default likelihood level by a certain amount.

For exclusion rules, choose Exclusion rules. Then, do the following:

  1. In the Exclude field, enter a regular expression (regex) that Cloud DLP should look for.
  2. From the Matching type menu, choose one of the following:
    • Full match: The finding must completely match the regex.
    • Partial match: A substring of the finding can match the regex.
    • Inverse match: The finding doesn't match the regex.

You can add additional hotword or exclusion rules and rulesets to further refine your scan results.

Límite de confianza

Cada vez que Cloud DLP detecta una posible coincidencia para datos sensibles, le asigna un valor de probabilidad en una escala de “Muy improbable” a “Muy probable”. Cuando configuras un valor de probabilidad aquí, le indicas a Cloud DLP que coincida solo con los datos que corresponden a ese valor de probabilidad o superior.

El valor predeterminado de “Posible” es suficiente para la mayoría de los propósitos. Si habitualmente obtienes coincidencias demasiado amplias, mueve el control deslizante hacia arriba. Si tienes muy pocas coincidencias, mueve el control deslizante hacia abajo.

Cuando finalices, haz clic en Continuar.

Agrega acciones

En el paso Agrega acciones, selecciona la acción o las acciones que deseas que realice Cloud DLP después de que se complete el trabajo.

Tus opciones son las siguientes:

  • Guardar en BigQuery: mediante esta opción, se guardan los resultados en una tabla de BigQuery. Los resultados que se almacenan en BigQuery contienen detalles sobre la ubicación de cada resultado y la probabilidad de coincidencia. Si no almacenas los resultados, el trabajo completado solo contendrá estadísticas sobre el número y los Infotipos de los resultados. Si no especificas un ID de tabla, BigQuery asigna un nombre predeterminado a una tabla nueva. Si especificas una tabla existente, los resultados se agregan a ella. Selecciona la casilla de verificación Incluir cita para incluir texto contextual en cada resultado de coincidencia.
  • Publicar en Pub/Sub: con esta opción, se envía un mensaje de notificación a un Pub/Sub cuando se completa el trabajo. Haz clic en Nuevo tema para especificar uno o más nombres de temas en los que deseas publicar la notificación.
  • Publicar en Google Cloud Security Command Center: mediante esta opción, se publica un resumen de tus resultados en Security Command Center. Para obtener más información, consulta la página sobre cómo enviar resultados de análisis de Cloud DLP a Security Command Center.
  • Publicar en Data Catalog: elige esta opción para enviar los resultados de la inspección a Data Catalog, el servicio de administración de metadatos de Google Cloud.
  • Notificar por correo electrónico: con esta opción, se logra que Cloud DLP envíe un correo electrónico a los propietarios y editores del proyecto cuando se complete el trabajo.

Cuando finalices de seleccionar las acciones, haz clic en Continuar.

Programación

En la sección Programación, tienes las siguientes dos opciones:

  • Especificar intervalo de tiempo: se limitan los archivos o las filas para analizar por fecha. Haz clic en Hora de inicio para especificar la marca de tiempo del archivo más antigua que se debe incluir. Deja este valor en blanco para especificar todos los archivos. Haz clic en Hora de finalización para especificar la marca de tiempo del archivo más reciente. Deja este valor en blanco para no especificar un límite de marca de tiempo superior.
  • Crear un activador para ejecutar el trabajo en una programación periódica: se crea el activador del trabajo y se configura para ejecutar el trabajo que especificaste en una programación periódica. El valor predeterminado también es el valor mínimo: 24 horas. El valor máximo es de 60 días. Si solo deseas que Cloud DLP analice archivos o filas nuevos, selecciona la casilla de verificación Limitar análisis solo a contenido nuevo.

Revisa

La sección Revisa contiene un resumen con formato JSON de la configuración del trabajo que acabas de especificar.

Haz clic en Crear para crear el activador de trabajo (si especificaste una programación) o un trabajo (si no especificaste una programación) y ejecutar el trabajo una vez. Aparecerá la página de información del trabajo o del activador del trabajo, que contiene el estado y otra información. Si el trabajo se está ejecutando, puede hacer clic en el botón Cancelar para detenerlo. También puedes hacer clic en Borrar para borrar el trabajo o el activador.

Para volver a la página principal de Cloud DLP, haz clic en la flecha Atrás en Cloud Console.

Protocolo

Un recurso de trabajo se representa en la API de DLP con el recurso JobTrigger. Puedes crear un activador de trabajo nuevo mediante el método projects.jobTriggers.create del recurso JobTrigger.

Este JSON de muestra se puede enviar en una solicitud POST al extremo REST de Cloud DLP especificado. En este JSON de ejemplo, se muestra cómo crear un activador de trabajo en Cloud DLP. El trabajo que iniciará este activador es un análisis de inspección de Datastore. El activador de trabajo que se crea se ejecuta cada 86,400 segundos (o 24 horas).

Para probar esto rápidamente, puedes usar el Explorador de API que se incorpora a continuación. Ten en cuenta que una solicitud exitosa, incluso una creada en el Explorador de API, creará un nuevo activador de trabajo programado. Si quieres obtener información general sobre el uso de JSON para enviar solicitudes a la API de Cloud DLP, consulta Guía de inicio rápido: usa una solicitud JSON.

Entrada de JSON:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/jobTriggers?key={YOUR_API_KEY}

{
  "jobTrigger":{
    "displayName":"JobTrigger1",
    "description":"Starts a DLP scan job of a Datastore kind",
    "triggers":[
      {
        "schedule":{
          "recurrencePeriodDuration":"86400s"
        }
      }
    ],
    "status":"HEALTHY",
    "inspectJob":{
      "storageConfig":{
        "datastoreOptions":{
          "kind":{
            "name":"Example-Kind"
          },
          "partitionId":{
            "projectId":"[PROJECT_ID]",
            "namespaceId":"[NAMESPACE_ID]"
          }
        }
      },
      "inspectConfig":{
        "infoTypes":[
          {
            "name":"PHONE_NUMBER"
          }
        ],
        "excludeInfoTypes":false,
        "includeQuote":true,
        "minLikelihood":"LIKELY"
      },
      "actions":[
        {
          "saveFindings":{
            "outputConfig":{
              "table":{
                "projectId":"[PROJECT_ID]",
                "datasetId":"[BIGQUERY_DATASET_NAME]",
                "tableId":"[BIGQUERY_TABLE_NAME]"
              }
            }
          }
        }
      ]
    }
  }
}

Resultado de JSON:

En el resultado siguiente, se indica que el activador de trabajo se creó de manera correcta.

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "displayName":"JobTrigger1",
  "description":"Starts a DLP scan job of a Datastore kind",
  "inspectJob":{
    "storageConfig":{
      "datastoreOptions":{
        "partitionId":{
          "projectId":"[PROJECT_ID]",
          "namespaceId":"[NAMESPACE_ID]"
        },
        "kind":{
          "name":"Example-Kind"
        }
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"PHONE_NUMBER"
        }
      ],
      "minLikelihood":"LIKELY",
      "limits":{

      },
      "includeQuote":true
    },
    "actions":[
      {
        "saveFindings":{
          "outputConfig":{
            "table":{
              "projectId":"[PROJECT_ID]",
              "datasetId":"[BIGQUERY_DATASET_NAME]",
              "tableId":"[BIGQUERY_TABLE_NAME]"
            }
          }
        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2018-11-30T01:52:41.171857Z",
  "updateTime":"2018-11-30T01:52:41.171857Z",
  "status":"HEALTHY"
}

Java


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.CloudStorageOptions;
import com.google.privacy.dlp.v2.CreateJobTriggerRequest;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.InspectJobConfig;
import com.google.privacy.dlp.v2.JobTrigger;
import com.google.privacy.dlp.v2.ProjectName;
import com.google.privacy.dlp.v2.Schedule;
import com.google.privacy.dlp.v2.StorageConfig;
import com.google.privacy.dlp.v2.StorageConfig.TimespanConfig;
import com.google.protobuf.Duration;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class TriggersCreate {

  public static void createTrigger() throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String gcsPath = "gs://" + "your-bucket-name" + "path/to/file.txt";
    createTrigger(projectId, gcsPath);
  }

  public static void createTrigger(String projectId, String gcsPath) throws Exception {
    // 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 dlpServiceClient = DlpServiceClient.create()) {

      // Set autoPopulateTimespan to true to scan only new content
      boolean autoPopulateTimespan = true;
      TimespanConfig timespanConfig =
          TimespanConfig.newBuilder()
              .setEnableAutoPopulationOfTimespanConfig(autoPopulateTimespan)
              .build();

      // Specify the GCS file to be inspected.
      CloudStorageOptions cloudStorageOptions =
          CloudStorageOptions.newBuilder()
              .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(gcsPath))
              .build();
      StorageConfig storageConfig =
          StorageConfig.newBuilder()
              .setCloudStorageOptions(cloudStorageOptions)
              .setTimespanConfig(timespanConfig)
              .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
      List<InfoType> infoTypes =
          Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER")
              .map(it -> InfoType.newBuilder().setName(it).build())
              .collect(Collectors.toList());

      InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build();

      // Configure the inspection job we want the service to perform.
      InspectJobConfig inspectJobConfig =
          InspectJobConfig.newBuilder()
              .setInspectConfig(inspectConfig)
              .setStorageConfig(storageConfig)
              .build();

      // Set scanPeriod to the number of days between scans (minimum: 1 day)
      int scanPeriod = 1;

      // Optionally set a display name of max 100 chars and a description of max 250 chars
      String displayName = "Daily Scan";
      String description = "A daily inspection for personally identifiable information.";

      // Schedule scan of GCS bucket every scanPeriod number of days (minimum = 1 day)
      Duration duration = Duration.newBuilder().setSeconds(scanPeriod * 24 * 3600).build();
      Schedule schedule = Schedule.newBuilder().setRecurrencePeriodDuration(duration).build();
      JobTrigger.Trigger trigger = JobTrigger.Trigger.newBuilder().setSchedule(schedule).build();
      JobTrigger jobTrigger =
          JobTrigger.newBuilder()
              .setInspectJob(inspectJobConfig)
              .setDisplayName(displayName)
              .setDescription(description)
              .setStatus(JobTrigger.Status.HEALTHY)
              .addTriggers(trigger)
              .build();

      // Create scan request to be sent by client
      CreateJobTriggerRequest createJobTriggerRequest =
          CreateJobTriggerRequest.newBuilder()
              .setParent(ProjectName.of(projectId).toString())
              .setJobTrigger(jobTrigger)
              .build();

      // Send the scan request and process the response
      JobTrigger createdJobTrigger = dlpServiceClient.createJobTrigger(createJobTriggerRequest);

      System.out.println("Created Trigger: " + createdJobTrigger.getName());
      System.out.println("Display Name: " + createdJobTrigger.getDisplayName());
      System.out.println("Description: " + createdJobTrigger.getDescription());
    }
  }
}

Node.js

// 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 callingProjectId = process.env.GCLOUD_PROJECT;

// (Optional) The name of the trigger to be created.
// const triggerId = 'my-trigger';

// (Optional) A display name for the trigger to be created
// const displayName = 'My Trigger';

// (Optional) A description for the trigger to be created
// const description = "This is a sample trigger.";

// The name of the bucket to scan.
// const bucketName = 'YOUR-BUCKET';

// Limit scan to new content only.
// const autoPopulateTimespan = true;

// How often to wait between scans, in days (minimum = 1 day)
// const scanPeriod = 1;

// The infoTypes of information to match
// const infoTypes = [{ name: 'PHONE_NUMBER' }, { name: 'EMAIL_ADDRESS' }, { name: 'CREDIT_CARD_NUMBER' }];

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

// Get reference to the bucket to be inspected
const storageItem = {
  cloudStorageOptions: {
    fileSet: {url: `gs://${bucketName}/*`},
  },
  timeSpanConfig: {
    enableAutoPopulationOfTimespanConfig: autoPopulateTimespan,
  },
};

// Construct job to be triggered
const job = {
  inspectConfig: {
    infoTypes: infoTypes,
    minLikelihood: minLikelihood,
    limits: {
      maxFindingsPerRequest: maxFindings,
    },
  },
  storageConfig: storageItem,
};

// Construct trigger creation request
const request = {
  parent: dlp.projectPath(callingProjectId),
  jobTrigger: {
    inspectJob: job,
    displayName: displayName,
    description: description,
    triggers: [
      {
        schedule: {
          recurrencePeriodDuration: {
            seconds: scanPeriod * 60 * 60 * 24, // Trigger the scan daily
          },
        },
      },
    ],
    status: 'HEALTHY',
  },
  triggerId: triggerId,
};

try {
  // Run trigger creation request
  const [trigger] = await dlp.createJobTrigger(request);
  console.log(`Successfully created trigger ${trigger.name}.`);
} catch (err) {
  console.log(`Error in createTrigger: ${err.message || err}`);
}

Python

def create_trigger(
    project,
    bucket,
    scan_period_days,
    info_types,
    trigger_id=None,
    display_name=None,
    description=None,
    min_likelihood=None,
    max_findings=None,
    auto_populate_timespan=False,
):
    """Creates a scheduled Data Loss Prevention API inspect_content trigger.
    Args:
        project: The Google Cloud project id to use as a parent resource.
        bucket: The name of the GCS bucket to scan. This sample scans all
            files in the bucket using a wildcard.
        scan_period_days: How often to repeat the scan, in days.
            The minimum is 1 day.
        info_types: A list of strings representing info types to look for.
            A full list of info type categories can be fetched from the API.
        trigger_id: The id of the trigger. If omitted, an id will be randomly
            generated.
        display_name: The optional display name of the trigger.
        description: The optional description of the trigger.
        min_likelihood: A string representing the minimum likelihood threshold
            that constitutes a match. One of: 'LIKELIHOOD_UNSPECIFIED',
            'VERY_UNLIKELY', 'UNLIKELY', 'POSSIBLE', 'LIKELY', 'VERY_LIKELY'.
        max_findings: The maximum number of findings to report; 0 = no maximum.
        auto_populate_timespan: Automatically populates time span config start
            and end times in order to scan new content only.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # 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": info_type} for info_type in info_types]

    # Construct the configuration dictionary. Keys which are None may
    # optionally be omitted entirely.
    inspect_config = {
        "info_types": info_types,
        "min_likelihood": min_likelihood,
        "limits": {"max_findings_per_request": max_findings},
    }

    # Construct a cloud_storage_options dictionary with the bucket's URL.
    url = "gs://{}/*".format(bucket)
    storage_config = {
        "cloud_storage_options": {"file_set": {"url": url}},
        # Time-based configuration for each storage object.
        "timespan_config": {
            # Auto-populate start and end times in order to scan new objects
            # only.
            "enable_auto_population_of_timespan_config": auto_populate_timespan
        },
    }

    # Construct the job definition.
    job = {"inspect_config": inspect_config, "storage_config": storage_config}

    # Construct the schedule definition:
    schedule = {
        "recurrence_period_duration": {
            "seconds": scan_period_days * 60 * 60 * 24
        }
    }

    # Construct the trigger definition.
    job_trigger = {
        "inspect_job": job,
        "display_name": display_name,
        "description": description,
        "triggers": [{"schedule": schedule}],
        "status": "HEALTHY",
    }

    # Convert the project id into a full resource id.
    parent = dlp.project_path(project)

    # Call the API.
    response = dlp.create_job_trigger(
        parent, job_trigger=job_trigger, trigger_id=trigger_id
    )

    print("Successfully created trigger {}".format(response.name))

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"github.com/golang/protobuf/ptypes/duration"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// createTrigger creates a trigger with the given configuration.
func createTrigger(w io.Writer, projectID string, triggerID, displayName, description, bucketName string, infoTypeNames []string) error {
	// projectID := "my-project-id"
	// triggerID := "my-trigger"
	// displayName := "My Trigger"
	// description := "My trigger description"
	// bucketName := "my-bucket"
	// infoTypeNames := []string{"US_SOCIAL_SECURITY_NUMBER"}

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	// Convert the info type strings to a list of InfoTypes.
	var infoTypes []*dlppb.InfoType
	for _, it := range infoTypeNames {
		infoTypes = append(infoTypes, &dlppb.InfoType{Name: it})
	}

	// Create a configured request.
	req := &dlppb.CreateJobTriggerRequest{
		Parent:    "projects/" + projectID,
		TriggerId: triggerID,
		JobTrigger: &dlppb.JobTrigger{
			DisplayName: displayName,
			Description: description,
			Status:      dlppb.JobTrigger_HEALTHY,
			// Triggers control when the job will start.
			Triggers: []*dlppb.JobTrigger_Trigger{
				{
					Trigger: &dlppb.JobTrigger_Trigger_Schedule{
						Schedule: &dlppb.Schedule{
							Option: &dlppb.Schedule_RecurrencePeriodDuration{
								RecurrencePeriodDuration: &duration.Duration{
									Seconds: 10 * 60 * 60 * 24, // 10 days in seconds.
								},
							},
						},
					},
				},
			},
			// Job configures the job to run when the trigger runs.
			Job: &dlppb.JobTrigger_InspectJob{
				InspectJob: &dlppb.InspectJobConfig{
					InspectConfig: &dlppb.InspectConfig{
						InfoTypes:     infoTypes,
						MinLikelihood: dlppb.Likelihood_POSSIBLE,
						Limits: &dlppb.InspectConfig_FindingLimits{
							MaxFindingsPerRequest: 10,
						},
					},
					StorageConfig: &dlppb.StorageConfig{
						Type: &dlppb.StorageConfig_CloudStorageOptions{
							CloudStorageOptions: &dlppb.CloudStorageOptions{
								FileSet: &dlppb.CloudStorageOptions_FileSet{
									Url: "gs://" + bucketName + "/*",
								},
							},
						},
						// Time-based configuration for each storage object. See more at
						// https://cloud.google.com/dlp/docs/reference/rest/v2/InspectJobConfig#TimespanConfig
						TimespanConfig: &dlppb.StorageConfig_TimespanConfig{
							// Auto-populate start and end times in order to scan new objects only.
							EnableAutoPopulationOfTimespanConfig: true,
						},
					},
				},
			},
		},
	}

	// Send the request.
	resp, err := client.CreateJobTrigger(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateJobTrigger: %v", err)
	}
	fmt.Fprintf(w, "Successfully created trigger: %v", resp.GetName())
	return nil
}

PHP

/**
 * Create a Data Loss Prevention API job trigger.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;
use Google\Cloud\Dlp\V2\JobTrigger;
use Google\Cloud\Dlp\V2\JobTrigger\Trigger;
use Google\Cloud\Dlp\V2\JobTrigger\Status;
use Google\Cloud\Dlp\V2\InspectConfig;
use Google\Cloud\Dlp\V2\InspectJobConfig;
use Google\Cloud\Dlp\V2\Schedule;
use Google\Cloud\Dlp\V2\CloudStorageOptions;
use Google\Cloud\Dlp\V2\CloudStorageOptions_FileSet;
use Google\Cloud\Dlp\V2\StorageConfig;
use Google\Cloud\Dlp\V2\StorageConfig_TimespanConfig;
use Google\Cloud\Dlp\V2\InfoType;
use Google\Cloud\Dlp\V2\Likelihood;
use Google\Cloud\Dlp\V2\InspectConfig\FindingLimits;
use Google\Protobuf\Duration;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';
// $bucketName = 'The name of the bucket to scan';
// $triggerId = '';   // (Optional) The name of the trigger to be created';
// $displayName = ''; // (Optional) The human-readable name to give the trigger';
// $description = ''; // (Optional) A description for the trigger to be created';
// $scanPeriod = 1; // (Optional) How often to wait between scans, in days (minimum = 1 day)
// $autoPopulateTimespan = true; // (Optional) Automatically limit scan to new content only
// $maxFindings = 0; // (Optional) The maximum number of findings to report per request (0 = server maximum)

// Instantiate a client.
$dlp = new DlpServiceClient();

// ----- Construct job config -----
// The infoTypes of information to match
$personNameInfoType = (new InfoType())
    ->setName('PERSON_NAME');
$phoneNumberInfoType = (new InfoType())
    ->setName('PHONE_NUMBER');
$infoTypes = [$personNameInfoType, $phoneNumberInfoType];

// The minimum likelihood required before returning a match
$minLikelihood = likelihood::LIKELIHOOD_UNSPECIFIED;

// Specify finding limits
$limits = (new FindingLimits())
    ->setMaxFindingsPerRequest($maxFindings);

// Create the inspectConfig object
$inspectConfig = (new InspectConfig())
    ->setMinLikelihood($minLikelihood)
    ->setLimits($limits)
    ->setInfoTypes($infoTypes);

// Create triggers
$duration = (new Duration())
    ->setSeconds($scanPeriod * 60 * 60 * 24);

$schedule = (new Schedule())
    ->setRecurrencePeriodDuration($duration);

$triggerObject = (new Trigger())
    ->setSchedule($schedule);

// Create the storageConfig object
$fileSet = (new CloudStorageOptions_FileSet())
    ->setUrl('gs://' . $bucketName . '/*');

$storageOptions = (new CloudStorageOptions())
    ->setFileSet($fileSet);

// Auto-populate start and end times in order to scan new objects only.
$timespanConfig = (new StorageConfig_TimespanConfig())
    ->setEnableAutoPopulationOfTimespanConfig($autoPopulateTimespan);

$storageConfig = (new StorageConfig())
    ->setCloudStorageOptions($storageOptions)
    ->setTimespanConfig($timespanConfig);

// Construct the jobConfig object
$jobConfig = (new InspectJobConfig())
    ->setInspectConfig($inspectConfig)
    ->setStorageConfig($storageConfig);

// ----- Construct trigger object -----
$jobTriggerObject = (new JobTrigger())
    ->setTriggers([$triggerObject])
    ->setInspectJob($jobConfig)
    ->setStatus(Status::HEALTHY)
    ->setDisplayName($displayName)
    ->setDescription($description);

// Run trigger creation request
$parent = $dlp->projectName($callingProjectId);
$trigger = $dlp->createJobTrigger($parent, [
    'jobTrigger' => $jobTriggerObject,
    'triggerId' => $triggerId
]);

// Print results
printf('Successfully created trigger %s' . PHP_EOL, $trigger->getName());

C#

public static object CreateJobTrigger(
    string projectId,
    string bucketName,
    string minLikelihood,
    int maxFindings,
    bool autoPopulateTimespan,
    int scanPeriod,
    IEnumerable<InfoType> infoTypes,
    string triggerId,
    string displayName,
    string description)
{
    DlpServiceClient dlp = DlpServiceClient.Create();

    var jobConfig = new InspectJobConfig
    {
        InspectConfig = new InspectConfig
        {
            MinLikelihood = (Likelihood)Enum.Parse(
                typeof(Likelihood),
                minLikelihood
            ),
            Limits = new FindingLimits
            {
                MaxFindingsPerRequest = maxFindings
            },
            InfoTypes = { infoTypes }
        },
        StorageConfig = new StorageConfig
        {
            CloudStorageOptions = new CloudStorageOptions
            {
                FileSet = new FileSet
                {
                    Url = $"gs://{bucketName}/*"
                }
            },
            TimespanConfig = new TimespanConfig
            {
                EnableAutoPopulationOfTimespanConfig = autoPopulateTimespan
            }
        }
    };

    var jobTrigger = new JobTrigger
    {
        Triggers =
        {
            new Trigger
            {
                Schedule = new Schedule
                {
                    RecurrencePeriodDuration = new Google.Protobuf.WellKnownTypes.Duration
                    {
                        Seconds = scanPeriod * 60 * 60 * 24
                    }
                }
            }
        },
        InspectJob = jobConfig,
        Status = Status.Healthy,
        DisplayName = displayName,
        Description = description
    };

    JobTrigger response = dlp.CreateJobTrigger(
        new CreateJobTriggerRequest
        {
            ParentAsProjectName = new ProjectName(projectId),
            JobTrigger = jobTrigger,
            TriggerId = triggerId
        });

    Console.WriteLine($"Successfully created trigger {response.Name}");
    return 0;
}

Enumera todos los trabajos

Para enumerar todos los trabajos del proyecto actual, sigue estos pasos:

Console

  1. En Cloud Console, abre Cloud DLP.

    Ir a la IU de Cloud DLP

  2. En la pestaña Trabajos y activadores de trabajos, haz clic en la pestaña Todos los trabajos.

La consola muestra una lista de todos los trabajos del proyecto actual, incluidos sus identificadores de trabajo, el estado, la hora de creación y la hora de finalización. Para obtener más información sobre cualquier trabajo, incluido un resumen de sus resultados, haz clic en su identificador.

Protocolo

El recurso DlpJob tiene un método projects.dlpJobs.list con el que puedes enumerar todos los trabajos.

Para enumerar todos los trabajos definidos actualmente en tu proyecto, envía una solicitud GET al extremo dlpJobs, como se muestra aquí:

URL:

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

En el siguiente resultado de JSON, se enumera uno de los trabajos que se muestran. Ten en cuenta que la estructura del trabajo refleja la del recurso DlpJob.

Resultado de JSON:

{
  "jobs":[
    {
      "name":"projects/[PROJECT-ID]/dlpJobs/i-5270277269264714623",
      "type":"INSPECT_JOB",
      "state":"DONE",
      "inspectDetails":{
        "requestedOptions":{
          "snapshotInspectTemplate":{
          },
          "jobConfig":{
            "storageConfig":{
              "cloudStorageOptions":{
                "fileSet":{
                  "url":"[CLOUD-STORAGE-URL]"
                },
                "fileTypes":[
                  "FILE_TYPE_UNSPECIFIED"
                ],
                "filesLimitPercent":100
              },
              "timespanConfig":{
                "startTime":"2019-09-08T22:43:16.623Z",
                "enableAutoPopulationOfTimespanConfig":true
              }
            },
            "inspectConfig":{
              "infoTypes":[
                {
                  "name":"US_SOCIAL_SECURITY_NUMBER"
                },
                {
                  "name":"CANADA_SOCIAL_INSURANCE_NUMBER"
                }
              ],
              "minLikelihood":"LIKELY",
              "limits":{
              },
              "includeQuote":true
            },
            "actions":[
              {
                "saveFindings":{
                  "outputConfig":{
                    "table":{
                      "projectId":"[PROJECT-ID]",
                      "datasetId":"[DATASET-ID]",
                      "tableId":"[TABLE-ID]"
                    }
                  }
                }
              }
            ]
          }
        },
        "result":{
          ...
        }
      },
      "createTime":"2019-09-09T22:43:16.918Z",
      "startTime":"2019-09-09T22:43:16.918Z",
      "endTime":"2019-09-09T22:43:53.091Z",
      "jobTriggerName":"projects/[PROJECT-ID]/jobTriggers/sample-trigger2"
    },
    ...

Para probar esto rápidamente, puedes usar el Explorador de API que se incorpora a continuación. Si quieres obtener información general sobre el uso de JSON para enviar solicitudes a la API de Cloud DLP, consulta Guía de inicio rápido: usa una solicitud JSON.

Java


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DlpJob;
import com.google.privacy.dlp.v2.DlpJobType;
import com.google.privacy.dlp.v2.ListDlpJobsRequest;
import com.google.privacy.dlp.v2.ProjectName;
import java.io.IOException;

public class JobsList {

  public static void listJobs() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    listJobs(projectId);
  }

  // Lists DLP jobs
  public static void listJobs(String projectId) 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 dlpServiceClient = DlpServiceClient.create()) {

      // Construct the request to be sent by the client.
      // For more info on filters and job types,
      // see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
      ListDlpJobsRequest listDlpJobsRequest =
          ListDlpJobsRequest.newBuilder()
              .setParent(ProjectName.of(projectId).toString())
              .setFilter("state=DONE")
              .setType(DlpJobType.valueOf("INSPECT_JOB"))
              .build();

      // Send the request to list jobs and process the response
      DlpServiceClient.ListDlpJobsPagedResponse response =
          dlpServiceClient.listDlpJobs(listDlpJobsRequest);

      System.out.println("DLP jobs found:");
      for (DlpJob dlpJob : response.getPage().getValues()) {
        System.out.println(dlpJob.getName() + " -- " + dlpJob.getState());
      }
    }
  }
}

Node.js

// 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 callingProjectId = process.env.GCLOUD_PROJECT;

// The filter expression to use
// For more information and filter syntax, see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
// const filter = `state=DONE`;

// The type of job to list (either 'INSPECT_JOB' or 'RISK_ANALYSIS_JOB')
// const jobType = 'INSPECT_JOB';

// Construct request for listing DLP scan jobs
const request = {
  parent: dlp.projectPath(callingProjectId),
  filter: filter,
  type: jobType,
};

try {
  // Run job-listing request
  const [jobs] = await dlp.listDlpJobs(request);
  jobs.forEach(job => {
    console.log(`Job ${job.name} status: ${job.state}`);
  });
} catch (err) {
  console.log(`Error in listJobs: ${err.message || err}`);
}

Python

def list_dlp_jobs(project, filter_string=None, job_type=None):
    """Uses the Data Loss Prevention API to lists DLP jobs that match the
        specified filter in the request.
    Args:
        project: The project id to use as a parent resource.
        filter: (Optional) Allows filtering.
            Supported syntax:
            * Filter expressions are made up of one or more restrictions.
            * Restrictions can be combined by 'AND' or 'OR' logical operators.
            A sequence of restrictions implicitly uses 'AND'.
            * A restriction has the form of '<field> <operator> <value>'.
            * Supported fields/values for inspect jobs:
                - `state` - PENDING|RUNNING|CANCELED|FINISHED|FAILED
                - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY
                - `trigger_name` - The resource name of the trigger that
                                   created job.
            * Supported fields for risk analysis jobs:
                - `state` - RUNNING|CANCELED|FINISHED|FAILED
            * The operator must be '=' or '!='.
            Examples:
            * inspected_storage = cloud_storage AND state = done
            * inspected_storage = cloud_storage OR inspected_storage = bigquery
            * inspected_storage = cloud_storage AND
                                  (state = done OR state = canceled)
        type: (Optional) The type of job. Defaults to 'INSPECT'.
            Choices:
            DLP_JOB_TYPE_UNSPECIFIED
            INSPECT_JOB: The job inspected content for sensitive data.
            RISK_ANALYSIS_JOB: The job executed a Risk Analysis computation.

    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library.
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = dlp.project_path(project)

    # Job type dictionary
    job_type_to_int = {
        "DLP_JOB_TYPE_UNSPECIFIED":
            google.cloud.dlp.enums.DlpJobType.DLP_JOB_TYPE_UNSPECIFIED,
        "INSPECT_JOB": google.cloud.dlp.enums.DlpJobType.INSPECT_JOB,
        "RISK_ANALYSIS_JOB": google.cloud.dlp.enums.DlpJobType.RISK_ANALYSIS_JOB,
    }
    # If job type is specified, convert job type to number through enums.
    if job_type:
        job_type = job_type_to_int[job_type]

    # Call the API to get a list of jobs.
    response = dlp.list_dlp_jobs(parent, filter_=filter_string, type_=job_type)

    # Iterate over results.
    for job in response:
        print("Job: %s; status: %s" % (job.name, job.JobState.Name(job.state)))

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"google.golang.org/api/iterator"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// listJobs lists jobs matching the given optional filter and optional jobType.
func listJobs(w io.Writer, projectID, filter, jobType string) error {
	// projectID := "my-project-id"
	// filter := "`state` = FINISHED"
	// jobType := "RISK_ANALYSIS_JOB"
	ctx := context.Background()
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	// Create a configured request.
	req := &dlppb.ListDlpJobsRequest{
		Parent: "projects/" + projectID,
		Filter: filter,
		Type:   dlppb.DlpJobType(dlppb.DlpJobType_value[jobType]),
	}
	// Send the request and iterate over the results.
	it := client.ListDlpJobs(ctx, req)
	for {
		j, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}
		fmt.Fprintf(w, "Job %v status: %v\n", j.GetName(), j.GetState())
	}
	return nil
}

PHP

/**
 * List Data Loss Prevention API jobs corresponding to a given filter.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;
use Google\Cloud\Dlp\V2\DlpJobType;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';
// $filter = 'The filter expression to use';

// Instantiate a client.
$dlp = new DlpServiceClient();

// The type of job to list (either 'INSPECT_JOB' or 'REDACT_JOB')
$jobType = DlpJobType::INSPECT_JOB;

// Run job-listing request
// For more information and filter syntax,
// @see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
$parent = $dlp->projectName($callingProjectId);
$response = $dlp->listDlpJobs($parent, [
  'filter' => $filter,
  'type' => $jobType
]);

// Print job list
$jobs = $response->iterateAllElements();
foreach ($jobs as $job) {
    printf('Job %s status: %s' . PHP_EOL, $job->getName(), $job->getState());
    $infoTypeStats = $job->getInspectDetails()->getResult()->getInfoTypeStats();

    if (count($infoTypeStats) > 0) {
        foreach ($infoTypeStats as $infoTypeStat) {
            printf(
                '  Found %s instance(s) of type %s' . PHP_EOL,
                $infoTypeStat->getCount(),
                $infoTypeStat->getInfoType()->getName()
            );
        }
    } else {
        print('  No findings.' . PHP_EOL);
    }
}

C#

public static object ListJobs(string projectId, string filter, string jobType)
{
    DlpServiceClient dlp = DlpServiceClient.Create();

    var response = dlp.ListDlpJobs(new ListDlpJobsRequest
    {
        ParentAsProjectName = new ProjectName(projectId),
        Filter = filter,
        Type = (DlpJobType)Enum.Parse(typeof(DlpJobType), jobType)
    });

    foreach (var job in response)
    {
        Console.WriteLine($"Job: {job.Name} status: {job.State}");
    }

    return 0;
}

Enumera todos los activadores de trabajo

Para enumerar todos los activadores de trabajo del proyecto actual, sigue estos pasos:

Console

  1. En Cloud Console, abre Cloud DLP.

    Ir a la IU de Cloud DLP

  2. En la pestaña Activadores de trabajos y trabajos, haz clic en la pestaña Activadores de trabajos.

La consola muestra una lista de todos los activadores de trabajo para el proyecto actual.

Protocolo

El recurso JobTrigger tiene un método projects.jobTriggers.list con el que puedes enumerar todos los activadores de trabajo.

Para enumerar todos los activadores de trabajo definidos actualmente en tu proyecto, envía una solicitud GET al extremo jobTriggers, como se muestra a continuación:

URL:

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

En la siguiente salida de JSON, se muestra el activador de trabajo que se creó en la sección anterior. Ten en cuenta que la estructura del activador de trabajo refleja la del recurso JobTrigger.

Resultado de JSON:

{
  "jobTriggers":[
    {
      "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
      "displayName":"JobTrigger1",
      "description":"Starts a DLP scan job of a Datastore kind",
      "inspectJob":{
        "storageConfig":{
          "datastoreOptions":{
            "partitionId":{
              "projectId":"[PROJECT_ID]",
              "namespaceId":"[NAMESPACE_ID]"
            },
            "kind":{
              "name":"Example-Kind"
            }
          }
        },
        "inspectConfig":{
          "infoTypes":[
            {
              "name":"PHONE_NUMBER"
            }
          ],
          "minLikelihood":"LIKELY",
          "limits":{

          },
          "includeQuote":true
        },
        "actions":[
          {
            "saveFindings":{
              "outputConfig":{
                "table":{
                  "projectId":"[PROJECT_ID]",
                  "datasetId":"[BIGQUERY_DATASET_NAME]",
                  "tableId":"[BIGQUERY_TABLE_NAME]"
                }
              }
            }
          }
        ]
      },
      "triggers":[
        {
          "schedule":{
            "recurrencePeriodDuration":"86400s"
          }
        }
      ],
      "createTime":"2018-11-30T01:52:41.171857Z",
      "updateTime":"2018-11-30T01:52:41.171857Z",
      "status":"HEALTHY"
    },

    ...

],
  "nextPageToken":"KkwKCQjivJ2UpPreAgo_Kj1wcm9qZWN0cy92ZWx2ZXR5LXN0dWR5LTE5NjEwMS9qb2JUcmlnZ2Vycy8xNTA5NzEyOTczMDI0MDc1NzY0"
}

Para probar esto rápidamente, puedes usar el Explorador de API que se incorpora a continuación. Si quieres obtener información general sobre el uso de JSON para enviar solicitudes a la API de Cloud DLP, consulta Guía de inicio rápido: usa una solicitud JSON.

Java

import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.JobTrigger;
import com.google.privacy.dlp.v2.ListJobTriggersRequest;
import com.google.privacy.dlp.v2.ProjectName;

class TriggersList {
  public static void listTriggers() throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    listTriggers(projectId);
  }

  public static void listTriggers(String projectId) throws Exception {
    // 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 dlpServiceClient = DlpServiceClient.create()) {
      // Build the request to be sent by the client
      ListJobTriggersRequest listJobTriggersRequest =
          ListJobTriggersRequest.newBuilder()
              .setParent(ProjectName.of(projectId).toString())
              .build();

      // Use the client to send the API request.
      DlpServiceClient.ListJobTriggersPagedResponse response =
          dlpServiceClient.listJobTriggers(listJobTriggersRequest);

      // Parse the response and process the results
      System.out.println("DLP triggers found:");
      for (JobTrigger trigger : response.getPage().getValues()) {
        System.out.println("Trigger: " + trigger.getName());
        System.out.println("\tCreated: " + trigger.getCreateTime());
        System.out.println("\tUpdated: " + trigger.getUpdateTime());
        if (trigger.getDisplayName() != null) {
          System.out.println("\tDisplay name: " + trigger.getDisplayName());
        }
        if (trigger.getDescription() != null) {
          System.out.println("\tDescription: " + trigger.getDescription());
        }
        System.out.println("\tStatus: " + trigger.getStatus());
        System.out.println("\tError count: " + trigger.getErrorsCount());
      }
      ;
    }
  }
}

Node.js

  // 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 callingProjectId = process.env.GCLOUD_PROJECT;

  // Construct trigger listing request
  const request = {
    parent: dlp.projectPath(callingProjectId),
  };

  // Helper function to pretty-print dates
  const formatDate = date => {
    const msSinceEpoch = parseInt(date.seconds, 10) * 1000;
    return new Date(msSinceEpoch).toLocaleString('en-US');
  };

  try {
    // Run trigger listing request
    const [triggers] = await dlp.listJobTriggers(request);
    triggers.forEach(trigger => {
      // Log trigger details
      console.log(`Trigger ${trigger.name}:`);
      console.log(`  Created: ${formatDate(trigger.createTime)}`);
      console.log(`  Updated: ${formatDate(trigger.updateTime)}`);
      if (trigger.displayName) {
        console.log(`  Display Name: ${trigger.displayName}`);
      }
      if (trigger.description) {
        console.log(`  Description: ${trigger.description}`);
      }
      console.log(`  Status: ${trigger.status}`);
      console.log(`  Error count: ${trigger.errors.length}`);
    });
  } catch (err) {
    console.log(`Error in listTriggers: ${err.message || err}`);
  }
}

async function deleteTrigger(triggerId) {
  // Imports the Google Cloud Data Loss Prevention library
  const DLP = require('@google-cloud/dlp');

  // Instantiates a client
  const dlp = new DLP.DlpServiceClient();

  // The name of the trigger to be deleted
  // Parent project ID is automatically extracted from this parameter
  // const triggerId = 'projects/my-project/triggers/my-trigger';

  // Construct trigger deletion request
  const request = {
    name: triggerId,
  };
  try {
    // Run trigger deletion request
    await dlp.deleteJobTrigger(request);
    console.log(`Successfully deleted trigger ${triggerId}.`);
  } catch (err) {
    console.log(`Error in deleteTrigger: ${err.message || err}`);
  }

}

const cli = require(`yargs`) // eslint-disable-line
  .demand(1)
  .command(
    'create <bucketName> <scanPeriod>',
    'Create a Data Loss Prevention API job trigger.',
    {
      infoTypes: {
        alias: 't',
        default: ['PHONE_NUMBER', 'EMAIL_ADDRESS', 'CREDIT_CARD_NUMBER'],
        type: 'array',
        global: true,
        coerce: infoTypes =>
          infoTypes.map(type => {
            return {name: type};
          }),
      },
      triggerId: {
        alias: 'n',
        default: '',
        type: 'string',
      },
      displayName: {
        alias: 'd',
        default: '',
        type: 'string',
      },
      description: {
        alias: 's',
        default: '',
        type: 'string',
      },
      autoPopulateTimespan: {
        default: false,
        type: 'boolean',
      },
      minLikelihood: {
        alias: 'm',
        default: 'LIKELIHOOD_UNSPECIFIED',
        type: 'string',
        choices: [
          'LIKELIHOOD_UNSPECIFIED',
          'VERY_UNLIKELY',
          'UNLIKELY',
          'POSSIBLE',
          'LIKELY',
          'VERY_LIKELY',
        ],
        global: true,
      },
      maxFindings: {
        alias: 'f',
        default: 0,
        type: 'number',
        global: true,
      },
    },
    opts =>
      createTrigger(
        opts.callingProjectId,
        opts.triggerId,
        opts.displayName,
        opts.description,
        opts.bucketName,
        opts.autoPopulateTimespan,
        opts.scanPeriod,
        opts.infoTypes,
        opts.minLikelihood,
        opts.maxFindings
      )
  )
  .command('list', 'List Data Loss Prevention API job triggers.', {}, opts =>
    listTriggers(opts.callingProjectId)
  )
  .command(
    'delete <triggerId>',
    'Delete a Data Loss Prevention API job trigger.',
    {},
    opts => deleteTrigger(opts.triggerId)
  )
  .option('c', {
    type: 'string',
    alias: 'callingProjectId',
    default: process.env.GCLOUD_PROJECT || '',
  })
  .example('node $0 create my-bucket 1')
  .example('node $0 list')
  .example('node $0 delete projects/my-project/jobTriggers/my-trigger')
  .wrap(120)
  .recommendCommands()
  .epilogue('For more information, see https://cloud.google.com/dlp/docs.');

if (module === require.main) {
  cli.help().strict().argv; // eslint-disable-line
}

Python

def list_triggers(project):
    """Lists all Data Loss Prevention API triggers.
    Args:
        project: The Google Cloud project id to use as a parent resource.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = dlp.project_path(project)

    # Call the API.
    response = dlp.list_job_triggers(parent)

    # Define a helper function to convert the API's "seconds since the epoch"
    # time format into a human-readable string.
    def human_readable_time(timestamp):
        return str(time.localtime(timestamp.seconds))

    for trigger in response:
        print("Trigger {}:".format(trigger.name))
        print("  Created: {}".format(human_readable_time(trigger.create_time)))
        print("  Updated: {}".format(human_readable_time(trigger.update_time)))
        if trigger.display_name:
            print("  Display Name: {}".format(trigger.display_name))
        if trigger.description:
            print("  Description: {}".format(trigger.discription))
        print("  Status: {}".format(trigger.status))
        print("  Error count: {}".format(len(trigger.errors)))

Go

import (
	"context"
	"fmt"
	"io"
	"time"

	dlp "cloud.google.com/go/dlp/apiv2"
	"github.com/golang/protobuf/ptypes"
	"google.golang.org/api/iterator"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// listTriggers lists the triggers for the given project.
func listTriggers(w io.Writer, projectID string) error {
	// projectID := "my-project-id"

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	// Create a configured request.
	req := &dlppb.ListJobTriggersRequest{
		Parent: "projects/" + projectID,
	}
	// Send the request and iterate over the results.
	it := client.ListJobTriggers(ctx, req)
	for {
		t, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}
		fmt.Fprintf(w, "Trigger %v\n", t.GetName())
		c, err := ptypes.Timestamp(t.GetCreateTime())
		if err != nil {
			return fmt.Errorf("CreateTime Timestamp: %v", err)
		}
		fmt.Fprintf(w, "  Created: %v\n", c.Format(time.RFC1123))
		u, err := ptypes.Timestamp(t.GetUpdateTime())
		if err != nil {
			return fmt.Errorf("UpdateTime Timestamp: %v", err)
		}
		fmt.Fprintf(w, "  Updated: %v\n", u.Format(time.RFC1123))
		fmt.Fprintf(w, "  Display Name: %q\n", t.GetDisplayName())
		fmt.Fprintf(w, "  Description: %q\n", t.GetDescription())
		fmt.Fprintf(w, "  Status: %v\n", t.GetStatus())
		fmt.Fprintf(w, "  Error Count: %v\n", len(t.GetErrors()))
	}

	return nil
}

PHP

/**
 * List Data Loss Prevention API job triggers.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';

// Instantiate a client.
$dlp = new DlpServiceClient();

$parent = $dlp->projectName($callingProjectId);

// Run request
$response = $dlp->listJobTriggers($parent);

// Print results
$triggers = $response->iterateAllElements();
foreach ($triggers as $trigger) {
    printf('Trigger %s' . PHP_EOL, $trigger->getName());
    printf('  Created: %s' . PHP_EOL, $trigger->getCreateTime()->getSeconds());
    printf('  Updated: %s' . PHP_EOL, $trigger->getUpdateTime()->getSeconds());
    printf('  Display Name: %s' . PHP_EOL, $trigger->getDisplayName());
    printf('  Description: %s' . PHP_EOL, $trigger->getDescription());
    printf('  Status: %s' . PHP_EOL, $trigger->getStatus());
    printf('  Error count: %s' . PHP_EOL, count($trigger->getErrors()));
    $timespanConfig = $trigger->getInspectJob()->getStorageConfig()->getTimespanConfig();
    printf('  Auto-populates timespan config: %s' . PHP_EOL,
        ($timespanConfig && $timespanConfig->getEnableAutoPopulationOfTimespanConfig() ? 'yes' : 'no'));
}

C#

public static object ListJobTriggers(string projectId)
{
    DlpServiceClient dlp = DlpServiceClient.Create();

    var response = dlp.ListJobTriggers(
        new ListJobTriggersRequest
        {
            ParentAsProjectName = new ProjectName(projectId)
        });

    foreach (var trigger in response)
    {
        Console.WriteLine($"Name: {trigger.Name}");
        Console.WriteLine($"  Created: {trigger.CreateTime.ToString()}");
        Console.WriteLine($"  Updated: {trigger.UpdateTime.ToString()}");
        Console.WriteLine($"  Display Name: {trigger.DisplayName}");
        Console.WriteLine($"  Description: {trigger.Description}");
        Console.WriteLine($"  Status: {trigger.Status}");
        Console.WriteLine($"  Error count: {trigger.Errors.Count}");
    }

    return 0;
}

Borra un trabajo

Para borrar un trabajo de tu proyecto, que incluye sus resultados, haz lo siguiente. Cualquier resultado guardado externamente (como en BigQuery) no se ve afectado por esta operación.

Console

  1. En Cloud Console, abre Cloud DLP.

    Ir a la IU de Cloud DLP

  2. En la pestaña Jobs & job triggers (Trabajos y activadores de trabajos), haz clic en la pestaña All jobs (Todos los trabajos). Google Cloud Console muestra una lista de todos los trabajos para el proyecto actual.

  3. En la columna Actions (Acciones) del activador de trabajo que deseas borrar, haz clic en el menú de más acciones (se muestra como tres puntos distribuidos verticalmente) y, luego, haz clic en Delete (Borrar).Captura de pantalla de la lista de trabajos de la IU de DLP con el menú de acciones abierto.

De forma alternativa, en la lista de trabajos, haz clic en el identificador del trabajo que deseas borrar. En la página de detalles del trabajo, haz clic en Borrar.

Protocolo

Para borrar un trabajo del proyecto actual, envía una solicitud DELETE al extremo dlpJobs, como se muestra aquí. Reemplaza el campo [JOB-IDENTIFIER] con el identificador del trabajo, que comienza con i-.

URL:

DELETE https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/dlpJobs/[JOB-IDENTIFIER]?key={YOUR_API_KEY}

Si la solicitud tuvo éxito, la API de Cloud DLP mostrará una respuesta exitosa. Para verificar que el trabajo se borró correctamente, enumera todos los trabajos.

Para probar esto rápidamente, puedes usar el Explorador de API que se incorpora a continuación. Si quieres obtener información general sobre el uso de JSON para enviar solicitudes a la API de Cloud DLP, consulta Guía de inicio rápido: usa una solicitud JSON.

Java


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DeleteDlpJobRequest;
import com.google.privacy.dlp.v2.DlpJobName;
import java.io.IOException;

public class JobsDelete {
  public static void deleteJobs() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String jobId = "your-job-id";
    deleteJobs(projectId, jobId);
  }

  // Deletes a DLP Job with the given jobId
  public static void deleteJobs(String projectId, String jobId) 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 dlpServiceClient = DlpServiceClient.create()) {

      // Construct the complete job name from the projectId and jobId
      DlpJobName jobName = DlpJobName.of(projectId, jobId);

      // Construct the job deletion request to be sent by the client.
      DeleteDlpJobRequest deleteDlpJobRequest =
          DeleteDlpJobRequest.newBuilder().setName(jobName.toString()).build();

      // Send the job deletion request
      dlpServiceClient.deleteDlpJob(deleteDlpJobRequest);
      System.out.println("Job deleted successfully.");
    }
  }
}

Node.js

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The name of the job whose results should be deleted
// Parent project ID is automatically extracted from this parameter
// const jobName = 'projects/my-project/dlpJobs/X-#####'

// Construct job deletion request
const request = {
  name: jobName,
};

// Run job deletion request
dlp
  .deleteDlpJob(request)
  .then(() => {
    console.log(`Successfully deleted job ${jobName}.`);
  })
  .catch(err => {
    console.log(`Error in deleteJob: ${err.message || err}`);
  });

Python

def delete_dlp_job(project, job_name):
    """Uses the Data Loss Prevention API to delete a long-running DLP job.
    Args:
        project: The project id to use as a parent resource.
        job_name: The name of the DlpJob resource to be deleted.

    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library.
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id and job name into a full resource id.
    name = dlp.dlp_job_path(project, job_name)

    # Call the API to delete job.
    dlp.delete_dlp_job(name)

    print("Successfully deleted %s" % job_name)

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// deleteJob deletes the job with the given name.
func deleteJob(w io.Writer, jobName string) error {
	// jobName := "job-example"
	ctx := context.Background()
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}
	req := &dlppb.DeleteDlpJobRequest{
		Name: jobName,
	}
	if err = client.DeleteDlpJob(ctx, req); err != nil {
		return fmt.Errorf("DeleteDlpJob: %v", err)
	}
	fmt.Fprintf(w, "Successfully deleted job")
	return nil
}

PHP

/**
 * Delete results of a Data Loss Prevention API job
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;

/** Uncomment and populate these variables in your code */
// $jobId = 'The name of the job whose results should be deleted';

// Instantiate a client.
$dlp = new DlpServiceClient();

// Run job-deletion request
// The Parent project ID is automatically extracted from this parameter
$dlp->deleteDlpJob($jobId);

// Print status
printf('Successfully deleted job %s' . PHP_EOL, $jobId);

C#

public static object DeleteJob(string jobName)
{
    DlpServiceClient dlp = DlpServiceClient.Create();

    dlp.DeleteDlpJob(new DeleteDlpJobRequest
    {
        Name = jobName
    });

    Console.WriteLine($"Successfully deleted job {jobName}.");
    return 0;
}

Borra un activador de trabajo

Para borrar un activador de trabajo existente, sigue estos pasos:

Console

  1. En Cloud Console, abre Cloud DLP.

    Ir a la IU de Cloud DLP

  2. En la pestaña Jobs & job triggers (Activadores de trabajos y trabajos), haz clic en la pestaña Job triggers (Activadores de trabajos). En la consola, se muestra una lista de todos los activadores de trabajo para el proyecto actual.

  3. En la columna Actions (Acciones) para el activador de trabajo que deseas borrar, haz clic en el menú de más acciones (que se muestra como tres puntos ordenados verticalmente) y, luego, haz clic en Delete (Borrar).

    Captura de pantalla de la lista de activadores de trabajo de la IU de DLP con el menú de acciones abierto.

Como alternativa, en la lista de activadores de trabajo, haz clic en el nombre del activador de trabajo que deseas borrar. En la página de detalles del activador de trabajo, haz clic en Borrar.

Protocolo

Para borrar un activador de trabajo del proyecto actual, envía una solicitud DELETE al extremo jobTriggers, como se muestra aquí. Reemplaza el campo [JOB-TRIGGER-NAME] con el nombre del activador del trabajo.

URL:

DELETE https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/jobTriggers/[JOB-TRIGGER-NAME]?key={YOUR_API_KEY}

Si la solicitud tuvo éxito, la API de Cloud DLP mostrará una respuesta exitosa. Para verificar si se borró el activador de trabajo de manera correcta, enumera todos los activadores de trabajo.

Para probar esto rápidamente, puedes usar el Explorador de API que se incorpora a continuación. Si quieres obtener información general sobre el uso de JSON para enviar solicitudes a la API de Cloud DLP, consulta Guía de inicio rápido: usa una solicitud JSON.

Java

import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DeleteJobTriggerRequest;
import com.google.privacy.dlp.v2.ProjectJobTriggerName;

class TriggersDelete {

  public static void deleteTrigger() throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String triggerId = "your-trigger-id";
    deleteTrigger(projectId, triggerId);
  }

  public static void deleteTrigger(String projectId, String triggerId) throws Exception {
    // 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 dlpServiceClient = DlpServiceClient.create()) {

      // Get the full trigger name from the given triggerId and ProjectId
      ProjectJobTriggerName triggerName = ProjectJobTriggerName.of(projectId, triggerId);

      // Construct the trigger deletion request to be sent by the client
      DeleteJobTriggerRequest deleteJobTriggerRequest =
          DeleteJobTriggerRequest.newBuilder().setName(triggerName.toString()).build();

      // Send the trigger deletion request
      dlpServiceClient.deleteJobTrigger(deleteJobTriggerRequest);
      System.out.println("Trigger deleted: " + triggerName.toString());
    }
  }
}

Node.js

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The name of the trigger to be deleted
// Parent project ID is automatically extracted from this parameter
// const triggerId = 'projects/my-project/triggers/my-trigger';

// Construct trigger deletion request
const request = {
  name: triggerId,
};
try {
  // Run trigger deletion request
  await dlp.deleteJobTrigger(request);
  console.log(`Successfully deleted trigger ${triggerId}.`);
} catch (err) {
  console.log(`Error in deleteTrigger: ${err.message || err}`);
}

Python

def delete_trigger(project, trigger_id):
    """Deletes a Data Loss Prevention API trigger.
    Args:
        project: The id of the Google Cloud project which owns the trigger.
        trigger_id: The id of the trigger to delete.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = dlp.project_path(project)

    # Combine the trigger id with the parent id.
    trigger_resource = "{}/jobTriggers/{}".format(parent, trigger_id)

    # Call the API.
    dlp.delete_job_trigger(trigger_resource)

    print("Trigger {} successfully deleted.".format(trigger_resource))

if __name__ == "__main__":
    default_project = os.environ.get("GCLOUD_PROJECT")

    parser = argparse.ArgumentParser(description=__doc__)
    subparsers = parser.add_subparsers(
        dest="action", help="Select which action to perform."
    )
    subparsers.required = True

    parser_create = subparsers.add_parser("create", help="Create a trigger.")
    parser_create.add_argument(
        "bucket", help="The name of the GCS bucket containing the file."
    )
    parser_create.add_argument(
        "scan_period_days",
        type=int,
        help="How often to repeat the scan, in days. The minimum is 1 day.",
    )
    parser_create.add_argument(
        "--trigger_id",
        help="The id of the trigger. If omitted, an id will be randomly "
        "generated",
    )
    parser_create.add_argument(
        "--display_name", help="The optional display name of the trigger."
    )
    parser_create.add_argument(
        "--description", help="The optional description of the trigger."
    )
    parser_create.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )
    parser_create.add_argument(
        "--info_types",
        nargs="+",
        help="Strings representing info types to look for. A full list of "
        "info categories and types is available from the API. Examples "
        'include "FIRST_NAME", "LAST_NAME", "EMAIL_ADDRESS". '
        "If unspecified, the three above examples will be used.",
        default=["FIRST_NAME", "LAST_NAME", "EMAIL_ADDRESS"],
    )
    parser_create.add_argument(
        "--min_likelihood",
        choices=[
            "LIKELIHOOD_UNSPECIFIED",
            "VERY_UNLIKELY",
            "UNLIKELY",
            "POSSIBLE",
            "LIKELY",
            "VERY_LIKELY",
        ],
        help="A string representing the minimum likelihood threshold that "
        "constitutes a match.",
    )
    parser_create.add_argument(
        "--max_findings",
        type=int,
        help="The maximum number of findings to report; 0 = no maximum.",
    )
    parser_create.add_argument(
        "--auto_populate_timespan",
        type=bool,
        help="Limit scan to new content only.",
    )

    parser_list = subparsers.add_parser("list", help="List all triggers.")
    parser_list.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )

    parser_delete = subparsers.add_parser("delete", help="Delete a trigger.")
    parser_delete.add_argument(
        "trigger_id", help="The id of the trigger to delete."
    )
    parser_delete.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )

    args = parser.parse_args()

    if args.action == "create":
        create_trigger(
            args.project,
            args.bucket,
            args.scan_period_days,
            args.info_types,
            trigger_id=args.trigger_id,
            display_name=args.display_name,
            description=args.description,
            min_likelihood=args.min_likelihood,
            max_findings=args.max_findings,
            auto_populate_timespan=args.auto_populate_timespan,
        )
    elif args.action == "list":
        list_triggers(args.project)
    elif args.action == "delete":
        delete_trigger(args.project, args.trigger_id)

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// deleteTrigger deletes the given trigger.
func deleteTrigger(w io.Writer, triggerID string) error {
	// projectID := "my-project-id"
	// triggerID := "my-trigger"

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	req := &dlppb.DeleteJobTriggerRequest{
		Name: triggerID,
	}

	if err := client.DeleteJobTrigger(ctx, req); err != nil {
		return fmt.Errorf("DeleteJobTrigger: %v", err)
	}
	fmt.Fprintf(w, "Successfully deleted trigger %v", triggerID)
	return nil
}

PHP

/**
 * Delete a Data Loss Prevention API job trigger.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';
// $triggerId = 'The name of the trigger to be deleted.';

// Instantiate a client.
$dlp = new DlpServiceClient();

// Run request
// The Parent project ID is automatically extracted from this parameter
$triggerName = $dlp->projectJobTriggerName($callingProjectId, $triggerId);
$response = $dlp->deleteJobTrigger($triggerName);

// Print the results
printf('Successfully deleted trigger %s' . PHP_EOL, $triggerName);

C#

public static object DeleteJobTrigger(string triggerName)
{
    DlpServiceClient dlp = DlpServiceClient.Create();

    dlp.DeleteJobTrigger(
        new DeleteJobTriggerRequest
        {
            Name = triggerName
        });

    Console.WriteLine($"Successfully deleted trigger {triggerName}.");
    return 0;
}

Actualiza un activador de trabajo existente

Además de crear, enumerar y borrar activadores de trabajo, también puedes actualizar un activador de trabajo existente. Para cambiar la configuración de un activador de trabajo existente, sigue estos pasos:

Console

  1. En Cloud Console, abre Cloud DLP.

    Ir a la IU de Cloud DLP

  2. Haz clic en la pestaña Job triggers (Activadores de trabajo). En la consola, se muestra una lista de todos los activadores de trabajo para el proyecto actual.

  3. En la columna Actions (Acciones) del activador de trabajo que deseas borrar, haz clic en los tres puntos verticales y, luego, en View details (Ver detalles).

    Captura de pantalla de la lista de activadores de trabajo de la IU de DLP con el menú de acciones abierto.

  4. En la página de detalles del activador de trabajo, haz clic en Edit (Editar).

  5. En la página del activador de edición, puedes cambiar la ubicación de los datos de entrada; detalles de detección, como plantillas, Infotipos o probabilidades; las acciones posteriores al análisis y la programación del activador de trabajo. Cuando finalices de realizar cambios, haz clic en Guardar.

Protocolo

Usa el método projects.jobTriggers.patch para enviar valores JobTrigger nuevos a la API de Cloud DLP a fin de actualizar esos valores dentro de un activador de trabajo especificado.

Por ejemplo, considera el siguiente activador de trabajo simple. Este JSON representa el activador del trabajo y se mostró después de enviar una solicitud GET al extremo del activador de trabajo del proyecto actual.

Resultado de JSON:

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "inspectJob":{
    "storageConfig":{
      "cloudStorageOptions":{
        "fileSet":{
          "url":"gs://dlptesting/*"
        },
        "fileTypes":[
          "FILE_TYPE_UNSPECIFIED"
        ],
        "filesLimitPercent":100
      },
      "timespanConfig":{
        "enableAutoPopulationOfTimespanConfig":true
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"US_SOCIAL_SECURITY_NUMBER"
        }
      ],
      "minLikelihood":"POSSIBLE",
      "limits":{

      }
    },
    "actions":[
      {
        "jobNotificationEmails":{

        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2019-03-06T21:19:45.774841Z",
  "updateTime":"2019-03-06T21:19:45.774841Z",
  "status":"HEALTHY"
}

El siguiente JSON, cuando se envía con una solicitud PATCH al extremo especificado, actualiza el activador de trabajo determinado con un nuevo Infotipo para analizar, así como una nueva probabilidad mínima. Ten en cuenta que también debes especificar el atributo updateMask y que su valor está en formato FieldMask.

Entrada de JSON:

PATCH https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]?key={YOUR_API_KEY}

{
  "jobTrigger":{
    "inspectJob":{
      "inspectConfig":{
        "infoTypes":[
          {
            "name":"US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER"
          }
        ],
        "minLikelihood":"LIKELY"
      }
    }
  },
  "updateMask":"inspectJob(inspectConfig(infoTypes,minLikelihood))"
}

Después de enviar este JSON a la URL especificada, muestra lo siguiente, que representa el activador de trabajo actualizado. Ten en cuenta que los valores de Infotipo y probabilidad originales se reemplazaron por los nuevos.

Resultado de JSON:

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "inspectJob":{
    "storageConfig":{
      "cloudStorageOptions":{
        "fileSet":{
          "url":"gs://dlptesting/*"
        },
        "fileTypes":[
          "FILE_TYPE_UNSPECIFIED"
        ],
        "filesLimitPercent":100
      },
      "timespanConfig":{
        "enableAutoPopulationOfTimespanConfig":true
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER"
        }
      ],
      "minLikelihood":"LIKELY",
      "limits":{

      }
    },
    "actions":[
      {
        "jobNotificationEmails":{

        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2019-03-06T21:19:45.774841Z",
  "updateTime":"2019-03-06T21:27:01.650183Z",
  "lastRunTime":"1970-01-01T00:00:00Z",
  "status":"HEALTHY"
}

Para probar esto rápidamente, puedes usar el Explorador de API que se incorpora a continuación. Si quieres obtener información general sobre el uso de JSON para enviar solicitudes a la API de Cloud DLP, consulta Guía de inicio rápido: usa una solicitud JSON.

Usa un activador de trabajo

En esta sección, se describe cómo usar los activadores de trabajo para analizar solo el contenido nuevo y cómo activar los trabajos cada vez que se sube un archivo a Cloud Storage mediante Cloud Functions.

Analiza solo el contenido nuevo

También puedes configurar una opción para establecer de forma automática la fecha del período de los archivos almacenados en Cloud Storage o BigQuery. Una vez que configures el objeto TimespanConfig para que se complete automáticamente, Cloud DLP solo analizará los datos que se agregaron o modificaron desde la última ejecución:

...
  timespan_config {
        enable_auto_population_of_timespan_config: true
      }
...

Activa trabajos en la carga de archivos

Además de la compatibilidad con activadores de trabajo integrados en Cloud DLP, Google Cloud también tiene una variedad de otros componentes que se pueden usar para integrar o activar trabajos de DLP. Por ejemplo, puedes usar Cloud Functions para activar un análisis de DLP cada vez que se suba un archivo a Cloud Storage.

Para obtener instrucciones paso a paso sobre cómo hacerlo, consulta Cómo automatizar la clasificación de datos subidos a Cloud Storage.