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 Cloud HSM, un service de module de sécurité matériel sur le cloud qui permet d'héberger des clés de chiffrement et d'effectuer des opérations cryptographiques dans un cluster de modules HSM certifiés FIPS 140-2 niveau 3. Pour en savoir plus sur les quotas supplémentaires disponibles pour Cloud HSM, consultez la section sur les quotas du service Cloud KMS.

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

Avant de commencer

  1. Vérifiez que vous disposez du SDK Apache Beam pour Java 2.13.0 ou version ultérieure, ou du SDK Apache Beam pour Python 2.13.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 le point de terminaison régional de votre tâche Dataflow doivent être identiques.

Attribuer les autorisations Chiffreur/Déchiffreur

  1. Attribuez le rôle Cloud KMS CryptoKey Encrypter/Decrypter au compte de service Dataflow. Cette opération 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 l'outil de ligne de commande gcloud 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 opération 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 l'outil de ligne de commande gcloud 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. Vous devez 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. Vous devez spécifier temp_location.

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

Cloud Console

  1. Ouvrez l'interface utilisateur de surveillance Dataflow.
    Accéder à l'interface utilisateur Web de 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 et 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 Cloud Dataflow puissent procéder au chiffrement et au déchiffrement à l'aide d'une clé CMEK spécifique.

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 l'utilisateur spécifie pour les transformations basées sur des clés.

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. Si ces clés contiennent des informations personnelles, vous devez les hacher ou les transformer d'une autre manière avant qu'elles ne pénètrent dans le pipeline Dataflow. Le chiffrement CMEK s'applique aux valeurs des paires clé/valeur.

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.

Actuellement, l'état de Dataflow Streaming Engine ne peut pas être protégé par une clé CMEK et est chiffré par une clé gérée par Google. Si vous souhaitez que tous les états de votre pipeline soient protégés par des clés CMEK, n'utilisez pas cette fonctionnalité facultative.

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

Vous pouvez vous servir de Cloud Console ou de l'outil de ligne de commande gcloud pour vérifier si votre pipeline utilise une clé Cloud KMS.

Console

  1. Ouvrez l'interface utilisateur de surveillance Dataflow.
    Accéder à l'interface utilisateur Web de Dataflow
  2. Sélectionnez votre tâche Dataflow pour afficher les détails correspondants.
  3. Dans le panneau latéral Informations sur la tâche, pour afficher le type de clé, vérifiez le champ Type de chiffrement.
    Panneau latéral d'informations sur la tâche répertoriant les détails d'une tâche Cloud 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 l'outil 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 Cloud Console 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.

Consigner l'utilisation des clés Cloud KMS dans les journaux d'audit

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. Cela 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, et les 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.

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 Cloud Console ou de l'outil gcloud.
  2. Révoquez le rôle Cloud KMS CryptoKey Encrypter/Decrypter du compte de service Compute Engine à l'aide de Cloud Console ou de l'outil gcloud.
  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 et commence immédiatement à nettoyer les ressources Google Cloud associées à la tâche.

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

Dataflow peut accéder aux sources et aux récepteurs protégés par des clés Cloud KMS sans que vous ayez besoin de spécifier la clé Cloud KMS correspondante, à condition que vous ne créiez pas d'objets. Si votre pipeline Dataflow peut créer des objets dans un récepteur, vous devez définir les paramètres du pipeline qui spécifient les clés Cloud KMS du récepteur et transmettre ces clés 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, tels que le service Confluent Kafka hébergé sur Google Cloud ou Amazon Simple Storage Service (S3), 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.

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.

Tarifs

Vous pouvez utiliser les clés de chiffrement Cloud KMS avec Dataflow au niveau de tous les points de terminaison régionaux 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.