Automatisation de la classification des données téléchargées sur Cloud Storage


Ce tutoriel explique comment implémenter un système de classification et de mise en quarantaine automatique des données à l'aide de Cloud Storage et d'autres produits Google Cloud. Le tutoriel suppose que vous maîtrisez Google Cloud et la programmation shell de base.

Dans toutes les entreprises, les délégués à la protection des données, comme vous, font face à une quantité de données de plus en plus importante, qui doivent être protégées et traitées correctement. La mise en quarantaine et la classification de ces données peuvent être compliquées et chronophages, en particulier lorsqu'elles portent sur des centaines ou des milliers de fichiers par jour.

Que diriez-vous si vous pouviez prendre chaque fichier, l'importer à un emplacement de la zone de quarantaine, le faire classer automatiquement et le déplacer à l'emplacement approprié en fonction du résultat de la classification ? Ce tutoriel explique comment mettre en œuvre un tel système à l'aide de Cloud Functions, de Cloud Storage et de Cloud Data Loss Prevention.

Objectifs

  • Créer des buckets Cloud Storage dans le pipeline de zone de quarantaine et de classification.
  • Créer un sujet Pub/Sub et un abonnement pour vous avertir lorsque le traitement du fichier est terminé.
  • Créer une fonction Cloud Functions simple qui appelle l'API DLP lors de l'importation de fichiers.
  • Importer des exemples de fichiers dans le bucket de la zone de quarantaine pour appeler la fonction Cloud Functions. La fonction utilise l'API DLP pour inspecter et classifier les fichiers avant de les déplacer dans le bucket approprié.

Coûts

Ce tutoriel utilise des composants Google Cloud facturables, notamment :

  • Cloud Storage
  • Cloud Functions
  • Cloud Data Loss Prevention

Vous pouvez utiliser le Simulateur de coût pour générer une estimation du coût en fonction de votre utilisation prévue.

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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.

    Enable the APIs

Accorder des autorisations aux comptes de service

Votre première étape consiste à accorder des autorisations à deux comptes de service : le compte de service Cloud Functions et le compte de service Cloud DLP.

Accorder des autorisations au compte de service par défaut App Engine

  1. Dans la console Google Cloud, ouvrez la page "IAM et administration" et sélectionnez le projet que vous avez créé :

    Accéder à IAM

  2. Recherchez le compte de service App Engine. Ce compte est au format [PROJECT_ID]@appspot.gserviceaccount.com. Remplacez [PROJECT_ID] par votre ID de projet :

  3. Sélectionnez l'icône de modification à côté du compte de service.

  4. Ajoutez les rôles suivants :

    • Cloud DLP > Administrateur DLP
    • Agent de service de l'API DLP (vous devez filtrer ce rôle pour le localiser)
  5. Cliquez sur Enregistrer.

Accorder des autorisations au compte de service de protection des données sensibles

L'agent de service Cloud DLP est créé la première fois qu'il est nécessaire.

  1. Dans Cloud Shell, créez l'agent de service Cloud DLP en appelant InspectContent :

    curl --request POST 
    "https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/us-central1/content:inspect"
    --header "X-Goog-User-Project: PROJECT_ID"
    --header "Authorization: Bearer $(gcloud auth print-access-token)"
    --header 'Accept: application/json'
    --header 'Content-Type: application/json'
    --data '{"item":{"value":"google@google.com"}}'
    --compressed

    Remplacez PROJECT_ID par votre ID du projet

  2. Dans la console Google Cloud, ouvrez la page IAM et administration et sélectionnez le projet que vous avez créé :

    Accéder à IAM

  3. Cochez la case Inclure les attributions de rôles fournies par Google.

  4. Recherchez le compte de service Agent de service Cloud DLP. Ce compte est au format service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com. Remplacez [PROJECT_NUMBER] par votre numéro de projet.

  5. Sélectionnez l'icône de modification à côté du compte de service.

  6. Ajoutez le rôle Projet > Lecteur, puis cliquez sur Enregistrer.

Créer le pipeline de zone de quarantaine et de classification

Cette section décrit comment créer le pipeline de zone de quarantaine et de classification présenté dans le diagramme suivant.

Workflow de zone de quarantaine et de classification

Les chiffres dans ce pipeline correspondent aux étapes suivantes :

  1. Vous importez des fichiers dans Cloud Storage.
  2. Vous appelez une fonction Cloud Functions.
  3. Cloud DLP inspecte et classifie les données.
  4. Le fichier est déplacé vers le bucket approprié.

Créer des buckets Cloud Storage

En suivant les instructions décrites dans les Consignes relatives aux noms des buckets, créez trois buckets nommés de manière unique que vous utiliserez tout au long de ce tutoriel :

  • Bucket 1 : remplacez [YOUR_QUARANTINE_BUCKET] par un nom unique.
  • Bucket 2 : remplacez [YOUR_SENSITIVE_DATA_BUCKET] par un nom unique.
  • Bucket 3 : remplacez [YOUR_NON_SENSITIVE_DATA_BUCKET] par un nom unique.

Console

  1. Dans la console Google Cloud, ouvrez le navigateur Cloud Storage :

    Accéder à Cloud Storage

  2. Cliquez sur Créer un bucket.

  3. Dans la zone de texte Nom du Bucket, entrez le nom que vous avez sélectionné pour [YOUR_QUARANTINE_BUCKET], puis cliquez sur Créer.

  4. Répétez cette procédure pour les buckets [YOUR_SENSITIVE_DATA_BUCKET] et [YOUR_NON_SENSITIVE_DATA_BUCKET].

gcloud

  1. Ouvrez Cloud Shell.

    Accéder à Cloud Shell

  2. Créez trois compartiments à l'aide des commandes suivantes :

    gsutil mb gs://[YOUR_QUARANTINE_BUCKET]
    gsutil mb gs://[YOUR_SENSITIVE_DATA_BUCKET]
    gsutil mb gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
    

Créer un sujet et un abonnement Pub/Sub

console

  1. Ouvrez la page Sujets Pub/Sub :

    Accéder aux sujets Pub/Sub

  2. Cliquez sur Create topic (Créer un sujet).

  3. Dans la zone de texte, saisissez un nom de sujet.

  4. Cochez la case Ajouter un abonnement par défaut.

  5. Cliquez sur Créer un sujet.

gcloud

  1. Ouvrez Cloud Shell.

    Accéder à Cloud Shell

  2. Créez un sujet en remplaçant [PUB/SUB_TOPIC] par le nom de votre choix :

    gcloud pubsub topics create [PUB/SUB_TOPIC]
  3. Créez un abonnement en remplaçant [PUB/SUB_SUBSCRIPTION] par le nom de votre choix :

    gcloud pubsub subscriptions create [PUB/SUB_SUBSCRIPTION] --topic [PUB/SUB_TOPIC]

Créer les fonctions Cloud Functions

Cette section explique le déploiement du script Python contenant les deux fonctions Cloud Functions suivantes :

  • Une fonction appelée lorsqu'un objet est importé sur Cloud Storage.
  • Une fonction appelée lorsqu'un message est reçu dans la file d'attente Pub/Sub.

Le script Python que vous utilisez pour suivre ce tutoriel est contenu dans un dépôt GitHub. Pour créer la première fonction Cloud, vous devez activer les API appropriées.

Pour activer les API, procédez comme suit :

  • Si vous travaillez dans la console, un guide sur l'activation des API nécessaires à l'utilisation de Cloud Functions s'affiche lorsque vous cliquez sur Créer une fonction.
  • Si vous travaillez dans gcloud CLI, vous devez activer manuellement les API suivantes :
    • API Artifact Registry
    • API Eventarc
    • API Cloud Run Admin

Créer la première fonction

Console

  1. Ouvrez la page Présentation de Cloud Functions :

    Accéder à Cloud Functions

  2. Sélectionnez le projet pour lequel vous avez activé Cloud Functions.

  3. Cliquez sur Create function.

  4. Dans la zone Function name (Nom de la fonction), remplacez le nom par défaut par create_DLP_job.

  5. Dans le champ Déclencheur, sélectionnez Cloud Storage.

  6. Dans le champ Event type (Type d'événement), sélectionnez Finalize/Create (Finaliser/Créer).

  7. Dans le champ Bucket, cliquez sur Parcourir, sélectionnez le bucket de votre zone de quarantaine en le sélectionnant dans la liste déroulante, puis cliquez sur Sélectionner.

  8. Cliquez sur Enregistrer.

  9. Cliquez sur Suivant.

  10. Sous Environnement d'exécution, sélectionnez Python 3.7.

  11. Sous Code source, sélectionnez Éditeur intégré.

  12. Remplacez le texte de la zone main.py par le contenu du fichier https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py suivant.

    Remplacez les éléments suivants :

    • [PROJECT_ID_DLP_JOB & TOPIC] : ID du projet qui héberge votre fonction Cloud et votre sujet Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET] est le nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [YOUR_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez déplacer les fichiers sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [PUB/SUB_TOPIC] : nom du sujet Pub/Sub que vous avez créé précédemment.
  13. Dans la zone de texte Point d'entrée, remplacez le texte par défaut par ce qui suit : create_DLP_job.

  14. Remplacez le texte de la zone de texte requirements.txt par le contenu du fichier suivant : https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt.

  15. Cliquez sur Déployer.

    Une coche verte à côté de la fonction indique un déploiement réussi.

    déploiement réussi

gcloud

  1. Ouvrez une session Cloud Shell et clonez le dépôt GitHub contenant le code et les exemples de fichiers de données :

    OUVRIR DANS Cloud Shell

  2. Remplacez les répertoires par le dossier dans lequel le dépôt a été cloné :

    cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
  3. Effectuez les remplacements suivants dans le fichier main.py.

    • [PROJECT_ID_DLP_JOB & TOPIC] : ID du projet qui héberge votre fonction Cloud et votre sujet Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [YOUR_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez déplacer les fichiers sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [PUB/SUB_TOPIC : nom du sujet Pub/Sub que vous avez créé précédemment.
  4. Déployez la fonction en remplaçant [YOUR_QUARANTINE_BUCKET] par votre nom de bucket :

    gcloud functions deploy create_DLP_job --runtime python37 \
        --trigger-resource [YOUR_QUARANTINE_BUCKET] \
        --trigger-event google.storage.object.finalize
    
  5. Confirmez que la fonction a bien été déployée :

    gcloud functions describe create_DLP_job

    Un déploiement réussi est indiqué par un état "ready" présenté comme ci-dessous :

    status:  READY
    timeout:  60s
    

Une fois la fonction Cloud Functions déployée, passez à la section suivante pour créer la deuxième fonction Cloud Functions.

Créer la deuxième fonction

Console

  1. Ouvrez la page Présentation de Cloud Functions :

    Accéder à la page "Présentation" de Cloud Functions

  2. Sélectionnez le projet pour lequel vous avez activé Cloud Functions.

  3. Cliquez sur Create function.

  4. Dans la zone Function Name (Nom de la fonction), remplacez le nom par défaut par resolve_DLP.

  5. Dans le champ Déclencheur, sélectionnez Pub/Sub.

  6. Dans le champ Sélectionner un sujet Cloud Pub/Sub, recherchez le sujet Pub/Sub que vous avez créé précédemment.

  7. Cliquez sur Enregistrer.

  8. Cliquez sur Next (Suivant).

  9. Sous Environnement d'exécution, sélectionnez Python 3.7.

  10. Sous Code source, sélectionnez Éditeur intégré.

  11. Dans la zone de texte Point d'entrée, remplacez le texte par défaut par resolve_DLP.

  12. Remplacez le texte dans la zone main.py par le contenu du fichier suivant: https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py. Effectuez les remplacements suivants :

    • [PROJECT_ID_DLP_JOB & TOPIC] : ID du projet qui héberge votre fonction Cloud et votre sujet Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [YOUR_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez déplacer les fichiers sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [PUB/SUB_TOPIC : nom du sujet Pub/Sub que vous avez créé précédemment.
  13. Cliquez sur Déployer.

    Une coche verte à côté de la fonction indique un déploiement réussi.

    déploiement réussi

gcloud

  1. Ouvrez (ou rouvrez) une session Cloud Shell et clonez le dépôt GitHub contenant le code et les exemples de fichiers de données :

    OUVRIR DANS Cloud Shell

  2. Remplacez les répertoires par le dossier contenant le code Python :

    cd gcs-dlp-classification-python/

  3. Effectuez les remplacements suivants dans le fichier main.py :

    • [PROJECT_ID_DLP_JOB & TOPIC] : ID du projet qui héberge votre fonction Cloud et votre sujet Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [YOUR_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez déplacer les fichiers sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: nom du bucket dans lequel vous allez importer les fichiers à traiter.
    • [PUB/SUB_TOPIC : nom du sujet Pub/Sub que vous avez créé précédemment.
  4. Déployez la fonction en remplaçant [PUB/SUB_TOPIC] par votre thème Pub/Sub :

    gcloud functions deploy resolve_DLP --runtime python37 --trigger-topic [PUB/SUB_TOPIC]
  5. Confirmez que la fonction a bien été déployée :

    gcloud functions describe resolve_DLP

    Un déploiement réussi est indiqué par un état "ready" présenté comme ci-dessous :

    status:  READY
    timeout:  60s
    

Une fois la fonction Cloud Functions déployée, passez à la section suivante.

Importer des exemples de fichiers dans le bucket de zone de quarantaine

Le dépôt GitHub associé à cet article inclut des exemples de fichiers de données. Le dossier contient deux types de fichiers : les fichiers contenant des données sensibles et ceux contenant des données non sensibles. Les données sensibles sont classées comme contenant une ou plusieurs des valeurs INFO_TYPES suivantes :

US_SOCIAL_SECURITY_NUMBER
EMAIL_ADDRESS
PERSON_NAME
LOCATION
PHONE_NUMBER

Les types de données qui sont utilisés pour classer les exemples de fichiers sont définis dans les constantes INFO_TYPES du fichier main.py, qui est initialement défini sur 'FIRST_NAME,PHONE_NUMBER,EMAIL_ADDRESS,US_SOCIAL_SECURITY_NUMBER'.

  1. Si vous n'avez pas encore cloné le dépôt, ouvrez Cloud Shell et clonez le dépôt GitHub contenant le code et les exemples de fichiers de données :

    OUVRIR DANS Cloud Shell

  2. Remplacez les dossiers par les exemples de fichiers de données :

    cd ~/dlp-cloud-functions-tutorials/sample_data/
  3. Copiez les exemples de fichiers de données dans le bucket de zone de quarantaine à l'aide de la commande gsutil, en remplaçant [YOUR_QUARANTINE_BUCKET] par le nom de votre bucket de zone de quarantaine :

    gsutil -m  cp * gs://[YOUR_QUARANTINE_BUCKET]/

    Cloud DLP inspecte et classe chaque fichier importé dans le bucket de zone de quarantaine et le déplace dans le bucket cible approprié en fonction de sa classification.

  4. Dans la console Cloud Storage, ouvrez la page du navigateur de Cloud Storage :

    Accéder au navigateur Cloud Storage

  5. Sélectionnez l'un des buckets cibles que vous avez créés précédemment et consultez les fichiers importés. Consultez également les autres buckets que vous avez créés.

Effectuer un nettoyage

Une fois le tutoriel terminé, vous pouvez procéder au nettoyage des ressources que vous avez créées afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.

Supprimer le projet

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Étapes suivantes