Chiffrer des données à l'aide de clés de chiffrement gérées par le client (CMEK)

Cette page explique comment chiffrer les données stockées dans des instances d'IA AML à l'aide de clés de chiffrement gérées par le client (CMEK).

Présentation

Toutes les données client d'une instance d'IA AML sont chiffrées au repos à l'aide d'une clé CMEK. Vous gérez la clé dans Cloud Key Management Service (Cloud KMS) et vous contrôlez l'accès à la clé à l'aide d'Identity and Access Management. Si vous désactivez ou détruisez temporairement la clé CMEK, les données chiffrées avec cette clé ne sont plus accessibles.

L'IA AML n'est compatible avec CMEK que via Cloud KMS. Il n'est pas compatible avec le chiffrement par défaut de Google.

CMEK vous permet de contrôler davantage les aspects du cycle de vie et de la gestion de vos clés, mais entraîne également des coûts supplémentaires pour le service Cloud KMS.

Cloud KMS peut s'exécuter dans le même projet Google Cloud que l'IA AML ou dans un projet distinct dans lequel vous gérez de manière centralisée les clés de plusieurs projets.

La configuration du chiffrement est effectuée lorsque vous créez une instance. Une fois une instance créée, vous ne pouvez pas lui attribuer une autre clé Cloud KMS. Vous pouvez toujours faire pivoter la clé.

Pour en savoir plus sur CMEK en général, consultez la documentation Cloud KMS.

Niveaux de protection

Cloud KMS vous permet de choisir parmi différents niveaux de protection, y compris les suivants:

  • Clés logicielles
  • Modules de sécurité matériels (HSM) utilisant Cloud HSM

Découvrez comment configurer CMEK dans l'IA AML. Tous les niveaux de protection ne sont pas disponibles dans toutes les régions. Notez que l'IA AML n'est pas compatible avec les clés de chiffrement fournies par le client (CSEK) ni avec Cloud External Key Manager.

Données client

Toutes les données client gérées par l'IA AML sont chiffrées au repos à l'aide de la clé CMEK spécifiée dans la ressource Instance parente correspondante. Cela inclut toutes les données client associées aux ressources d'IA de lutte contre le blanchiment d'argent, telles que les ensembles de données, les configurations de moteur, les modèles, etc. Tout stockage temporaire et persistant des données client, y compris les copies des entrées et des sorties, les fonctionnalités de ML générées, les hyperparamètres du modèle, les poids du modèle et les résultats de prédiction, est chiffré à l'aide de la clé CMEK de l'instance correspondante.

Pour connaître la définition des données client, qui ne doivent pas inclure d'identifiants de ressources, d'attributs ni d'autres libellés de données, consultez les Conditions d'utilisation spécifiques au service.

Chiffrer les données d'entrée et de sortie

La configuration du chiffrement de l'IA AML dans une instance n'est utilisée que pour les ressources d'IA AML et leurs données. L'IA AML ne gère pas le chiffrement des données d'entrée ou de sortie de votre projet Google Cloud. Si vous souhaitez que ces données soient chiffrées à l'aide de CMEK, vous devez configurer une clé Cloud KMS correspondant au niveau de protection de clé que vous avez choisi et configuré sur l'ensemble de données BigQuery. Vous pouvez également réutiliser la même clé que celle utilisée par l'IA de lutte contre le blanchiment d'argent.

En savoir plus sur le chiffrement dans BigQuery

Rotation des clés

La rotation périodique et automatique des clés est recommandée en termes de sécurité. Avec CMEK, vous contrôlez la rotation des clés. Lorsque vous effectuez la rotation d'une clé, les données chiffrées avec des versions de clé précédentes ne sont pas automatiquement rechiffrées avec la nouvelle version de clé.

Une seule ressource d'IA AML peut être stockée en interne sous la forme de plusieurs unités. Si, au cours de la durée de vie d'une ressource d'IA AML, la version de clé est remplacée, il est possible que toutes les unités ne soient pas chiffrées avec la même version de clé.

Si vous effectuez une rotation de clé, il n'existe aucun moyen dans l'IA AML de forcer un nouveau chiffrement ni de déterminer si les anciennes versions de clé peuvent être supprimées en toute sécurité.

En savoir plus sur la rotation des clés avec Cloud KMS

Créer une clé et accorder des autorisations

Les instructions suivantes expliquent comment créer une clé pour une instance et accorder des autorisations de chiffrement et de déchiffrement des données de l'instance avec la clé. Vous pouvez utiliser une clé créée directement dans Cloud KMS ou une clé gérée en externe que vous rendez disponible avec Cloud External Key Manager.

  1. Dans le projet Google Cloud dans lequel vous souhaitez gérer vos clés, procédez comme suit :

    1. Activez l'API Cloud KMS.

    2. Créez un trousseau à l'aide de la méthode projects.locations.keyRings.create. L'emplacement du trousseau de clés Cloud KMS doit correspondre à l'emplacement de l'instance que vous chiffrez.

      REST

      Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

      • KMS_PROJECT_ID: ID du projet Google Cloud contenant le trousseau de clés
      • LOCATION: emplacement du trousseau de clés. Utilisez l'une des régions disponibles.
        Afficher les emplacements
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identifiant défini par l'utilisateur pour le trousseau de clés

      Pour envoyer votre requête, choisissez l'une des options suivantes :

      curl

      Exécutez la commande suivante :

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d "" \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID"

      PowerShell

      Exécutez la commande suivante :

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID" | Select-Object -Expand Content

      Vous devriez recevoir une réponse JSON de ce type :

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID",
        "createTime": "2023-03-14T15:52:55.358979323Z"
      }
      

      gcloud

      Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

      • KMS_PROJECT_ID: ID de projet Google Cloud du projet contenant le trousseau de clés
      • LOCATION: emplacement du trousseau de clés. Utilisez l'une des régions disponibles.
        Afficher les emplacements
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identifiant défini par l'utilisateur pour le trousseau de clés

      Exécutez la commande suivante :

      Linux, macOS ou Cloud Shell

      gcloud kms keyrings create KEY_RING_ID \
        --project KMS_PROJECT_ID --location LOCATION

      Windows (PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --project KMS_PROJECT_ID --location LOCATION

      Windows (cmd.exe)

      gcloud kms keyrings create KEY_RING_ID ^
        --project KMS_PROJECT_ID --location LOCATION
      Vous devriez recevoir une réponse vide :
      $

    3. Créez une clé à l'aide de la méthode projects.locations.keyRings.cryptoKeys.

      REST

      Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

      • KMS_PROJECT_ID: ID de projet Google Cloud du projet contenant le trousseau de clés
      • LOCATION: emplacement du trousseau de clés. Utilisez l'une des régions disponibles.
        Afficher les emplacements
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identifiant défini par l'utilisateur pour le trousseau de clés
      • KEY_ID: identifiant défini par l'utilisateur pour la clé

      Corps JSON de la requête :

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      Pour envoyer votre requête, choisissez l'une des options suivantes :

      curl

      Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

      cat > request.json << 'EOF'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      EOF

      Exécutez ensuite la commande suivante pour envoyer votre requête REST :

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID"

      PowerShell

      Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

      @'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8

      Exécutez ensuite la commande suivante pour envoyer votre requête REST :

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID" | Select-Object -Expand Content

      Vous devriez recevoir une réponse JSON de ce type :

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID",
        "primary": {
          "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1",
          "state": "ENABLED",
          "createTime": "2023-03-14T15:52:55.358979323Z",
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": "2023-03-14T15:52:55.358979323Z"
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": "2023-03-14T15:52:55.358979323Z",
        "versionTemplate": {
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
        },
        "destroyScheduledDuration": "86400s"
      }
      

      gcloud

      Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

      • KMS_PROJECT_ID: ID de projet Google Cloud du projet contenant le trousseau de clés
      • LOCATION: emplacement du trousseau de clés. Utilisez l'une des régions disponibles.
        Afficher les emplacements
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identifiant défini par l'utilisateur pour le trousseau de clés
      • KEY_ID: identifiant défini par l'utilisateur pour la clé

      Exécutez la commande suivante :

      Linux, macOS ou Cloud Shell

      gcloud kms keys create KEY_ID \
        --keyring KEY_RING_ID \
        --project KMS_PROJECT_ID \
        --location LOCATION \
        --purpose "encryption"

      Windows (PowerShell)

      gcloud kms keys create KEY_ID `
        --keyring KEY_RING_ID `
        --project KMS_PROJECT_ID `
        --location LOCATION `
        --purpose "encryption"

      Windows (cmd.exe)

      gcloud kms keys create KEY_ID ^
        --keyring KEY_RING_ID ^
        --project KMS_PROJECT_ID ^
        --location LOCATION ^
        --purpose "encryption"
      Vous devriez recevoir une réponse vide :
      $

  2. Si vous n'avez pas créé d'instance d'IA AML dans le projet d'IA AML, le compte de service d'IA AML n'existe pas encore. Créez le compte de service.

    Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID: ID de projet Google Cloud du projet dans lequel l'IA AML s'exécute

    Exécutez la commande suivante :

    Linux, macOS ou Cloud Shell

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Windows (PowerShell)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Windows (cmd.exe)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Vous devriez obtenir un résultat semblable à celui-ci :

    Service identity created: service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com

  3. Accordez le rôle IAM de chiffreur/déchiffreur de clés cryptographiques (roles/cloudkms.cryptoKeyEncrypterDecrypter) au compte de service d'IA AML. Accordez cette autorisation à la clé que vous avez créée.

    Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID: ID de projet Google Cloud du projet dans lequel l'IA AML s'exécute
    • KEY_ID: identifiant défini par l'utilisateur pour la clé
    • LOCATION: emplacement du trousseau de clés. Utilisez l'une des régions disponibles.
      Afficher les emplacements
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
      • australia-southeast1
    • KEY_RING_ID: identifiant défini par l'utilisateur pour le trousseau de clés
    • PROJECT_NUMBER: numéro de projet Google Cloud du projet dans lequel l'IA AML s'exécute.

    Exécutez la commande suivante :

    Linux, macOS ou Cloud Shell

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID \
      --location LOCATION --keyring=KEY_RING_ID \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Windows (PowerShell)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID `
      --location LOCATION --keyring=KEY_RING_ID `
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com `
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Windows (cmd.exe)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID ^
      --location LOCATION --keyring=KEY_RING_ID ^
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com ^
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Vous devriez obtenir un résultat semblable à celui-ci :

    Updated IAM policy for key KEY_ID.
    bindings:
    - members:
      - serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com
      role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwYCq0Sq4Ho=
    version: 1
    

    Pour plus d'informations sur cette commande, consultez la documentation gcloud kms keys add-iam-policy-binding.

Vous pouvez maintenant créer une instance et spécifier la clé à utiliser pour le chiffrement.

Supprimer un accès

Il existe plusieurs façons de supprimer l'accès à la clé de l'instance chiffrée par CMEK:

Nous vous recommandons de révoquer les autorisations du compte de service d'IA AML avant de désactiver ou de détruire une clé. Les modifications apportées aux autorisations sont propagées en quelques secondes. Vous pouvez ainsi observer les conséquences de la désactivation ou de la destruction d'une clé.

Lorsque vous désactivez ou détruisez la clé de chiffrement d'une instance, vous ne pouvez plus utiliser ni récupérer les données client associées à l'instance. Toutes les données client stockées dans l'instance deviennent inaccessibles, y compris les modèles, les configurations du moteur, les résultats du backtest et les résultats de prédiction. Les utilisateurs disposant d'un rôle de lecteur d'IA AML peuvent toujours afficher des champs tels que le nom de l'instance ou les autres champs de ressources renvoyés par la récupération de ressources d'IA AML.

Toutes les opérations qui utilisent ou exportent des données client, par exemple l'exportation de métadonnées backtestResults, échoueront.

Les utilisateurs disposant du rôle Administrateur de l'IA AML ou de Propriétaire peuvent supprimer l'instance.

Règles d'administration CMEK

L'IA AML n'est pas compatible avec les règles d'administration CMEK. Toutefois, l'IA AML nécessite toujours l'utilisation de CMEK, quelle que soit la règle d'administration de l'organisation constraints/gcp.restrictNonCmekServices.

Interaction avec VPC-SC

Si vous avez configuré l'IA AML dans un périmètre VPC-SC, la clé CMEK doit toujours être accessible au compte de service. Si la clé ne se trouve pas dans le même périmètre VPC-SC, plusieurs méthodes sont possibles, par exemple:

  • Utiliser une règle de sortie pour ajouter la ressource à la liste d'autorisation
  • Utiliser l'appairage de périmètre VPC

Étape suivante