Appliquer automatiquement des tags de sensibilité aux fichiers, bases de données et tables BigQuery dans Data Catalog à l'aide de la protection des données sensibles et de Dataflow

Last reviewed 2022-01-11 UTC

Ce document vous explique comment utiliser Data Catalog avec un pipeline Dataflow automatisé pour identifier et appliquer les tags de sensibilité des données à vos données dans des fichiers Cloud Storage, des bases de données relationnelles (telles que MySQL, PostgreSQL, etc.) et BigQuery.

Ce pipeline Dataflow utilise la protection des données sensibles pour détecter les données sensibles, telles que les informations permettant d'identifier personnellement l'utilisateur, puis marque les résultats dans Data Catalog.

La solution décrite dans le présent document s'appuie sur l'architecture de la solution de tokenisation basée sur des fichiers décrite dans le document associé : Tokeniser automatiquement les données sensibles basées sur des fichiers à l'aide de la protection des données sensibles, Cloud Key Management Service et Dataflow. La principale différence entre les deux documents est que le présent document décrit une solution qui crée également une entrée Data Catalog avec un schéma des tags de source et de sensibilité des données pour les résultats de la protection des données sensibles. Il permet également d'inspecter des bases de données relationnelles à l'aide de connexions de JDBC (connectivité de base de données Java).

Ce document est destiné à un public technique dont les responsabilités couvrent la sécurité des données, leur gouvernance, leur traitement et leur analyse. Dans le présent document, nous partons du principe que vous connaissez bien les principes de base du traitement et de la confidentialité des données, sans être un expert. Nous supposons également que vous maîtrisez les scripts de shell et que vous avez une connaissance de base de Google Cloud.

Architecture

Cette architecture définit un pipeline qui effectue les actions suivantes :

  • Extrait les données d'une base de données relationnelle en utilisant JDBC.
  • Échantillonne les enregistrements en utilisant la clause LIMIT de la base de données.
  • Traite les enregistrements via l'API Cloud Data Loss Prevention (partie intégrante de la protection des données sensibles) pour identifier les catégories de sensibilité.
  • Enregistre les résultats dans une table BigQuery et Data Catalog.

Le schéma suivant illustre les actions effectuées par le pipeline :

Les données sont extraites, échantillonnées, traitées et enregistrées.

La solution utilise des connexions JDBC pour accéder aux bases de données relationnelles. Si vous utilisez des tables BigQuery en tant que source de données, la solution utilise l'API BigQuery Storage pour améliorer les temps de chargement.

Le pipeline sample-and-identify génère les fichiers suivants dans Cloud Storage :

  • Schéma Avro (équivalent) du schéma de la source
  • Des données infoTypes détectées pour chacune des colonnes d'entrée (PERSON_NAME, PHONE_NUMBER et STREET_ADDRESS)

Cette solution utilise l'aplatissement d'enregistrements pour gérer les champs imbriqués et répétés dans les enregistrements.

Objectifs

  • Créer des tags et un groupe d'entités Data Catalog
  • Déployer le pipeline d'échantillonnage et d'identification
  • Créer une entité Data Catalog personnalisée
  • Appliquer des tags de sensibilité à une entité Data Catalog personnalisée
  • Vérifier que les données sur les tags de sensibilité se trouvent également dans BigQuery

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API Cloud Build, DLP API, Cloud SQL, Cloud Storage, Compute Engine, Dataflow, Data Catalog, and Secret Manager.

    Activer les API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activer les API Cloud Build, DLP API, Cloud SQL, Cloud Storage, Compute Engine, Dataflow, Data Catalog, and Secret Manager.

    Activer les API

  8. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

Configurer votre environnement

  1. Dans Cloud Shell, clonez le dépôt source et accédez au répertoire des fichiers clonés :

    git clone https://github.com/GoogleCloudPlatform/auto-data-tokenize.git
    
    cd auto-data-tokenize/
    
  2. Utilisez un éditeur de texte pour modifier le script set_variables.sh afin de définir les variables d'environnement requises. Ignorez les autres variables du script. Elles ne sont pas pertinentes dans ce document.

    # The Google Cloud project to use:
    export PROJECT_ID="PROJECT_ID"
    
    # The Compute Engine region to use for running dataflow jobs and create a
    # temporary storage bucket:
    export REGION_ID= "REGION_ID"
    
    # The Cloud Storage bucket to use as a temporary bucket for Dataflow:
    export TEMP_GCS_BUCKET="CLOUD_STORAGE_BUCKET_NAME"
    
    # Name of the service account to use (not the email address)
    # (For example, tokenizing-runner):
    export DLP_RUNNER_SERVICE_ACCOUNT_NAME="DLP_RUNNER_SERVICE_ACCOUNT_NAME"
    
    # Entry Group ID to use for creating/searching for Entries
    # in Data Catalog for non-BigQuery entries.
    # The ID must begin with a letter or underscore, contain only English
    # letters, numbers and underscores, and have 64 characters or fewer.
    export
    DATA_CATALOG_ENTRY_GROUP_ID="DATA_CATALOG_ENTRY_GROUP_ID"
    
    # The Data Catalog Tag Template ID to use
    # for creating sensitivity tags in Data Catalog.
    # The ID must contain only lowercase letters (a-z), numbers (0-9), or
    # underscores (_), and must start with a letter or underscore.
    # The maximum size is 64 bytes when encoded in UTF-8
    export INSPECTION_TAG_TEMPLATE_ID="INSPECTION_TAG_TEMPLATE_ID"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • REGION_ID : région contenant votre ou vos buckets de stockage. Sélectionnez un emplacement situé dans une région Data Catalog.
    • CLOUD_STORAGE_BUCKET_NAME : nom de votre bucket de stockage.
    • DLP_RUNNER_SERVICE_ACCOUNT_NAME : nom de votre compte de service.
    • DATA_CATALOG_ENTRY_GROUP_ID : nom de votre groupe d'entrées du catalogue de données autre que BigQuery.
    • INSPECTION_TAG_TEMPLATE_ID : nom que vous avez donné à votre modèle de tag pour Data Catalog.
  3. Exécutez le script permettant de définir les variables d'environnement :

    source set_variables.sh
    

Créer des ressources

L'architecture décrite dans ce document utilise les ressources suivantes :

  • Un compte de service permettant d'exécuter des pipelines Dataflow, pour bénéficier d'un contrôle d'accès précis
  • Un bucket Cloud Storage pour stocker les données temporaires et tester les données
  • Un modèle de tag Data Catalog pour associer des tags de sensibilité aux entrées
  • Une instance MySQL sur Cloud SQL en tant que source JDBC

Créer des comptes de service

Nous vous recommandons d'exécuter des pipelines avec un contrôle d'accès précis afin d'améliorer le partitionnement des accès. Si votre projet ne possède pas de compte de service créé par l'utilisateur, créez-en un.

  1. Dans Cloud Shell, créez un compte de service à utiliser comme compte de service de contrôleur géré par l'utilisateur pour Dataflow :

      gcloud iam service-accounts create ${DLP_RUNNER_SERVICE_ACCOUNT_NAME} \
      --project="${PROJECT_ID}" \
      --description="Service Account for Sampling and Cataloging pipelines." \
      --display-name="Sampling and Cataloging pipelines"
    
  2. Créez un rôle personnalisé avec les autorisations requises pour accéder à la protection des données sensibles, Dataflow, Cloud SQL et Data Catalog :

      export SAMPLING_CATALOGING_ROLE_NAME="sampling_cataloging_runner"
      gcloud iam roles create ${SAMPLING_CATALOGING_ROLE_NAME} \
      --project="${PROJECT_ID}" \
      --file=tokenizing_runner_permissions.yaml
    
  3. Appliquez le rôle personnalisé et le rôle de nœud de calcul Dataflow au compte de service pour lui permettre de s'exécuter en tant que nœud de calcul Dataflow :

      gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
      --role=projects/${PROJECT_ID}/roles/${SAMPLING_CATALOGING_ROLE_NAME}
    
      gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
      --role=roles/dataflow.worker
    

Créer le bucket Cloud Storage

  • Dans Cloud Shell, créez un bucket Cloud Storage pour stocker les données de test et en tant qu'emplacement de préproduction Dataflow :

    gsutil mb -p ${PROJECT_ID} -l ${REGION_ID} "gs://${TEMP_GCS_BUCKET}"
    

Créer un groupe d'entrées Data Catalog

Data Catalog gère une liste d'entrées qui représentent des ressources Google Cloud ou d'autres ressources. Les entrées sont organisées en groupes d'entrées. Un groupe d'entrées implicite existe pour BigQuery (@bigquery). Vous devez créer des groupes d'entrées pour d'autres types de ressources. Pour en savoir plus sur les entrées de Data Catalog, consultez la section Afficher des fichiers stockés dans Cloud Storage avec des entrées d'ensembles de fichiers.

Dans Data Catalog, un groupe d'entrées ressemble à un dossier contenant des entrées. Une entrée représente un élément de données.

  • Dans Cloud Shell, créez un groupe d'entrées dans lequel le pipeline peut ajouter une entrée pour votre table MySQL :

    gcloud data-catalog entry-groups create \
    "${DATA_CATALOG_ENTRY_GROUP_ID}" \
    --project="${PROJECT_ID}" \
    --location="${REGION_ID}"
    

Créer le modèle de tag d'inspection

  • Dans Cloud Shell, créez un modèle de tag Data Catalog pour activer les entrées de tag avec des informations de sensibilité à l'aide de la protection des données sensibles :

    gcloud data-catalog tag-templates create ${INSPECTION_TAG_TEMPLATE_ID} \
    --project="${PROJECT_ID}"  \
    --location="${REGION_ID}" \
    --display-name="Auto DLP sensitive categories" \
    --field=id=infoTypes,type=string,display-name="DLP infoTypes",required=TRUE \
    --field=id=inspectTimestamp,type=timestamp,display-name="Inspection run timestamp",required=TRUE
    

Créer une table de résultats d'inspection dans BigQuery

  • Dans Cloud Shell, créez une table BigQuery permettant de stocker les résultats agrégés provenant de la protection des données sensibles :

    bq mk --dataset \
    --location="${REGION_ID}" \
    --project_id="${PROJECT_ID}"  \
    inspection_results
    
    bq mk --table \
    --project_id="${PROJECT_ID}"  \
    inspection_results.SensitivityInspectionResults \
    inspection_results_bigquery_schema.json
    

Configurer une instance MySQL sur Cloud SQL

Pour la source de données, vous utilisez une instance Cloud SQL.

  1. Dans Cloud Shell, instanciez une instance MySQL sur Cloud SQL et chargez-la avec des exemples de données :

    export SQL_INSTANCE="mysql-autodlp-instance"
    export SQL_ROOT_PASSWORD="root1234"
    
    gcloud sql instances create "${SQL_INSTANCE}" \
    --project="${PROJECT_ID}"  \
    --region="${REGION_ID}" \
    --database-version=MYSQL_5_7 \
    --root-password="${SQL_ROOT_PASSWORD}"
    
  2. Enregistrez le mot de passe de la base de données dans Secret Manager.

    Le mot de passe de la base de données et les autres informations secrètes ne doivent pas être stockés ni enregistrés. Secret Manager vous permet de stocker et de récupérer ces secrets de manière sécurisée.

    Stockez le mot de passe racine de la base de données MySQL en tant que secret cloud :

    export SQL_PASSWORD_SECRET_NAME="mysql-password"
    
    printf $SQL_ROOT_PASSWORD |
    gcloud secrets create "${SQL_PASSWORD_SECRET_NAME}" \
    --data-file=- \
    --locations="${REGION_ID}" \
    --replication-policy="user-managed" \
    --project="${PROJECT_ID}"
    

Copier les données de test sur l'instance Cloud SQL

Les données de test sont un ensemble de données de démonstration contenant 5 000 prénoms et noms générés de manière aléatoire ainsi que des numéros de téléphone de style américain. La table demonstration-dataset contient quatre colonnes : row_id, person_name, contact_type et contact_number. Vous pouvez également utiliser votre propre ensemble de données. Si vous utilisez votre propre ensemble de données, n'oubliez pas de modifier les valeurs suggérées dans la section Vérifier dans BigQuery de ce document. Pour copier l'ensemble de données de démonstration fourni (contacts5k.sql.gz) dans votre instance Cloud SQL, procédez comme suit :

  1. Dans Cloud Shell, copiez l'exemple d'ensemble de données dans Cloud Storage pour la préproduction dans Cloud SQL :

    gsutil cp contacts5k.sql.gz gs://${TEMP_GCS_BUCKET}
    
  2. Créez une base de données dans l'instance Cloud SQL :

    export DATABASE_ID="auto_dlp_test"
    
    gcloud sql databases create "${DATABASE_ID}" \
    --project="${PROJECT_ID}"  \
    --instance="${SQL_INSTANCE}"
    
  3. Attribuez le rôle "Administrateur des objets de l'espace de stockage" à votre compte de service Cloud SQL afin qu'il puisse accéder à l'espace de stockage :

    export SQL_SERVICE_ACCOUNT=$(gcloud sql instances describe
    "${SQL_INSTANCE}" --project="${PROJECT_ID}" | grep
    serviceAccountEmailAddress: | sed "s/serviceAccountEmailAddress: //g")
    
    gsutil iam ch "serviceAccount:${SQL_SERVICE_ACCOUNT}:objectAdmin" \
    gs://${TEMP_GCS_BUCKET}
    
  4. Charger les données dans une nouvelle table :

    gcloud sql import sql "${SQL_INSTANCE}" \
    "gs://${TEMP_GCS_BUCKET}/contacts5k.sql.gz" \
    --project="${PROJECT_ID}"  \
    --database="${DATABASE_ID}"
    

    Pour en savoir plus sur l'importation de données dans Cloud SQL, consultez la page Bonnes pratiques pour l'importation et l'exportation de données.

Compiler les modules

  • Dans Cloud Shell, compilez les modules pour créer les exécutables permettant de déployer le pipeline d'échantillonnage et d'identification ainsi que le pipeline de tokenisation :

     ./gradlew clean buildNeeded shadowJar -x test
    

    Vous pouvez également supprimer l'option -x test pour exécuter le test unitaire et le test d'intégration. Si libncurses5 n'est pas déjà installé, installez-le dans Cloud Shell avec : sudo apt-get install libncurses5.

Exécuter le pipeline d'échantillonnage et d'identification

Le pipeline d'échantillonnage et d'identification de la protection des données sensibles effectue les tâches ci-dessous dans l'ordre suivant :

  1. Extrait les enregistrements de la source fournie. Par exemple, la méthode d'identification de la protection des données sensibles n'accepte que les tables plates. Le pipeline regroupe donc les enregistrements Avro, Parquet ou BigQuery, car ces enregistrements peuvent contenir des champs imbriqués et répétés.
  2. Échantillonne les colonnes individuelles pour les échantillons requis, à l'exclusion des valeurs null ou vides.
  3. Identifie les données infoTypes sensibles à l'aide de la protection des données sensibles, en regroupant les échantillons dans des tailles de lot acceptables pour la protection des données sensibles (< 500 ko et < 50 000 valeurs).
  4. Écrit des rapports dans Cloud Storage et BigQuery pour référence ultérieure
  5. Crée des entités Data Catalog lorsque vous fournissez des informations sur le modèle de tag et les groupes d'entrées. Lorsque vous fournissez ces informations, le pipeline crée des tags de sensibilité pour les entrées Data Catalog dans les colonnes correspondantes.

Créer un modèle Flex Dataflow

Les modèles Flex Dataflow vous permettent d'utiliser la console Google Cloud, Google Cloud CLI ou les appels d'API REST pour configurer et exécuter vos pipelines sur Google Cloud. Ce document fournit des instructions pour la console Google Cloud. Les modèles classiques sont organisés sous forme de graphiques d'exécution sur Cloud Storage, tandis que les modèles Flex regroupent le pipeline en tant qu'image de conteneur dans le Container Registry de votre projet. Les modèles Flex vous permettent de dissocier les compilations et les pipelines, et de les intégrer à des systèmes d'orchestration pour les exécutions programmées de pipelines. Pour en savoir plus sur les modèles Flex Dataflow, consultez la page Évaluer le type de modèle à utiliser.

Les modèles Flex Dataflow séparent les étapes de compilation et de préproduction des étapes en cours d'exécution. Pour ce faire, ils peuvent lancer un pipeline Dataflow à partir d'un appel d'API et de Cloud Composer à l'aide du module DataflowStartFlexTemplateOperator.

  1. Dans Cloud Shell, définissez le site où stocker le fichier de spécification du modèle contenant les informations nécessaires à l'exécution de la tâche Dataflow :

    export
    FLEX_TEMPLATE_PATH="gs://${TEMP_GCS_BUCKET}/dataflow/templates/sample-inspect-tag-pipeline.json"
    
    export
    FLEX_TEMPLATE_IMAGE="us.gcr.io/${PROJECT_ID}/dataflow/sample-inspect-tag-pipeline:latest"
    
  2. Créez le modèle Flex Dataflow :

    gcloud dataflow flex-template build "${FLEX_TEMPLATE_PATH}" \
    --image-gcr-path="${FLEX_TEMPLATE_IMAGE}" \
    --service-account-email="${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
    --sdk-language="JAVA" \
    --flex-template-base-image=JAVA11 \
    --metadata-file="sample_identify_tag_pipeline_metadata.json" \
    --jar="build/libs/auto-data-tokenize-all.jar" \
    --env="FLEX_TEMPLATE_JAVA_MAIN_CLASS=\"com.google.cloud.solutions.autotokenize.pipeline.DlpInspectionPipeline\""
    

Exécuter le pipeline

Le pipeline d'échantillonnage et d'identification extrait le nombre d'enregistrements spécifié par la valeur sampleSize. Il aplatit ensuite chaque enregistrement et identifie les champs infoTypes en utilisant la protection des données sensibles (pour identifier les types d'informations sensibles). Les valeurs infoTypes sont comptabilisées, puis agrégées par nom de colonne et par champ infoType pour créer un rapport de sensibilité.

  • Dans Cloud Shell, lancez le pipeline d'échantillonnage et d'identification pour identifier les colonnes sensibles dans la source de données :

    export
    CLOUD_SQL_JDBC_CONNECTION_URL="jdbc:mysql:///${DATABASE_ID}?cloudSqlInstance=${PROJECT_ID}%3A${REGION_ID}%3A${SQL_INSTANCE}&socketFactory=com.google.cloud.sql.mysql.SocketFactory"
    
    gcloud dataflow flex-template run "sample-inspect-tag-`date +%Y%m%d-%H%M%S`" \
      --template-file-gcs-location "${FLEX_TEMPLATE_PATH}" \
      --region "${REGION_ID}" \
      --service-account-email "${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
      --staging-location "gs://${TEMP_GCS_BUCKET}/staging" \
      --worker-machine-type "n1-standard-1" \
      --parameters sampleSize=2000 \
      --parameters sourceType="JDBC_TABLE" \
      --parameters inputPattern="Contacts" \
      --parameters reportLocation="gs://${TEMP_GCS_BUCKET}/auto_dlp_report/" \
      --parameters reportBigQueryTable="${PROJECT_ID}:inspection_results.SensitivityInspectionResults" \
      --parameters jdbcConnectionUrl="${CLOUD_SQL_JDBC_CONNECTION_URL}" \
      --parameters jdbcDriverClass="com.mysql.cj.jdbc.Driver" \
      --parameters jdbcUserName="root" \
      --parameters jdbcPasswordSecretsKey="projects/${PROJECT_ID}/secrets/${SQL_PASSWORD_SECRET_NAME}/versions/1" \
      --parameters ^:^jdbcFilterClause="ROUND(RAND() * 10) IN (1,3)" \
      --parameters dataCatalogEntryGroupId="projects/${PROJECT_ID}/locations/${REGION_ID}/entryGroups/${DATA_CATALOG_ENTRY_GROUP_ID}" \
      --parameters dataCatalogInspectionTagTemplateId="projects/${PROJECT_ID}/locations/${REGION_ID}/tagTemplates/${INSPECTION_TAG_TEMPLATE_ID}"
    

Le paramètre jdbcConnectionUrl spécifie une URL de connexion à la base de données JDBC avec les détails de nom d'utilisateur et de mot de passe. Les détails de création de l'URL de connexion exacte dépendent de votre fournisseur de base de données et de votre partenaire d'hébergement. Pour comprendre comment vous connecter aux bases de données relationnelles Cloud SQL, consultez la page Se connecter à l'aide de connecteurs Cloud SQL.

Le pipeline crée une requête telle que SELECT * FROM [TableName] pour lire les enregistrements de table à des fins d'inspection.

Cette requête peut entraîner un chargement sur la base de données et sur le pipeline, en particulier pour une table volumineuse. Si vous le souhaitez, vous pouvez optimiser votre échantillon d'enregistrements du côté de la base de données. Pour ce faire, insérez jdbcFilterClause en tant que clause WHERE de la requête qui apparaît dans l'exemple de code proposé dans la section Vérifier dans BigQuery plus loin dans ce document.

Pour générer un rapport, vous pouvez choisir un ou plusieurs des récepteurs de rapport suivants :

  • reportLocation pour stocker le rapport dans un bucket Cloud Storage
  • report BIGQUERY_TABLE pour stocker le rapport dans un objet BigQueryTable
  • dataCatalogEntryGroupId pour créer l'entrée et y ajouter un tag dans Data Catalog (omettez ce paramètre si le sourceType est BIGQUERY_TABLE )

Le pipeline est compatible avec les types de sources suivants. Pour déterminer la bonne combinaison d'arguments sourceType et inputPattern, utilisez les options répertoriées dans le tableau suivant.

Dans ce cas, vous n'utilisez que la table JDBC_TABLE.

sourceType Source de données inputPattern

JDBC_TABLE

Bases de données relationnelles (utilisant JDBC)

TABLE_NAME

AVRO

Fichier Avro dans Cloud Storage.
Pour sélectionner plusieurs fichiers correspondant à un modèle spécifique, vous pouvez utiliser un seul caractère générique. Le modèle suivant sélectionne tous les fichiers commençant par le préfixe (data-) :

gs://my-bucket/path/to/folder/data-*

gs://LOCATION_OF_FILES

PARQUET

Fichier Parquet dans Cloud Storage.
Pour sélectionner plusieurs fichiers correspondant à un modèle spécifique, vous pouvez utiliser un seul caractère générique. Le modèle suivant sélectionne tous les fichiers commençant par le préfixe (data-) :

gs://my-bucket/path/to/folder/data-*

gs://LOCATION_OF_FILES

BIGQUERY_TABLE

Table BigQuery.
Lit toutes les lignes, puis échantillonne aléatoirement à l'aide du pipeline.

PROJECT_ID:=DATASET.=TABLE

Le pipeline détecte toutes les classes infoTypes standards compatibles avec la protection des données sensibles. Vous pouvez fournir un identifiant infoTypes personnalisé supplémentaire en utilisant le paramètre --observableinfoTypes.

Graphe orienté acyclique (DAG) de pipeline d'échantillonnage et d'identification

Le diagramme suivant illustre le DAG d'exécution Dataflow. Ce DAG comporte deux branches. Les deux branches commencent à ReadJdbcTable et se terminent à ExtractReport. Les rapports sont ensuite générés ou stockés.

Flux de données du pipeline d'échantillonnage et d'identification.

Récupérer le rapport

Le pipeline d'échantillonnage et d'identification génère les fichiers suivants :

  • Fichier de schéma Avro (ou un schéma converti au format Avro) de la source
  • Un fichier pour chacune des colonnes sensibles avec des informations infoType et des décomptes

Pour récupérer le rapport, procédez comme suit :

  1. Dans Cloud Shell, récupérez le rapport :

    mkdir -p auto_dlp_report/
    gsutil -m cp
    "gs://${TEMP_GCS_BUCKET}/auto_dlp_report/*.json"
    auto_dlp_report/
    
  2. Répertoriez tous les noms de colonnes identifiés :

    cat auto_dlp_report/col-*.json | jq .columnName
    

    Voici le résultat :

    "$.topLevelRecord.contact_number" "$.topLevelRecord.person_name"

  3. Affichez les détails d'une colonne identifiée avec la commande cat du fichier :

    cat auto_dlp_report/col-topLevelRecord-contact_number-00000-of-00001.json
    

    Voici un extrait de la colonne cc :

    { "columnName": "$.topLevelRecord.contact_number", "infoTypes": [{ "infoType": "PHONE_NUMBER", "count": "990" }] }

    • La valeur columnName est inhabituelle en raison de la conversion implicite d'une ligne de base de données en enregistrement Avro.
    • La valeur count varie en fonction des échantillons sélectionnés de manière aléatoire lors de l'exécution.

Vérifier les tags de sensibilité dans Data Catalog

Le pipeline d'échantillonnage et d'identification crée une entrée et applique les tags de sensibilité aux colonnes pertinentes.

  1. Dans Cloud Shell, récupérez l'entrée créée pour la table Contacts :

    gcloud data-catalog entries describe Contacts \
      --entry-group=${DATA_CATALOG_ENTRY_GROUP_ID} \
      --project="${PROJECT_ID}"  \
      --location="${REGION_ID}"
    

    Cette commande affiche les détails de la table, y compris son schéma.

  2. Affichez tous les tags de sensibilité associés à cette entrée :

    gcloud data-catalog tags list --entry=Contacts
      --entry-group=${DATA_CATALOG_ENTRY_GROUP_ID} \
      --project="${PROJECT_ID}"  \
      --location="${REGION_ID}"
    
  3. Vérifiez que les tags de sensibilité sont présents dans les colonnes suivantes : contact_number, person_name.

    Les données infoTypes identifiées par la protection des données sensibles peuvent contenir de faux types. Par exemple, il peut identifier le type person_name en tant que type DATE, car certaines chaînes person_names aléatoires peuvent être d'Avril, Mai, Juin ou autres.

    Les détails du tag de sensibilité générés sont les suivants :

    column: contact_number
    fields:
      infoTypes:
        displayName: DLP infoTypes
        stringValue: '[PHONE_NUMBER]'
      inspectTimestamp:
        displayName: Inspection run timestamp
        timestampValue: '2021-05-20T16:34:29.596Z'
    name: projects/auto-dlp/locations/asia-southeast1/entryGroups/sql_databases/entries/Contacts/tags/CbS0CtGSpZyJ
    template: projects/auto-dlp/locations/asia-southeast1/tagTemplates/auto_dlp_inspection
    templateDisplayName: Auto DLP sensitive categories
    ---
    column: person_name
    fields:
      infoTypes:
        displayName: DLP infoTypes
        stringValue: '[DATE, PERSON_NAME]'
      inspectTimestamp:
        displayName: Inspection run timestamp
        timestampValue: '2021-05-20T16:34:29.594Z'
    name: projects/auto-dlp/locations/asia-southeast1/entryGroups/sql_databases/entries/Contacts/tags/Cds1aiO8R0pT
    template: projects/auto-dlp/locations/asia-southeast1/tagTemplates/auto_dlp_inspection
    templateDisplayName: Auto DLP sensitive categories
    

Vérifier dans BigQuery

Le pipeline Dataflow ajoute les résultats agrégés à la table BigQuery fournie. La requête imprime les résultats d'inspection récupérés de la table BigQuery.

  • Dans Cloud Shell, vérifiez les résultats :

    bq query \
      --location="${REGION_ID}"  \
      --project="${PROJECT_ID}"  \
      --use_legacy_sql=false \
    'SELECT
       input_pattern AS table_name,
       ColumnReport.column_name AS column_name,
       ColumnReport.info_types AS info_types
     FROM
       `inspection_results.SensitivityInspectionResults`,
       UNNEST(column_report) ColumnReport;
     WHERE column_name="$.topLevelRecord.contact_number"'
    

    Voici le résultat :

    +------------+---------------------------------+----------------------------------------------+
    | table_name |           column_name           |                  info_types                  |
    +------------+---------------------------------+----------------------------------------------+
    | Contacts   | $.topLevelRecord.contact_number | [{"info_type":"PHONE_NUMBER","count":"990"}] |
    +------------+---------------------------------+----------------------------------------------+
    

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes