Créer et planifier des tâches d'inspection Cloud DLP

Cette rubrique explique en détail comment créer une tâche ou un déclencheur de tâche. Pour savoir rapidement comment créer un déclencheur de tâche à l'aide de l'interface utilisateur Cloud DLP, consultez la section Démarrage rapide – Créer un déclencheur de tâche Cloud DLP.

À propos des tâches et des déclencheurs de tâche

Lorsque Cloud Data Loss Prevention (DLP) effectue une analyse d'inspection afin d'identifier des données sensibles, chaque analyse s'exécute en tant que tâche. Cloud DLP crée et exécute une ressource de tâche chaque fois que vous lui demandez d'inspecter vos dépôts de stockage Google Cloud, tels que vos buckets Cloud Storage, vos tables BigQuery et vos genres Datastore.

Vous pouvez planifier des tâches d'inspection en créant des déclencheurs de tâche. Un déclencheur de tâche est un événement qui automatise la création périodique de tâches DLP.

Pour en savoir plus sur les tâches et les déclencheurs de tâche dans Cloud DLP, consultez la page conceptuelle Tâches et déclencheurs de tâches.

Créer une tâche ou un déclencheur de tâche

Pour créer une tâche ou un déclencheur de tâche Cloud DLP, procédez comme suit :

Console

  1. Dans Cloud Console, ouvrez Cloud DLP.

    Accéder à l'UI Cloud DLP

  2. Dans le menu Create (Créer), sélectionnez Job or job trigger (Tâche ou déclencheur de tâche).

    Capture d'écran de l'option de menu

    Vous pouvez également cliquer sur le bouton suivant :

    Créer un déclencheur de tâche

La page "Create job or job trigger" (Créer une tâche ou un déclencheur de tâche) contient les sections suivantes :

Choisir les données d'entrée

Nom

Saisissez un nom pour la tâche ou le déclencheur de tâche. Vous pouvez utiliser des lettres, des chiffres et des traits d'union. Le choix d'un nom pour votre tâche ou déclencheur de tâche est facultatif. Si vous ne saisissez pas de nom, Cloud DLP attribue un identifiant unique à la tâche ou au déclencheur de tâche.

Zone

Dans le menu Type de stockage, choisissez le type de dépôt qui stockera les données que vous souhaitez analyser :

  • Cloud Storage : saisissez l'URL du bucket que vous souhaitez analyser, ou sélectionnez Inclure/Exclure dans le menu Type d'emplacement, puis cliquez sur Parcourir pour accéder au bucket ou au sous-dossier à analyser. Cochez la case Analyser le dossier de manière récursive pour analyser le répertoire spécifié et tous les répertoires contenus. Ne cochez pas la case si vous ne souhaitez analyser que le répertoire spécifié.
  • BigQuery : saisissez les identifiants du projet, de l'ensemble de données et de la table à analyser.
  • Datastore : saisissez les identifiants du projet, de l'espace de noms (facultatif) et du genre à analyser.

Échantillonnage

L'échantillonnage est une méthode facultative permettant d'économiser des ressources si vous disposez d'une très grande quantité de données.

Sous Sampling (Échantillonnage), vous pouvez choisir d’analyser toutes les données sélectionnées ou d'échantillonner les données en analysant un certain pourcentage. L'échantillonnage fonctionne différemment selon le type de dépôt de stockage utilisé pour l'analyse :

  • Pour BigQuery, vous pouvez échantillonner un sous-ensemble du nombre total de lignes sélectionnées, correspondant au pourcentage spécifié de fichiers à inclure dans l'analyse.
  • Pour Cloud Storage, si un fichier dépasse la taille spécifiée dans Max byte size to scan per file (Taille d'octets maximale à analyser par fichier), Cloud DLP effectue l'analyse jusqu'à cette valeur, puis passe au fichier suivant.

Pour activer l'échantillonnage, choisissez l'une des options suivantes dans le premier menu :

  • Démarrer l'échantillonnage à partir du début : Cloud DLP lance l'analyse partielle au début des données. Pour BigQuery, l'analyse démarre à la première ligne. Pour Cloud Storage, l'analyse démarre au début de chaque fichier et s'arrête une fois que Cloud DLP a analysé les données jusqu'à la taille de fichier maximale spécifiée (voir ci-dessus).
  • Démarrer l'échantillonnage à partir d'un emplacement aléatoire : Cloud DLP démarre l'analyse partielle à partir d'un emplacement aléatoire dans les données. Pour BigQuery, l'analyse se lance sur une ligne au hasard. Pour Cloud Storage, ce paramètre ne s'applique qu'aux fichiers qui dépassent une taille maximale spécifiée. Cloud DLP analyse intégralement les fichiers dont la taille est inférieure à la taille maximale indiquée. Les fichiers dont la taille dépasse la taille maximale autorisée sont analysés jusqu'à concurrence de cette taille maximale.

Pour effectuer une analyse partielle, vous devez également choisir le pourcentage de données que vous souhaitez analyser. Utilisez le curseur pour définir le pourcentage.

Configuration avancée

Lorsque vous créez une tâche ou un déclencheur de tâche pour analyser le contenu d'un bucket Cloud Storage ou d'une table BigQuery, vous pouvez affiner votre recherche en spécifiant une configuration avancée. Plus précisément, vous pouvez configurer les éléments suivants :

  • Fichiers (Cloud Storage seulement) : types de fichiers à analyser, y compris les fichiers texte, les fichiers binaires et les fichiers image.
  • Champs d'identification (BigQuery uniquement) : identifiants de ligne uniques dans la table.
  • Pour Cloud Storage, si un fichier dépasse la taille spécifiée dans Max byte size to scan per file (Taille d'octets maximale à analyser par fichier), Cloud DLP effectue l'analyse jusqu'à cette valeur, puis passe au fichier suivant.

Pour activer l'échantillonnage, choisissez le pourcentage de données à analyser. Utilisez le curseur pour définir le pourcentage. Sélectionnez ensuite l'une des options suivantes dans le premier menu :

  • Démarrer l'échantillonnage à partir du début : Cloud DLP lance l'analyse partielle au début des données. Pour BigQuery, l'analyse démarre à la première ligne. Pour Cloud Storage, l'analyse démarre au début de chaque fichier et s'arrête une fois que Cloud DLP a analysé les données jusqu'à la taille de fichier maximale spécifiée (voir ci-dessus).
  • Démarrer l'échantillonnage à partir d'un emplacement aléatoire : Cloud DLP démarre l'analyse partielle à partir d'un emplacement aléatoire dans les données. Pour BigQuery, l'analyse se lance sur une ligne au hasard. Pour Cloud Storage, ce paramètre ne s'applique qu'aux fichiers qui dépassent une taille maximale spécifiée. Cloud DLP analyse intégralement les fichiers dont la taille est inférieure à la taille maximale indiquée. Les fichiers dont la taille dépasse la taille maximale autorisée sont analysés jusqu'à concurrence de cette taille maximale.

Fichiers

Pour les fichiers stockés dans Cloud Storage, l'onglet Files (Fichiers) permet de spécifier les types à inclure dans l'analyse.

Vous pouvez choisir entre des fichiers binaires, texte, image ou tous les fichiers. Une liste complète des extensions de fichiers que Cloud DLP peut analyser dans des buckets Cloud Storage est disponible sur la page de référence de l'API pour FileType. Si vous sélectionnez l'option Fichiers binaires, Cloud DLP analyse les fichiers de types non reconnus.

Champs d'identification

Pour les tables dans BigQuery, l'onglet Identifying fields (Champs d'identification) vous permet de spécifier certains champs pour que Cloud DLP n'analyse que les lignes contenant des valeurs dans ces champs.

Pour ajouter un champ, cliquez sur Add identifiying field (Ajouter un champ d'identification). Entrez le nom du champ en utilisant la notation par points pour spécifier les champs imbriqués, le cas échéant.

Vous pouvez ajouter autant de champs que vous le souhaitez. Pour supprimer un champ, cliquez sur l'icône de la corbeille Supprimer l'élément en regard du champ à supprimer.

Configurer la détection

La section Configurer la détection vous permet de spécifier les types de données sensibles que vous souhaitez analyser. Cette section est facultative. Si vous ne la complétez pas, Cloud DLP recherche un ensemble de types de données sensibles courants dans vos données en utilisant l'option Most common (Les plus courants), qui correspond au détecteur d'infoType ALL_BASIC.

Modèle

Vous pouvez également exploiter un modèle Cloud DLP pour réutiliser les informations de configuration spécifiées précédemment.

Si vous avez déjà créé un modèle que vous souhaitez utiliser, cliquez sur le champ Nom du modèle pour afficher une liste des modèles d'inspection existants. Choisissez ou saisissez le nom du modèle que vous souhaitez utiliser.

Pour plus d'informations sur la création de modèles, reportez-vous à la section Créer des modèles d'inspection Cloud DLP.

InfoTypes

Les détecteurs d'infoType trouvent des données sensibles d'un certain type. Par exemple, le détecteur d'infoType intégré US_SOCIAL_SECURITY_NUMBER de Cloud DLP identifie les numéros de sécurité sociale américains. En plus des détecteurs d'infoType intégrés, vous pouvez créer vos propres détecteurs d'infoType personnalisés.

Sous InfoTypes, choisissez le détecteur d'infoType qui correspond au type de données que vous souhaitez analyser. Vous pouvez également laisser ce champ vide pour rechercher tous les infoTypes par défaut. Vous trouverez plus d'informations sur chaque détecteur dans la documentation de référence sur les détecteurs d'infoType.

Vous pouvez également ajouter des détecteurs d'infoType personnalisés dans la section InfoTypes personnalisés, et personnaliser les détecteurs d'infoType intégrés et personnalisés dans la section Ensembles de règles d'inspection.

InfoTypes personnalisés

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.

Ensembles de règles d'inspection

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.

Seuil de confiance

Chaque fois que Cloud DLP détecte une correspondance potentielle pour des données sensibles, il lui attribue une valeur de probabilité sur une échelle allant de "Très improbable" à "Très probable". Lorsque vous définissez une valeur de probabilité, vous indiquez à Cloud DLP de ne rechercher que les données qui correspondent à cette valeur de probabilité ou à une valeur supérieure.

La valeur par défaut "Possible" est suffisante dans la plupart des cas. Si vous obtenez régulièrement des correspondances trop larges lorsque vous utilisez ce modèle, déplacez le curseur vers le haut. Si vous obtenez trop peu de correspondances, déplacez le curseur vers le bas.

Lorsque vous avez terminé, cliquez sur Continuer.

Ajouter des actions

Dans l'étape Add actions (Ajouter des actions), vous sélectionnez les actions que vous souhaitez que Cloud DLP effectue une fois la tâche terminée.

Vous disposez des options suivantes :

  • Save to BigQuery (Enregistrer dans BigQuery) : cette option enregistre les résultats dans une table BigQuery. Les résultats stockés dans BigQuery contiennent des détails sur l'emplacement de chaque résultat et la probabilité de correspondance. Si vous ne stockez pas les résultats, la tâche terminée ne contiendra que des statistiques sur le nombre et les infoTypes des résultats. Si vous ne spécifiez pas d'ID de table, BigQuery attribue un nom par défaut à une nouvelle table. Si vous spécifiez un nom de table existante, les résultats y sont ajoutés. Cochez la case Inclure les guillemets pour inclure du contenu contextuel dans chaque résultat de correspondance.
  • Publier dans Pub/Sub : cette option envoie un message de notification à un sujet Cloud Pub/Sub lorsque la tâche est terminée. Cliquez sur Nouveau sujet pour spécifier un ou plusieurs noms de sujet sur lesquels vous souhaitez publier la notification.
  • Publier dans Google Cloud Security Command Center : cette option permet de publier un résumé de vos résultats dans Security Command Center. Pour en savoir plus, consultez la section Envoyer des résultats d'analyse Cloud DLP à Security Command Center.
  • Publier dans Data Catalog : sélectionnez cette option pour envoyer les résultats d'inspection à Data Catalog, le service de gestion de métadonnées de Google Cloud.
  • Notify by email (Notifier par e-mail) : cette option force Cloud DLP à envoyer un e-mail aux propriétaires de projet et aux éditeurs lorsque la tâche est terminée.

Lorsque vous avez fini de sélectionner des actions, cliquez sur Continue (Continuer).

Horaires

Dans la section Programmation, vous disposez de deux options :

  • Specify timespan (Spécifier l'intervalle de temps) : cette option limite par date le nombre de fichiers ou de lignes à analyser. Cliquez sur Heure de début pour spécifier l'horodatage de fichier le plus ancien à inclure. Laissez cette valeur vide pour spécifier tous les fichiers. Cliquez sur Heure de fin pour spécifier le dernier horodatage de fichier à inclure. Laissez cette valeur vide pour ne spécifier aucune limite d'horodatage postérieure.
  • Créer un déclencheur pour exécuter la tâche selon une programmation régulière : cette option crée le déclencheur de tâche et le configure pour exécuter la tâche selon le calendrier spécifié. La valeur par défaut est également la valeur minimale, soit 24 heures. La valeur maximale est de 540 jours. Si vous souhaitez que Cloud DLP n'analyse que les nouveaux fichiers ou les nouvelles lignes, cochez la case Limiter les analyses au nouveau contenu.

Examen

La section Examen contient un résumé au format JSON des paramètres de tâche que vous venez de spécifier.

Cliquez sur Créer pour créer le déclencheur de tâche (si vous avez spécifié une programmation) ou la tâche (si vous n'avez pas spécifié de programmation), et pour exécuter la tâche une fois. La page d'informations de la tâche ou du déclencheur de tâche apparaît, contenant l'état ainsi que d'autres informations. Si la tâche est en cours d'exécution, vous pouvez cliquer sur le bouton Annuler pour l'arrêter. Vous pouvez également supprimer la tâche ou le déclencheur de tâche en cliquant sur Supprimer.

Pour revenir à la page principale Cloud DLP, cliquez sur la flèche Retour de Cloud Console.

Protocole

Un déclencheur de tâche est représenté dans l'API DLP par la ressource JobTrigger. Pour créer un déclencheur de tâche, vous pouvez utiliser la méthode projects.jobTriggers.create de la ressource JobTrigger.

Cet exemple de code JSON peut être envoyé dans une requête POST au point de terminaison REST Cloud DLP. Il montre comment créer un déclencheur de tâche dans Cloud DLP. La tâche lancée par ce déclencheur est une analyse d'inspection Cloud Datastore. Le déclencheur de tâche créé est exécuté toutes les 86 400 secondes (soit toutes les 24 heures).

Pour tester rapidement ce code, utilisez APIs Explorer, intégré ci-dessous. Gardez à l'esprit qu'une requête réussie, même dans APIs Explorer, entraînera la création d'un déclencheur de tâche planifiée. Des informations générales sur l'utilisation du format JSON pour envoyer des requêtes à l'API Cloud DLP sont disponibles dans le guide de démarrage rapide JSON.

Entrée 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]"
              }
            }
          }
        }
      ]
    }
  }
}

Sortie JSON :

La sortie suivante indique que le déclencheur de tâche a été créé avec succès.

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

Répertorier toutes les tâches

Pour répertorier toutes les tâches du projet en cours, procédez comme suit :

Console

  1. Dans Cloud Console, ouvrez Cloud DLP.

    Accéder à l'UI Cloud DLP

  2. Dans l'onglet Tâches et déclencheurs de tâches, cliquez sur l'onglet Toutes les tâches.

La console affiche la liste de toutes les tâches du projet en cours, avec leur identifiant, leur état, leur date de création et leur heure de fin. Vous pouvez obtenir plus d'informations sur une tâche (et consulter un résumé de ses résultats) en cliquant sur son identifiant.

Protocole

La ressource DlpJob possède une méthode projects.dlpJobs.list qui vous permet de répertorier toutes les tâches.

Pour répertorier toutes les tâches actuellement définies dans votre projet, envoyez une requête GET au point de terminaison dlpJobs, comme indiqué ici :

URL :

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

Le résultat JSON suivant répertorie l'une des tâches renvoyées. Notez que la structure de la tâche reflète celle de la ressource DlpJob.

Sortie 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"
    },
    ...

Pour tester rapidement ce code, utilisez APIs Explorer, intégré ci-dessous. Des informations générales sur l'utilisation du format JSON pour envoyer des requêtes à l'API Cloud DLP sont disponibles dans le guide de démarrage rapide 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;
}

Répertorier tous les déclencheurs de tâche

Pour répertorier tous les déclencheurs de tâche du projet en cours, procédez comme suit :

Console

  1. Dans Cloud Console, ouvrez Cloud DLP.

    Accéder à l'UI Cloud DLP

  2. Dans l'onglet Tâches et déclencheurs de tâches, cliquez sur l'onglet Déclencheurs de tâche.

La console affiche une liste de tous les déclencheurs de tâche du projet en cours.

Protocole

La ressource JobTrigger possède une méthode projects.jobTriggers.list qui vous permet de répertorier tous les déclencheurs de tâche.

Pour répertorier tous les déclencheurs de tâche actuellement définis dans votre projet, envoyez une requête GET au point de terminaison jobTriggers, comme indiqué ici :

URL :

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

La sortie JSON suivante indique la présence du déclencheur de tâche que nous avons créé dans la section précédente. Notez que la structure du déclencheur de tâche reflète celle de la ressource JobTrigger.

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

Pour tester rapidement ce code, utilisez APIs Explorer, intégré ci-dessous. Des informations générales sur l'utilisation du format JSON pour envoyer des requêtes à l'API Cloud DLP sont disponibles dans le guide de démarrage rapide 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;
}

Supprimer une offre d'emploi

Pour supprimer une tâche de votre projet, y compris ses résultats, procédez comme suit : Tous les résultats enregistrés en externe (dans BigQuery, par exemple) ne sont pas modifiés par cette opération.

Console

  1. Dans Cloud Console, ouvrez Cloud DLP.

    Accéder à l'UI Cloud DLP

  2. Dans l'onglet Tâches et déclencheurs de tâches, cliquez sur l'onglet Toutes les tâches. Google Cloud Console affiche la liste de toutes les tâches du projet en cours.

  3. Dans la colonne Actions associée au déclencheur de tâche que vous souhaitez supprimer, cliquez sur le menu Autres actions (représenté par trois points disposés verticalement) , puis cliquez sur Delete (Supprimer). Capture d'écran de la liste des tâches de l'interface utilisateur DLP où le menu

Vous pouvez également cliquer sur l'identifiant de la tâche à supprimer dans la liste des tâches. Sur la page d'informations de la tâche, cliquez sur Delete (Supprimer).

Protocole

Pour supprimer une tâche du projet en cours, envoyez une requête DELETE au point de terminaison dlpJobs, comme indiqué ici. Remplacez le champ [JOB-IDENTIFIER] par l'identifiant de la tâche, qui commence par i-.

URL :

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

Si la requête aboutit, l'API Cloud DLP renvoie une réponse positive. Pour vérifier que la tâche a bien été supprimée, répertoriez toutes les tâches.

Pour tester rapidement ce code, utilisez APIs Explorer, intégré ci-dessous. Des informations générales sur l'utilisation du format JSON pour envoyer des requêtes à l'API Cloud DLP sont disponibles dans le guide de démarrage rapide 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;
}

Supprimer un déclencheur de tâche

Pour supprimer un déclencheur de tâche existant, procédez comme suit :

Console

  1. Dans Cloud Console, ouvrez Cloud DLP.

    Accéder à l'UI Cloud DLP

  2. Dans l'onglet Tâches et déclencheurs de tâches, cliquez sur l'onglet Déclencheurs de tâche. La console affiche la liste de tous les déclencheurs de tâche du projet en cours.

  3. Dans la colonne Actions associée au déclencheur de tâche que vous souhaitez supprimer, cliquez sur le menu Autres actions (représenté par trois points disposés verticalement) , puis cliquez sur Delete (Supprimer).

    Capture d'écran de la liste des déclencheurs de tâche de l'interface utilisateur DLP où le menu

Sinon, dans la liste des déclencheurs de tâche, cliquez sur le nom de la tâche que vous souhaitez supprimer. Sur la page d'informations du déclencheur de tâche, cliquez sur Supprimer.

Protocole

Pour supprimer un déclencheur de tâche du projet en cours, envoyez une requête DELETE au point de terminaison jobTriggers, comme indiqué ici. Remplacez le champ [JOB-TRIGGER-NAME] par le nom du déclencheur de tâche.

URL :

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

Si la requête aboutit, l'API Cloud DLP renvoie une réponse positive. Pour vérifier que le déclencheur de tâche a bien été supprimé, répertoriez tous les déclencheurs de tâche.

Pour tester rapidement ce code, utilisez APIs Explorer, intégré ci-dessous. Des informations générales sur l'utilisation du format JSON pour envoyer des requêtes à l'API Cloud DLP sont disponibles dans le guide de démarrage rapide 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;
}

Mettre à jour un déclencheur de tâche existant

En plus de créer, répertorier et supprimer des déclencheurs de tâche, vous pouvez également les mettre à jour. Pour modifier la configuration d'un déclencheur de tâche existant, procédez comme suit :

Console

  1. Dans Cloud Console, ouvrez Cloud DLP.

    Accéder à l'UI Cloud DLP

  2. Cliquez sur l'onglet Job triggers (Déclencheurs de tâche). La console affiche une liste de tous les déclencheurs de tâche du projet en cours.

  3. Dans la colonne Actions du déclencheur de tâche que vous souhaitez supprimer, cliquez sur les trois points verticaux, puis sur View details (Afficher les détails).

    Capture d'écran de la liste des déclencheurs de tâche de l'interface utilisateur DLP où le menu

  4. Sur la page de détail du déclencheur de tâche, cliquez sur Modifier.

  5. Sur la page de modification du déclencheur, vous pouvez modifier l'emplacement des données d'entrée, les détails de détection (modèles, info-types ou probabilités), les actions post-analyse et la programmation. Une fois les modifications terminées, cliquez sur Enregistrer.

Protocole

Utilisez la méthode projects.jobTriggers.patch pour envoyer de nouvelles valeurs JobTrigger à l'API Cloud DLP afin de mettre à jour ces valeurs dans un déclencheur de tâche spécifié.

Par exemple, considérons le déclencheur de tâche simple ci-après. Ce code JSON représente le déclencheur de tâche et a été renvoyé après l'envoi d'une requête GET au point de terminaison du déclencheur de tâche du projet actuel.

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

Le code JSON suivant, lorsqu'il est envoyé avec une requête PATCH au point de terminaison spécifié, met à jour le déclencheur de tâche considéré avec un nouvel infoType à analyser, ainsi qu'une nouvelle valeur minimale de probabilité. Notez que vous devez également spécifier l'attribut updateMask avec une valeur au format FieldMask.

Entrée 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))"
}

Une fois que vous avez envoyé ce code JSON à l'URL spécifiée, les lignes ci-dessous représentant le déclencheur de tâche mis à jour sont renvoyées. Notez que les valeurs d'infoType et de probabilité d'origine ont été remplacées par les nouvelles valeurs.

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

Pour tester rapidement ce code, utilisez APIs Explorer, intégré ci-dessous. Des informations générales sur l'utilisation du format JSON pour envoyer des requêtes à l'API Cloud DLP sont disponibles dans le guide de démarrage rapide JSON.

Utiliser un déclencheur de tâche

Cette section explique comment utiliser les déclencheurs de tâche pour analyser uniquement le nouveau contenu et comment déclencher des tâches chaque fois qu'un fichier est importé dans Cloud Storage à l'aide de Cloud Functions.

Limiter les analyses au nouveau contenu

Une option permet également de définir automatiquement la période pour l'analyse des fichiers stockés dans Cloud Storage ou BigQuery. Une fois que vous avez défini l'objet TimespanConfig pour qu'il soit inséré automatiquement, Cloud DLP n'analyse que les données qui ont été ajoutées ou modifiées depuis l'exécution du dernier déclencheur :

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

Déclencher des tâches en cas d'importation de fichiers

En complément de la prise en charge des déclencheurs de tâche qui est intégrée à Cloud DLP, Google Cloud fournit divers composants permettant d'intégrer ou de déclencher des tâches DLP. Par exemple, vous pouvez utiliser Cloud Functions pour déclencher une analyse DLP chaque fois qu'un fichier est importé dans Cloud Storage.

Pour obtenir des instructions détaillées sur la procédure à suivre, consultez la page Automatisation de la classification des données importées sur Cloud Storage.