Interroger les résultats liés à la protection des données sensibles dans BigQuery

Cette page fournit des exemples de requêtes que vous pouvez utiliser pour analyser les résultats liés à la protection des données sensibles exportés vers BigQuery.

Vous pouvez configurer une tâche d'inspection ou un déclencheur de tâche pour enregistrer les résultats dans BigQuery. Cela vous permet d'interroger les résultats pour une analyse plus approfondie. Lorsque vos résultats sont exportés vers BigQuery, les données sont écrites dans une table nouvelle ou existante.

Pour en savoir plus sur toutes les actions que la protection des données sensibles peut effectuer après inspection, consultez la rubrique présentant les concepts liés aux Actions.

Pour en savoir plus sur l'exécution de requêtes, consultez les pages suivantes:

Colonnes de la table BigQuery

Les colonnes du tableau des résultats exportés sont basées sur les attributs de l'objet Finding.

Si vous configurez l'inspection d'une table BigQuery, vous pouvez configurer la tâche ou le déclencheur de tâche de sorte que les résultats exportés contiennent les identifiants de la ligne. Cela vous permet de lier les résultats d'inspection aux lignes qui les contiennent.

Dans la tâche d'inspection ou le déclencheur de tâche, définissez les champs suivants sur les noms des colonnes qui identifient de manière unique chaque ligne de la table, c'est-à-dire les colonnes servant à la fonction d'une clé primaire:

  • Si vous utilisez la console Google Cloud, renseignez le champ Champs d'identification (séparés par une virgule).
  • Si vous utilisez l'API DLP, définissez la propriété identifyingFields.

Une fois l'inspection terminée et les résultats exportés vers BigQuery, chaque résultat contiendra les valeurs correspondantes des colonnes que vous avez spécifiées. Ces valeurs se trouvent dans le champ location.content_locations.record_location.record_key.id_values. Vous pouvez ensuite utiliser ces valeurs pour associer le résultat à la ligne spécifique de la table BigQuery inspectée.

Exemples de requêtes

Servez-vous des exemples de requêtes suivants pour analyser vos résultats. Vous pouvez également utiliser les requêtes dans un outil de visualisation tel que Looker Studio. Ces requêtes sont fournies pour vous aider à interroger vos données de résultats.

Dans chacune des requêtes suivantes, remplacez les éléments suivants:

  • PROJECT_ID: identifiant du projet
  • DATASET : nom de l'ensemble de données BigQuery
  • TABLE_ID: ID de la table

Sélectionnez le nombre de chaque infoType

Console Google Cloud

SELECT info_type.name,
COUNT(info_type.name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`
GROUP BY info_type.name
ORDER BY count DESC;

Ligne de commande

bq query --use_legacy_sql=false ' SELECT info_type.name,
COUNT(info_type.name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`
GROUP BY info_type.name ORDER BY count DESC;'

Sélectionnez le nombre de chaque infoType par jour

Console Google Cloud

SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day,
COUNT(locations.container_name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY info_type.name, day
ORDER BY count DESC;

Ligne de commande

bq query --use_legacy_sql=false ' SELECT info_type.name,
cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day,
COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY info_type.name, day ORDER BY count DESC;'

Sélectionne le nombre de chaque infoType dans chaque conteneur

Console Google Cloud

SELECT info_type.name, locations.container_name,
COUNT(locations.container_name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY locations.container_name, info_type.name
ORDER BY count DESC;

Ligne de commande

bq query --use_legacy_sql=false ' SELECT info_type.name, locations.container_name,
COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY locations.container_name,info_type.name ORDER BY count DESC;'

Sélectionne les types de résultats trouvés pour chaque colonne d'une table

Cette requête regroupera tous les résultats par nom de colonne et est destinée à travailler sur les résultats d'une tâche d'inspection BigQuery. Cette requête est utile si vous essayez d'identifier les types probables pour une colonne donnée. Vous pouvez ajuster les paramètres en modifiant les clauses WHERE et HAVING. Par exemple, si plusieurs résultats de table sont inclus dans votre table de résultats, vous pouvez les limiter à une seule exécution de tâche ou à un seul nom de table.

Console Google Cloud

SELECT
  table_counts.field_name,
  STRING_AGG( CONCAT(" ",table_counts.name," [count: ",CAST(table_counts.count_total AS String),"]")
  ORDER BY
    table_counts.count_total DESC) AS infoTypes
FROM (
  SELECT
    locations.record_location.field_id.name AS field_name,
    info_type.name,
    COUNT(*) AS count_total
  FROM
    `PROJECT_ID.DATASET.TABLE_ID`,
    UNNEST(location.content_locations) AS locations
  WHERE
    (likelihood = 'LIKELY'
      OR likelihood = 'VERY_LIKELY'
      OR likelihood = 'POSSIBLE')
  GROUP BY
    locations.record_location.field_id.name,
    info_type.name
  HAVING
    count_total>200 ) AS table_counts
GROUP BY
  table_counts.field_name
ORDER BY
  table_counts.field_name

La requête ci-dessus peut générer un résultat de ce type pour un exemple de table, où la colonne infoTypes indique le nombre d'instances de chaque infoType trouvé pour cette colonne donnée.

field_name infoTypes
field1 CUSTOM_USER_US [count: 7004], CUSTOM_USER_EU [count: 2996]
field2 US_VEHICLE_IDENTIFICATION_NUMBER [count: 9597]
field3 EMAIL_ADDRESS [count: 10000]
field4 IP_ADDRESS [count: 10000]
field5 PHONE_NUMBER [count: 7815]
field6 US_SOCIAL_SECURITY_NUMBER [count: 10000]
field7 CREDIT_CARD_NUMBER [count: 10000]