Anonymiser et réidentifier les données sensibles

Ce document vous explique comment utiliser la protection des données sensibles pour anonymiser et réidentifier les données sensibles dans du contenu textuel. Il vous guide dans la création d'une clé encapsulée à l'aide de Cloud Key Management Service. Vous aurez besoin de cette clé dans vos demandes d'anonymisation et de réidentification.

Le processus décrit dans ce document est appelé pseudonymisation (ou tokenisation). Dans ce processus, Sensitive Data Protection utilise une clé cryptographique pour convertir (anonymiser) le texte sensible en jeton. Pour restaurer (désanonymiser) ce texte, vous avez besoin de la clé cryptographique utilisée lors de l'anonymisation et du jeton.

Sensitive Data Protection est compatible avec les méthodes cryptographiques réversibles et non réversibles. Pour désanonymiser du contenu, vous devez choisir une méthode réversible.

La méthode cryptographique décrite ici est appelée chiffrement déterministe à l'aide d'AES-SIV (Advanced Encryption Standard en mode Synthetic Initialization Vector). Nous vous recommandons cette méthode, car elle offre le plus haut niveau de sécurité parmi toutes les méthodes cryptographiques réversibles prises en charge par la protection des données sensibles.

Vous pouvez effectuer les étapes de ce document en 10 à 20 minutes, à l'exclusion des étapes de la section Avant de commencer.

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 sans frais pour exécuter, tester et déployer des charges de travail.
  2. Installez la Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  5. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  6. Si vous utilisez un projet existant pour ce guide, vérifiez que vous disposez des autorisations nécessaires pour suivre les instructions. Si vous avez créé un projet, vous disposez déjà des autorisations requises.

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

  8. Activez les API Sensitive Data Protection et Cloud KMS, si ce n'est pas déjà fait :

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  9. Installez la Google Cloud CLI.

  10. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  11. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  12. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  13. Si vous utilisez un projet existant pour ce guide, vérifiez que vous disposez des autorisations nécessaires pour suivre les instructions. Si vous avez créé un projet, vous disposez déjà des autorisations requises.

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

  15. Activez les API Sensitive Data Protection et Cloud KMS, si ce n'est pas déjà fait :

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com

Rôles requis

Pour obtenir les autorisations nécessaires pour créer une clé AES encapsulée, anonymiser des données sensibles et les désanonymiser, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Créer un trousseau de clés et une clé

Avant de commencer cette procédure, choisissez l'emplacement où vous souhaitez que Sensitive Data Protection traite vos demandes d'anonymisation et de réidentification. Lorsque vous créez une clé Cloud KMS, vous devez la stocker dans global ou dans la même région que celle que vous utiliserez pour vos requêtes Sensitive Data Protection. Sinon, les demandes de protection des données sensibles échoueront.

Pour obtenir la liste des emplacements acceptés, consultez la page Emplacements de Sensitive Data Protection. Notez le nom de la région choisie (par exemple, us-west1).

Cette procédure utilise global comme emplacement pour toutes les requêtes API. Si vous souhaitez utiliser une autre région, remplacez global par le nom de la région.

  1. Créez un trousseau de clés comme suit :

    gcloud kms keyrings create "dlp-keyring" \
        --location "global"
    
  2. Créez une clé :

    gcloud kms keys create "dlp-key" \
        --location "global" \
        --keyring "dlp-keyring" \
        --purpose "encryption"
    
  3. Répertoriez votre trousseau de clés et votre clé :

    gcloud kms keys list \
        --location "global" \
        --keyring "dlp-keyring"
    

    Vous obtenez le résultat suivant :

    NAME: projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key
    PURPOSE: ENCRYPT_DECRYPT
    ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
    PROTECTION_LEVEL: SOFTWARE
    LABELS:
    PRIMARY_ID: 1
    PRIMARY_STATE: ENABLED
    

    Dans ce résultat, PROJECT_ID correspond à l'ID de votre projet.

    La valeur de NAME correspond au nom complet de la ressource de votre clé Cloud KMS. Notez cette valeur, car elle est requise pour les demandes d'anonymisation et de réidentification.

Créer une clé AES encodée en base64

Cette section explique comment créer une clé AES (Advanced Encryption Standard) et l'encoder en base64.

  1. Créez une clé AES 128, 192 ou 256 bits. La commande suivante utilise openssl pour créer une clé 256 bits dans le répertoire actuel :

    openssl rand -out "./aes_key.bin" 32
    

    Le fichier aes_key.bin est ajouté à votre répertoire actuel.

  2. Encodez la clé AES en tant que chaîne base64 :

    base64 -i ./aes_key.bin
    

    Un résultat semblable aux lignes suivantes doit s'afficher :

    uEDo6/yKx+zCg2cZ1DBwpwvzMVNk/c+jWs7OwpkMc/s=
    

Encapsuler la clé AES à l'aide de la clé Cloud KMS

Cette section explique comment utiliser la clé Cloud KMS que vous avez créée dans Créer un trousseau de clés et une clé pour encapsuler la clé AES encodée en base64 que vous avez créée dans Créer une clé AES encodée en base64.

Pour encapsuler la clé AES, utilisez curl pour envoyer la requête suivante à la méthode projects.locations.keyRings.cryptoKeys.encrypt de l'API Cloud KMS :

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key:encrypt" \
    --request "POST" \
    --header "Authorization:Bearer $(gcloud auth application-default print-access-token)" \
    --header "content-type: application/json" \
    --data "{\"plaintext\": \"BASE64_ENCODED_AES_KEY\"}"

Remplacez les éléments suivants :

La réponse que vous obtenez de Cloud KMS est semblable à la réponse JSON suivante :

{
  "name": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key/cryptoKeyVersions/1",
  "ciphertext": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
  "ciphertextCrc32c": "901327763",
  "protectionLevel": "SOFTWARE"
}

Dans ce résultat, PROJECT_ID correspond à l'ID de votre projet.

Notez la valeur de ciphertext dans la réponse. Il s'agit de votre clé encapsulée.

Envoyer une requête d'anonymisation à l'API DLP

Cette section explique comment anonymiser des données sensibles dans du contenu textuel.

Pour terminer cette tâche, vous aurez besoin des éléments suivants :

Vous devez enregistrer l'exemple de requête dans un fichier JSON. Si vous utilisez Cloud Shell, créez le fichier à l'aide de l'éditeur Cloud Shell. Pour lancer l'éditeur, cliquez sur Ouvrir l'éditeur dans la barre d'outils Cloud Shell.

Pour supprimer l'identification des données sensibles dans du contenu textuel, procédez comme suit :

  1. Créez un fichier de requête JSON nommé deidentify-request.json avec le texte suivant.

    {
      "item": {
        "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com."
      },
      "deidentifyConfig": {
        "infoTypeTransformations": {
          "transformations": [
            {
              "infoTypes": [
                {
                  "name": "EMAIL_ADDRESS"
                }
              ],
              "primitiveTransformation": {
                "cryptoDeterministicConfig": {
                  "cryptoKey": {
                    "kmsWrapped": {
                      "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key",
                      "wrappedKey": "WRAPPED_KEY"
                    }
                  },
                  "surrogateInfoType": {
                    "name": "EMAIL_ADDRESS_TOKEN"
                  }
                }
              }
            }
          ]
        }
      },
      "inspectConfig": {
        "infoTypes": [
          {
            "name": "EMAIL_ADDRESS"
          }
        ]
      }
    }
    

    Remplacez les éléments suivants :

    Assurez-vous que la valeur obtenue pour cryptoKeyName constitue le nom complet de la ressource Cloud KMS.

    Pour en savoir plus sur les composants de cette requête JSON, consultez projects.locations.content.deidentify. Une fois cette tâche terminée, testez différentes entrées pour cette demande. Vous pouvez utiliser curl comme décrit ici. Vous pouvez également utiliser APIs Explorer sur cette page de documentation de référence de l'API sous Essayer cette méthode.

  2. Utilisez curl pour effectuer une requête projects.locations.content.deidentify :

    curl -s \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:deidentify \
        -d @deidentify-request.json
    

    Remplacez PROJECT_ID par l'ID de votre projet.

    Pour indiquer un nom de fichier dans la commande curl, utilisez l'option -d (pour "data") et faites précéder le nom de fichier du symbole @. Ce fichier doit se trouver dans le même répertoire que celui dans lequel vous exécutez la commande curl.

    La réponse que vous recevez de Sensitive Data Protection est semblable au JSON suivant :

    {
      "item": {
        "value": "My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q."
      },
      "overview": {
        "transformedBytes": "22",
        "transformationSummaries": [
          {
            "infoType": {
              "name": "EMAIL_ADDRESS"
            },
            "transformation": {
              "cryptoDeterministicConfig": {
                "cryptoKey": {
                  "kmsWrapped": {
                    "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
                    "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key"
                  }
                },
                "surrogateInfoType": {
                  "name": "EMAIL_ADDRESS_TOKEN"
                }
              }
            },
            "results": [
              {
                "count": "1",
                "code": "SUCCESS"
              }
            ],
            "transformedBytes": "22"
          }
        ]
      }
    }
    

    Dans le champ item, l'adresse e-mail est remplacée par un jeton tel que EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q. Notez la valeur du jeton dans la réponse. Pour réidentifier le contenu anonymisé, vous transmettez l'intégralité du jeton dans la demande de réidentification.

Envoyer une demande de désanonymisation à l'API DLP

Cette section explique comment désanonymiser les données tokenisées dans le contenu textuel.

Pour terminer cette tâche, vous aurez besoin des éléments suivants :

Pour restaurer l'identification du contenu tokenisé, procédez comme suit :

  1. Créez un fichier de requête JSON nommé reidentify-request.json avec le texte suivant.

    {
      "reidentifyConfig":{
        "infoTypeTransformations":{
          "transformations":[
            {
              "infoTypes":[
                {
                  "name":"EMAIL_ADDRESS_TOKEN"
                }
              ],
              "primitiveTransformation":{
                "cryptoDeterministicConfig":{
                  "cryptoKey":{
                  "kmsWrapped": {
                    "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key",
                    "wrappedKey": "WRAPPED_KEY"
                  }
                },
                  "surrogateInfoType":{
                    "name":"EMAIL_ADDRESS_TOKEN"
                  }
                }
              }
            }
          ]
        }
      },
      "inspectConfig":{
        "customInfoTypes":[
          {
            "infoType":{
              "name":"EMAIL_ADDRESS_TOKEN"
            },
            "surrogateType":{
    
            }
          }
        ]
      },
      "item":{
        "value": "My name is Alicia Abernathy, and my email address is TOKEN."
      }
    }
    

    Remplacez les éléments suivants :

    Assurez-vous que la valeur obtenue pour cryptoKeyName constitue le nom complet de la ressource Cloud KMS.

    Pour en savoir plus sur les composants de cette requête JSON, consultez projects.locations.content.reidentify. Une fois cette tâche terminée, testez différentes entrées pour cette demande. Vous pouvez utiliser curl comme décrit ici. Vous pouvez également utiliser l'explorateur d'API sur la documentation de référence de l'API, sous Essayer cette méthode.

  2. Utilisez curl pour effectuer une requête projects.locations.content.reidentify :

    curl -s \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:reidentify \
        -d @reidentify-request.json
    

    Remplacez PROJECT_ID par l'ID de votre projet.

    Pour indiquer un nom de fichier dans la commande curl, utilisez l'option -d (pour "data") et faites précéder le nom de fichier du symbole @. Ce fichier doit se trouver dans le même répertoire que celui dans lequel vous exécutez la commande curl.

    La réponse que vous obtenez de Sensitive Data Protection est semblable au JSON suivant :

    {
      "item": {
        "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com."
      },
      "overview": {
        "transformedBytes": "70",
        "transformationSummaries": [
          {
            "infoType": {
              "name": "EMAIL_ADDRESS"
            },
            "transformation": {
              "cryptoDeterministicConfig": {
                "cryptoKey": {
                  "kmsWrapped": {
                    "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
                    "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key"
                  }
                },
                "surrogateInfoType": {
                  "name": "EMAIL_ADDRESS_TOKEN"
                }
              }
            },
            "results": [
              {
                "count": "1",
                "code": "SUCCESS"
              }
            ],
            "transformedBytes": "70"
          }
        ]
      }
    }
    

    Dans le champ item, le jeton d'adresse e-mail est remplacé par l'adresse e-mail réelle du texte d'origine.

    Vous avez maintenant anonymisé et désanonymisé des données sensibles dans un contenu textuel à l'aide du chiffrement déterministe.

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans cette démonstration soient facturées sur votre compte Google Cloud , supprimez le projet Google Cloud qui les contient.

Détruire la version de clé

Si vous ne souhaitez plus utiliser la clé que vous avez créée dans cette tâche, détruisez sa version.

Dressez une liste des versions disponibles pour votre clé :

gcloud kms keys versions list \
    --location "global" \
    --keyring "dlp-keyring" \
    --key "dlp-key"

Pour détruire une version, exécutez la commande suivante :

gcloud kms keys versions destroy KEY_VERSION \
    --location "global" \
    --keyring "dlp-keyring" \
    --key "dlp-key"

Remplacez KEY_VERSION par le numéro de la version à détruire, par exemple 1.

Supprimer le projet

Si vous avez créé un projet pour cette tâche, le moyen le plus simple d'éviter des frais supplémentaires est de le supprimer.

    Supprimer un projet Google Cloud  :

    gcloud projects delete PROJECT_ID

Révoquer vos identifiants

Facultatif : Révoquez les identifiants de gcloud CLI.

gcloud auth revoke

Étapes suivantes