Utiliser les clés de chiffrement gérées par le client

Cette page explique comment utiliser une clé de chiffrement Cloud Key Management Service (Cloud KMS) avec Dataflow. Une clé de chiffrement gérée par le client (CMEK, Customer-Managed Encryption Key) permet de chiffrer les données au repos avec une clé contrôlable via Cloud KMS. Vous pouvez créer un pipeline de traitement par lot ou par flux qui est protégé par une clé CMEK, ou accéder aux données protégées par la clé CMEK dans les sources et les récepteurs.

Vous pouvez également utiliser des clés Cloud EKM ou Cloud HSM. Lorsque vous utilisez la fonctionnalité CMEK dans Dataflow, vos projets peuvent consommer des quotas de requêtes de chiffrement Cloud KMS. Par exemple, les pipelines Dataflow peuvent consommer ces quotas lorsque votre pipeline accède à des données protégées par des clés CMEK dans des sources et des récepteurs ou lorsque l'état d'un pipeline chiffré par CMEK est récupéré. Pour en savoir plus, consultez la section Chiffrement des emplacements associés aux états du pipeline de cette page. Les opérations de chiffrement et de déchiffrement à l'aide de clés CMEK n'affectent les quotas Cloud KMS que si vous utilisez des clés matérielles (Cloud HSM) ou externes (Cloud EKM). Pour en savoir plus, consultez la page Quotas Cloud KMS.

À l'aide de Cloud External Key Manager (Cloud EKM), vous pouvez utiliser des clés que vous gérez dans un partenaire de gestion de clés externes compatible afin de protéger les données dans Google Cloud. Vous pouvez protéger les données au repos dans les services d'intégration de CMEK compatibles ou en appelant directement l'API Dataflow.

Pour plus d'informations, consultez les options de chiffrement disponibles sur Google Cloud.

Compatibilité et limites

  • Cloud KMS est compatible avec les versions suivantes du SDK Apache Beam :

    • SDK Java 2.13.0 et versions ultérieures
    • SDK Python 2.13.0 et versions ultérieures
    • SDK Go 2.40.0 et versions ultérieures
  • Cloud KMS avec Dataflow est compatible avec les clés régionales. Si vous remplacez la région ou la zone des nœuds de calcul du pipeline pour utiliser une région autre que celle associée à vos clés, les clés régionales ne fonctionnent pas.

  • La région de votre clé CMEK et la région de votre tâche Dataflow doivent être identiques.

  • Les zones multirégionales et mondiales ne sont pas compatibles. Vous ne pouvez pas utiliser de clés globales et multirégionales avec des pipelines Dataflow.

Chiffrement des artefacts associés aux états du pipeline

Les données qu'un pipeline Dataflow lit à partir de sources de données spécifiées par l'utilisateur sont chiffrées, à l'exception des clés de données que vous spécifiez pour les transformations basées sur des clés dans les tâches de traitement par flux.

Pour les tâches par lots, toutes les données, y compris les clés de données que vous spécifiez pour les transformations basées sur des clés, sont toujours protégées par le chiffrement CMEK.

Pour les jobs de traitement par flux créés après le 7 mars 2024, toutes les données utilisateur sont chiffrées avec des CMEK.

Pour les jobs de traitement par flux créés avant le 7 mars 2024, les clés de données utilisées dans les opérations basées sur des clés (telles que le fenêtrage, le regroupement et la jointure) ne sont pas protégées par le chiffrement CMEK. Pour activer ce chiffrement pour vos jobs, drainez ou annulez le job, puis redémarrez-le.

Les métadonnées de tâches ne sont pas chiffrées avec des clés Cloud KMS. Ces métadonnées incluent les éléments suivants :

  • Données fournies par l'utilisateur, telles que les noms de tâches, les valeurs des paramètres de tâche et le graphique du pipeline
  • Données générées par le système, telles que les ID de tâche et les adresses IP des nœuds de calcul

Chiffrement des emplacements associés aux états du pipeline

Les emplacements de stockage suivants sont protégés par des clés Cloud KMS :

  • Disques persistants associés aux nœuds de calcul Dataflow et utilisés pour le brassage basé sur ce type de disque ainsi que pour le stockage de données en flux continu.
  • État de Dataflow Shuffle pour les pipelines par lot.
  • Buckets Cloud Storage qui stockent des données d'exportation ou d'importation temporaires. Dataflow n'accepte que les clés par défaut définies par l'utilisateur au niveau du bucket.
  • Buckets Cloud Storage utilisés pour stocker des fichiers binaires contenant le code du pipeline. Dataflow n'accepte que les clés par défaut définies par l'utilisateur au niveau du bucket.
  • Buckets Cloud Storage utilisés pour stocker des données de pipeline échantillonnées, lorsque l'échantillonnage de données est activé.
  • État de Dataflow Streaming Engine pour les pipelines de traitement par flux.

Clés externes

Vous pouvez utiliser Cloud External Key Manager (Cloud EKM) pour chiffrer les données dans Google Cloud à l'aide de clés externes que vous gérez.

Lorsque vous utilisez une clé Cloud EKM, Google n'a aucun contrôle sur la disponibilité de votre clé gérée en externe. Si la clé devient indisponible pendant la période de création de la tâche ou du pipeline, la tâche ou le pipeline concerné est annulé.

Pour plus d'informations sur l'utilisation des clés externes, consultez la section Cloud External Key Manager.

Avant de commencer

  1. Vérifiez que vous disposez du SDK Apache Beam pour Java 2.13.0 ou version ultérieure, du SDK Apache Beam pour Python 2.13.0 ou version ultérieure, ou du SDK Apache Beam pour Go 2.40.0 ou version ultérieure.

    Pour en savoir plus, consultez la page Installer le SDK Apache Beam.

  2. Déterminez si vous allez exécuter Dataflow et Cloud KMS dans le même projet Google Cloud ou dans des projets différents. Cette page utilise les conventions suivantes :

    • PROJECT_ID est l'ID du projet qui exécute Dataflow.
    • PROJECT_NUMBER est le numéro du projet qui exécute Dataflow.
    • KMS_PROJECT_ID correspond à l'ID du projet qui exécute Cloud KMS.

    Pour en savoir plus sur les ID et numéros de projet Google Cloud, consultez la section Identifier des projets.

  3. Dans le projet Google Cloud pour lequel vous souhaitez exécuter Cloud KMS :

    1. Activez l'API Cloud KMS.
    2. Créez un trousseau de clés et une clé comme indiqué dans l'article Créer des clés symétriques. Cloud KMS et Dataflow sont tous deux des services régionalisés. La région de votre clé CMEK et la région de votre tâche Dataflow doivent être identiques. N'utilisez pas de clés globales ou multirégionales avec vos pipelines Dataflow. Utilisez plutôt des clés régionales.

Attribuer les autorisations Chiffreur/Déchiffreur

  1. Attribuez le rôle Cloud KMS CryptoKey Encrypter/Decrypter au compte de service Dataflow. Cette autorisation a pour effet de lui accorder une autorisation de chiffrement et de déchiffrement avec la clé CMEK que vous spécifiez. Si vous utilisez Google Cloud Console et la page Créer une tâche à partir d'un modèle, cette autorisation est accordée automatiquement. Vous pouvez ignorer cette étape.

    Utilisez la CLI Google Cloud pour attribuer le rôle :

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataflow-service-producer-prod.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Remplacez, d'une part, KMS_PROJECT_ID par l'ID du projet Google Cloud qui exécute Cloud KMS et d'autre part, PROJECT_NUMBER par le numéro (et non pas l'ID) du projet Google Cloud qui exécute les ressources Dataflow.

  2. Attribuez le rôle Cloud KMS CryptoKey Encrypter/Decrypter au compte de service Compute Engine. Cette autorisation a pour effet d'accorder à votre compte de service Compute Engine l'autorisation lui permettant de chiffrer et de déchiffrer la clé CMEK que vous spécifiez.

    Utilisez la CLI Google Cloud pour attribuer le rôle :

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Remplacez d'une part KMS_PROJECT_ID par l'ID du projet Google Cloud exécutant Cloud KMS et d'autre part PROJECT_NUMBER par le numéro (et non l'ID) du projet Google Cloud exécutant les ressources Compute Engine.

Créer un pipeline protégé par Cloud KMS

Lorsque vous créez un pipeline de traitement par lot ou par flux, vous pouvez sélectionner une clé Cloud KMS pour chiffrer l'état du pipeline. Cet état correspond aux données stockées par Dataflow dans un espace de stockage temporaire.

Interface de ligne de commande

Pour créer un pipeline dont l'état est protégé par une clé Cloud KMS, ajoutez l'indicateur approprié aux paramètres du pipeline. L'exemple ci-dessous montre comment exécuter un pipeline de comptage de mots avec Cloud KMS.

Java

Dataflow ne permet pas de créer des chemins d'accès Cloud Storage par défaut pour les fichiers temporaires lors de l'utilisation d'une clé Cloud KMS. Veuillez spécifier gcpTempLocation.

mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \
               --output=gs://STORAGE_BUCKET/counts \
               --runner=DataflowRunner --project=PROJECT_ID \
               --gcpTempLocation=gs://STORAGE_BUCKET/tmp \
               --dataflowKmsKey=KMS_KEY"
  -Pdataflow-runner

Python

Dataflow ne permet pas de créer des chemins d'accès Cloud Storage par défaut pour les fichiers temporaires lors de l'utilisation d'une clé Cloud KMS. Veuillez spécifier gcpTempLocation.

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/counts \
  --runner DataflowRunner \
  --region HOST_GCP_REGION \
  --project PROJECT_ID \
  --temp_location gs://STORAGE_BUCKET/tmp/ \
  --dataflow_kms_key=KMS_KEY

Go

Dataflow ne permet pas de créer des chemins d'accès Cloud Storage par défaut pour les fichiers temporaires lors de l'utilisation d'une clé Cloud KMS. Veuillez spécifier gcpTempLocation.

wordcount
  --project HOST_PROJECT_ID \
  --region HOST_GCP_REGION \
  --runner dataflow \
  --staging_location gs://STORAGE_BUCKET/staging \
  --temp_location gs://STORAGE_BUCKET/temp \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/output \
  --dataflow_kms_key=KMS_KEY

Console Google Cloud

  1. Ouvrez l'interface de surveillance Dataflow.
    Accéder à l'interface Web Dataflow
  2. Sélectionnez Créer une tâche à partir d'un modèle.
  3. Dans la section Encryption (Chiffrement), sélectionnez Customer-managed key (Clé gérée par le client).
Options de chiffrement de la page "Créer une tâche à partir d'un modèle" disponibles pour l'utilisation d'une clé gérée par Google ou de clés gérées par le client.

La première fois que vous tentez d'exécuter une tâche avec une clé Cloud KMS spécifique, il est possible que votre compte de service Compute Engine ou votre compte de service Dataflow ne disposent pas des autorisations leur permettant de procéder au chiffrement et au déchiffrement à l'aide de cette clé. Dans ce cas, un message d'avertissement s'affiche pour vous inviter à attribuer les autorisations appropriées à votre compte de service.

Message vous invitant à attribuer les autorisations requises pour que vos comptes de service Compute Engine et Dataflow puissent procéder au chiffrement et au déchiffrement à l'aide d'une clé CMEK spécifique.

Vérifier l'utilisation des clés Cloud KMS

Vous pouvez vous servir de la console Google Cloud ou de Google Cloud CLI pour vérifier si votre pipeline utilise une clé Cloud KMS.

Console

  1. Ouvrez l'interface de surveillance Dataflow.
    Accéder à l'interface Web Dataflow
  2. Pour afficher les détails d'une tâche, sélectionnez votre tâche Dataflow.
  3. Dans le panneau latéral Job info (Informations sur la tâche), pour connaître le type de clé, vérifiez le champ Encryption type (Type de chiffrement).

    • Pour le type de chiffrement : "Clé gérée par Google"
      Panneau latéral d'informations sur la tâche répertoriant les détails d'une tâche Dataflow.
      Le type de clé utilisé par la tâche est indiqué dans le champ "Encryption type" (Type de chiffrement).
    • Pour le type de chiffrement : "Clé gérée par le client"
      Panneau latéral d'informations sur la tâche répertoriant les détails d'une tâche Dataflow.
      Le type de clé utilisé par la tâche est indiqué dans le champ "Encryption type" (Type de chiffrement).

CLI

Exécutez la commande describe à l'aide de la CLI gcloud :

gcloud dataflow jobs describe JOB_ID

Recherchez la ligne contenant serviceKmsKeyName. Ces informations indiquent qu'une clé Cloud KMS a été utilisée pour le chiffrement de l'état du pipeline Dataflow.

Les outils et pages de la console Google Cloud vous permettent de vérifier l'utilisation des clés Cloud KMS pour le chiffrement des sources et des récepteurs, y compris Pub/Sub, Cloud Storage et BigQuery. Vous pouvez également vérifier l'utilisation des clés Cloud KMS en consultant vos journaux d'audit Cloud KMS.

Désactiver ou détruire la clé

Si, pour une raison quelconque, vous devez désactiver ou détruire la clé, vous pouvez utiliser la console Google Cloud. Les opérations de désactivation et de destruction annulent les tâches en utilisant cette clé. Cette opération est définitive.

Si vous utilisez Cloud EKM, désactivez ou détruisez la clé dans votre gestionnaire de clés externes.

Si vous utilisez l'option Streaming Engine, nous vous recommandons de prendre un instantané de la tâche avant de désactiver la clé.

Supprimer l'accès de Dataflow à la clé Cloud KMS

Vous pouvez supprimer l'accès de Dataflow à la clé Cloud KMS en procédant comme suit :

  1. Révoquez le rôle Cloud KMS CryptoKey Encrypter/Decrypter du compte de service Dataflow à l'aide de la console Google Cloud ou de gcloud CLI.
  2. Révoquez le rôle Cloud KMS CryptoKey Encrypter/Decrypter du compte de service Compute Engine à l'aide de la console Google Cloud ou de gcloud CLI.
  3. Vous pouvez également détruire le matériel des versions de la clé pour empêcher Dataflow et les autres services d'accéder à l'état du pipeline.

Bien que vous puissiez détruire le matériel des versions d'une clé, il est impossible de supprimer les clés et les trousseaux de clés. Les trousseaux de clés et les clés n'engendrent aucun coût facturable et ne sont soumis à aucune limite de quota. Par conséquent, leur existence prolongée n'a aucune incidence sur les coûts ni sur les limites de production.

Les tâches Dataflow vérifient régulièrement si le compte de service Dataflow peut exploiter de façon appropriée la clé Cloud KMS indiquée. Si une requête de chiffrement ou de déchiffrement échoue, le service Dataflow interrompt l'ingestion et le traitement des données dès que possible. Dataflow commence immédiatement à nettoyer les ressources Google Cloud associées à votre tâche.

Utiliser des sources et des récepteurs protégés par des clés Cloud KMS

Dataflow peut accéder aux récepteurs et aux sources Google Cloud protégés par des clés Cloud KMS. Si vous ne créez pas d'objets, vous n'avez pas besoin de spécifier la clé Cloud KMS de ces sources et récepteurs. Si votre pipeline Dataflow peut créer des objets dans un récepteur, vous devez définir les paramètres du pipeline. Ces paramètres spécifient les clés Cloud KMS du récepteur et transmettent cette clé Cloud KMS aux méthodes de connecteur d'E/S appropriées.

Pour les sources et récepteurs de pipeline Dataflow non compatibles avec les clés CMEK gérées par Cloud KMS, les paramètres CMEK Dataflow ne sont pas pertinents.

Autorisations associées aux clés Cloud KMS

Lorsque vous accédez à des services protégés par des clés Cloud KMS, vérifiez que vous leur avez attribué le rôle Cloud KMS CryptoKey Encrypter/Decrypter. Les comptes se présentent comme suit :

  • Cloud Storage : service-{project_number}@gs-project-accounts.iam.gserviceaccount.com
  • BigQuery : bq-{project_number}@bigquery-encryption.iam.gserviceaccount.com
  • Pub/Sub : service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com

Cloud Storage

Si vous souhaitez protéger les buckets temporaires et de préproduction que vous avez spécifiés avec les paramètres de pipeline TempLocation/temp_location et stagingLocation/staging_location, consultez la page traitant de la configuration des buckets Cloud Storage protégés par des clés CMEK.

BigQuery

Java

Exécutez la méthode with_kms_key() sur les valeurs renvoyées par BigQueryIO.readTableRows(), BigQueryIO.read(), BigQueryIO.writeTableRows() et BigQueryIO.write().

Vous pouvez consulter un exemple dans le dépôt GitHub d'Apache Beam.

Python

Utilisez l'argument kms_key dans BigQuerySource et BigQuerySink.

Vous pouvez consulter un exemple dans le dépôt GitHub d'Apache Beam.

Go

Les OI BigQuery ne sont pas compatibles avec l'utilisation de la clé kms dans Go.

Pub/Sub

Dataflow gère l'accès aux sujets protégés par les clés CMEK en utilisant la configuration CMEK des sujets.

Consultez les instructions Pub/Sub concernant l'utilisation des clés CMEK pour lire et écrire dans des sujets Pub/Sub protégés par ces clés.

Journaux d'audit pour l'utilisation des clés Cloud KMS

Dataflow permet à Cloud KMS d'utiliser les journaux d'audit Cloud pour consigner les opérations de clés telles que le chiffrement et le déchiffrement. Dataflow fournit l'ID de la tâche en tant que contexte à un appelant Cloud KMS. Cet ID vous permet de suivre chaque utilisation d'une clé Cloud KMS spécifique pour une tâche Dataflow.

Les journaux d'audit Cloud gèrent des journaux d'audit pour chaque projet, dossier et organisation Google Cloud. Plusieurs options s'offrent à vous pour consulter vos journaux d'audit Cloud KMS.

Cloud KMS écrit des journaux d'audit pour les activités d'administration pour vos tâches Dataflow avec chiffrement CMEK. Ces journaux enregistrent les opérations qui modifient la configuration ou les métadonnées d'une ressource. Vous ne pouvez pas les désactiver.

Si la fonction est explicitement activée, Cloud KMS écrit des journaux d'audit pour l'accès aux données pour vos tâches Dataflow avec chiffrement CMEK. Ces journaux contiennent les appels d'API qui lisent la configuration ou les métadonnées des ressources. Ces journaux contiennent également des appels d'API pilotés par l'utilisateur qui créent, modifient ou lisent des données de ressources fournies par l'utilisateur. Si vous souhaitez obtenir des instructions sur l'activation d'une partie ou de l'ensemble de vos journaux d'audit pour l'accès aux données, consultez la page Configurer les journaux d'accès aux données.

Tarification

Vous pouvez utiliser les clés de chiffrement Cloud KMS avec Dataflow dans toutes les régions Dataflow où Cloud KMS est disponible.

Cette intégration n'entraîne pas de coûts supplémentaires, outre les frais liés aux opérations de clés qui sont facturées dans le cadre de votre projet Google Cloud. Chaque fois que le compte de service Dataflow utilise votre clé Cloud KMS, l'opération est facturée au tarif des opérations de clés Cloud KMS.

Pour en savoir plus, consultez la page Tarifs de Cloud KMS.

Dépannage

Utilisez les suggestions de cette section pour résoudre les erreurs.

Impossible de valider Cloud KMS

Votre workflow peut échouer avec l'erreur suivante :

Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.

Pour résoudre ce problème, vérifiez que vous avez transmis le chemin d'accès complet de la clé. Il se présente comme suit : projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Recherchez d'éventuelles fautes de frappe dans le chemin de la clé.

Autorisation d'accès à la clé Cloud KMS refusée

Votre workflow peut échouer avec l'erreur suivante :

Workflow failed. Causes: Cloud KMS key Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>' (or it may not exist). cannot be validated.

Pour résoudre ce problème, vérifiez que l'ID de projet mentionné dans le chemin de la clé est correct. Vérifiez également que vous disposez des autorisations nécessaires pour utiliser la clé.

L'emplacement de la clé Cloud KMS ne correspond pas à l'emplacement de la tâche Dataflow

Votre workflow peut échouer avec l'erreur suivante :

Workflow failed. Causes: Cloud KMS key projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
can't protect resources for this job. Make sure the region of the KMS key matches the Dataflow region.

Pour résoudre ce problème, si vous utilisez une clé régionale, vérifiez que la clé Cloud KMS se trouve dans la même région que la tâche Dataflow.