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'AML basée sur l'IA à 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'AML basée sur l'IA sont chiffrées à l'aide d'une clé CMEK lorsqu'elles sont stockées au repos. Vous gérez la clé dans Cloud Key Management Service et en contrôlez l'accès à l'aide d'Identity and Access Management. Si vous désactivez temporairement ou détruisez définitivement la clé CMEK, les données chiffrées avec cette clé ne sont pas accessibles.

CMEK vous permet de contrôler davantage d'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'AML basée sur l'IA, ou dans un projet distinct dans lequel vous gérez de manière centralisée les clés de plusieurs projets.

Vous attribuez une clé CMEK lorsque vous créez une instance. Toutes les instances doivent être configurées à l'aide de clés CMEK et ne peuvent pas être modifiées pour utiliser le chiffrement par défaut de Google.

Pour plus d'informations sur CMEK en général, y compris quand et pourquoi l'activer, consultez la documentation Cloud KMS.

Données client

Toutes les données client gérées par l'AML basée sur l'IA 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'AML basées sur l'IA, 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 les sorties, les fonctionnalités ML générées, les journaux, les hyperparamètres du modèle, les pondérations de modèle et les résultats de prédiction, sont chiffrés à l'aide de la clé CMEK de l'instance correspondante.

L'AML basée sur l'IA ne gère pas le chiffrement des données d'entrée ou de sortie dans votre projet Google Cloud. Si vous souhaitez que ces données soient chiffrées, vous devez configurer une clé CMEK distincte dans votre projet Google Cloud. La clé KMS spécifiée dans une instance est utilisée pour les ressources d'AML basée sur l'IA et leurs données.

Créer une clé et accorder des autorisations

Les instructions suivantes expliquent comment créer une clé pour une instance, et accorder des autorisations pour chiffrer et déchiffrer les données d'instance à l'aide de cette clé. Vous pouvez utiliser une clé créée directement dans Cloud KMS ou une clé gérée en externe que vous mettez à disposition 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 de clés à 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, 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 :
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • 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": CREATE_TIME
      }
      

      gcloud

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

      • LOCATION: emplacement du trousseau de clés ; utilisez l'une des régions disponibles :
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • 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 \
        --location LOCATION
      

      Windows (PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --location LOCATION
      

      Windows (cmd.exe)

      gcloud kms keyrings create KEY_RING_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, 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 :
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • 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": CREATE_TIME,
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": GENERATE_TIME
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": CREATE_TIME,
        "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 :

      • LOCATION: emplacement du trousseau de clés ; utilisez l'une des régions disponibles :
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • 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 \
        --location LOCATION \
        --purpose "encryption"
      

      Windows (PowerShell)

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

      Windows (cmd.exe)

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

  2. Si vous n'avez pas créé d'instance AML AI dans le projet AML AI, le compte de service AML AI 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 du projet Google Cloud dans lequel s'exécute l'AML basée sur l'IA

    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. Attribuez le rôle IAM Chiffreur/Déchiffreur de CryptoKeys (roles/cloudkms.cryptoKeyEncrypterDecrypter) au compte de service d'AML basée sur l'IA. Accordez cette autorisation sur 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 du projet Google Cloud dans lequel s'exécute l'AML basée sur l'IA
    • 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 :
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
    • KEY_RING_ID: identifiant défini par l'utilisateur pour le trousseau de clés
    • PROJECT_NUMBER: numéro du projet Google Cloud dans lequel l'AML AI est exécutée

    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 à une instance chiffrée par CMEK:

Nous vous recommandons de révoquer les autorisations du compte de service AML AI avant de désactiver ou de détruire une clé. Les modifications apportées aux autorisations sont propagées en quelques secondes, ce qui vous permet d'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 afficher ni récupérer les données de l'instance. Toutes les données stockées dans l'instance deviennent inaccessibles, y compris les ressources d'API telles que les ensembles de données, les modèles, les configurations de moteur, les résultats des tests backtest et les résultats des prédictions. Les utilisateurs dotés du rôle de lecteur de l'AML basée sur l'IA peuvent toujours afficher les métadonnées d'instance, telles que le nom de l'instance.

Les utilisateurs dotés du rôle "Administrateur de l'AML basée sur l'IA" ou "Propriétaire" peuvent supprimer l'instance.

Règles d'administration CMEK

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

Étape suivante