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

Ce guide décrit l'utilisation de CMEK pour Dataform et explique comment activer le chiffrement CMEK des dépôts Dataform.

Par défaut, Dataform chiffre le contenu client au repos. Dataform gère le chiffrement sans intervention de votre part. Cette option est appelée chiffrement par défaut de Google.

Si vous souhaitez contrôler vos clés de chiffrement, vous pouvez utiliser des clés de chiffrement gérées par le client (CMEK) dans Cloud KMS avec des services bénéficiant d'une intégration des CMEK, y compris Dataform. L'utilisation de clés Cloud KMS vous permet de contrôler leur niveau de protection, leur emplacement, leur calendrier de rotation, leurs autorisations d'utilisation et d'accès, ainsi que leurs limites cryptographiques. Cloud KMS vous permet également de suivre l'utilisation des clés, d'afficher les journaux d'audit et de contrôler les cycles de vie des clés. Au lieu de laisser Google posséder et gérer les clés de chiffrement de clés (KEK) symétriques qui protègent vos données, c'est vous qui vous chargez de cette tâche dans Cloud KMS.

Une fois que vous avez configuré vos ressources avec des CMEK, l'accès à vos ressources Dataform est semblable à celui du chiffrement par défaut de Google. Pour en savoir plus sur les options de chiffrement, consultez Clés de chiffrement gérées par le client (CMEK).

Chiffrement CMEK des données du dépôt

Lorsque vous appliquez le chiffrement CMEK à un dépôt Dataform, toutes les données client gérées par Dataform de ce dépôt sont chiffrées au repos à l'aide de la clé de protection CMEK définie pour le dépôt. Ces données incluent les éléments suivants:

  • Contenu du dépôt Git du dépôt Dataform et de ses espaces de travail
  • Requêtes SQL compilées et erreurs de compilation
  • Requêtes SQL stockées des actions de workflow
  • Détails des erreurs des actions de workflow exécutées

Dataform utilise des clés de protection CMEK dans les cas suivants:

  • Lors de chaque opération nécessitant le déchiffrement des données client stockées au repos. Ces opérations incluent, sans s'y limiter, les suivantes :
  • Lors de chaque opération nécessitant le stockage des données client au repos. Ces opérations incluent, sans s'y limiter, les suivantes :

Dataform gère le chiffrement des données client associées uniquement aux ressources Dataform. Dataform ne gère pas le chiffrement des données client créées dans BigQuery via l'exécution de workflows Dataform. Pour chiffrer les données créées et stockées dans BigQuery, configurez CMEK pour BigQuery.

Clés compatibles

Dataform accepte les types de clés CMEK suivants:

La disponibilité des clés varie selon le type de clé et la région. Pour en savoir plus sur la disponibilité géographique des clés CMEK, consultez la section Emplacements Cloud KMS.

Restrictions

Dataform est compatible avec CMEK, mais avec les restrictions suivantes:

  • La taille maximale d'un dépôt chiffré CMEK est de 512 Mo.
  • La taille maximale d'un espace de travail dans un dépôt chiffré CMEK est de 512 Mo.
  • Vous ne pouvez pas appliquer une clé de protection CMEK à un dépôt après sa création. Vous ne pouvez appliquer le chiffrement CMEK que lors de la création du dépôt.
  • Vous ne pouvez pas supprimer une clé de protection CMEK d'un dépôt.
  • Vous ne pouvez pas modifier une clé de protection CMEK pour un dépôt.
  • Si vous définissez une clé CMEK Dataform par défaut pour votre projet Google Cloud, tous les nouveaux dépôts créés dans l'emplacement du projet Google Cloud doivent être chiffrés avec CMEK. Lorsque vous créez un dépôt dans l'emplacement du projet Google Cloud, vous pouvez appliquer la clé CMEK Dataform par défaut ou une autre clé CMEK, mais vous ne pouvez pas appliquer le chiffrement par défaut au repos.
  • Si vous modifiez la valeur d'une clé CMEK Dataform par défaut, la valeur précédente s'applique aux dépôts préexistants, et la valeur mise à jour s'applique aux dépôts créés après la modification.
  • Vous ne pouvez définir qu'une seule clé CMEK Dataform par emplacement des dépôts de projets Google Cloud.
  • Les règles d'administration CMEK ne sont pas disponibles.
  • L'utilisation des clés Cloud HSM et Cloud EKM est soumise à la disponibilité. Pour en savoir plus sur la disponibilité des clés dans les différents emplacements, consultez la section Emplacements Cloud KMS.

Quotas Cloud KMS et Dataform

Vous pouvez utiliser des clés Cloud HSM et Cloud EKM avec Dataform. Lorsque vous utilisez des clés CMEK dans Dataform, vos projets peuvent consommer des quotas de requêtes de chiffrement Cloud KMS. Par exemple, les dépôts Dataform chiffrés par CMEK peuvent consommer ces quotas pour chaque modification du contenu du dépôt. 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.

Gérer les clés

Utilisez Cloud KMS pour toutes les opérations de gestion des clés. Dataform ne peut ni détecter, ni exploiter les modifications d'une clé avant que celles-ci ne soient propagées par Cloud KMS. La propagation de certaines opérations, telles que la désactivation ou la destruction d'une clé, peut prendre jusqu'à trois heures. Les modifications apportées aux autorisations se propagent généralement beaucoup plus rapidement.

Une fois le dépôt créé, Dataform appelle Cloud KMS pour s'assurer que la clé est toujours valide lors de chaque opération sur les données du dépôt chiffrées.

Si Dataform détecte que votre clé Cloud KMS a été désactivée ou détruite, toutes les données stockées dans le dépôt correspondant deviennent inaccessibles.

Si les appels de Dataform à Cloud KMS détectent qu'une clé précédemment désactivée a été réactivée, Dataform restaure automatiquement l'accès.

Utiliser des clés externes avec Cloud EKM

Au lieu d'utiliser des clés stockées sur Cloud KMS, vous pouvez utiliser des clés stockées auprès d'un partenaire de gestion des clés externes compatible. Pour ce faire, utilisez Cloud External Key Manager (Cloud EKM) pour créer et gérer des clés externes, qui sont des pointeurs vers des clés situées en dehors de Google Cloud. Pour en savoir plus, consultez la section Cloud External Key Manager.

Une fois que vous avez créé une clé externe avec Cloud EKM, vous pouvez l'appliquer à un nouveau dépôt Dataform en fournissant l'ID de cette clé lors de la création du dépôt. Cette procédure est identique à celle d'application d'une clé Cloud KMS à un nouveau dépôt.

Utiliser les clés CMEK par défaut de Dataform

Pour chiffrer plusieurs dépôts Dataform avec la même clé CMEK, vous pouvez définir une clé CMEK Dataform par défaut pour votre projet Google Cloud. Vous devez spécifier l'emplacement du projet Google Cloud pour la clé CMEK Dataform par défaut. Vous ne pouvez définir qu'une seule clé CMEK par défaut par projet Google Cloud.

Une fois que vous avez défini une clé CMEK Dataform par défaut, Dataform applique la clé à tous les nouveaux dépôts créés dans l'emplacement du projet Google Cloud par défaut. Lorsque vous créez un dépôt, vous pouvez utiliser la clé par défaut ou sélectionner une autre clé CMEK.

Traitement de l'état d'indisponibilité d'une clé

Dans de rares cas, par exemple pendant les périodes d'indisponibilité de Cloud KMS, Dataform peut ne pas être en mesure de récupérer l'état de votre clé à partir de Cloud KMS.

Si votre dépôt Dataform est protégé par une clé activée au moment où Dataform ne peut pas communiquer avec Cloud KMS, les données du dépôt chiffrées deviennent inaccessibles.

Les données du dépôt chiffrées restent inaccessibles jusqu'à ce que Dataform puisse se reconnecter à Cloud KMS et que Cloud KMS réponde que la clé est bien active.

À l'inverse, si votre dépôt Dataform est protégé par une clé désactivée au moment où Dataform est d'abord incapable de communiquer avec Cloud KMS, les données du dépôt chiffrées restent inaccessibles jusqu'à ce qu'il puisse se reconnecter à Cloud KMS et que vous ayez réactivé votre clé.

Journalisation

Vous pouvez auditer les demandes envoyées par Dataform en votre nom à Cloud KMS dans Cloud Logging, si vous avez activé la journalisation d'audit pour l'API Cloud KMS dans votre projet. Ces entrées de journal Cloud KMS sont visibles dans Cloud Logging. Pour en savoir plus, consultez la section Afficher les journaux.

Avant de commencer

  • Déterminez si vous allez exécuter Dataform et Cloud KMS dans différents projets ou dans le même projet. Nous vous recommandons d'utiliser des projets distincts pour mieux contrôler les autorisations. Pour en savoir plus sur les ID et numéros de projet Google Cloud, consultez la section Identifier des projets.

  • Pour le projet Google Cloud qui exécute Cloud KMS, procédez comme suit :

    1. Activez l'API Cloud Key Management Service.
    2. Créez un trousseau de clés et une clé, comme décrit dans les sections concernant la création de trousseaux et de clés. Créez le trousseau de clés dans le même emplacement que votre dépôt Dataform :
      • Les dépôts doivent utiliser des clés régionales correspondantes. Par exemple, un dépôt dans la région asia-northeast3 doit être protégé par une clé provenant d'un trousseau de clés situé dans asia-northeast3.
      • La région global ne peut pas être utilisée avec Dataform.
      Pour en savoir plus sur les emplacements compatibles avec Dataform et Cloud KMS, consultez la section Emplacements cloud.

Activer CMEK

Dataform peut accéder à la clé en votre nom une fois que vous avez accordé le rôle Chiffreur/Déchiffreur de CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) au compte de service Dataform par défaut.

L'ID de votre compte de service Dataform par défaut est au format suivant:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Pour accorder le rôle CryptoKey Encrypter/Decrypter au compte de service Dataform par défaut, procédez comme suit:

Console

  1. Ouvrez la page Gestion des clés dans la console Google Cloud.

    Ouvrir la page Gestion des clés

  2. Cliquez sur le nom du trousseau de clés contenant la clé.

  3. Cochez la case correspondant à la clé de chiffrement à laquelle vous souhaitez ajouter le rôle. L'onglet Autorisations s'ouvre.

  4. Cliquez sur Ajouter un membre.

  5. Saisissez l'adresse e-mail du compte de service.

    • Si le compte de service figure déjà sur la liste des membres, il possède des rôles. Cliquez sur la liste déroulante des rôles actuels pour le compte de service.
  6. Cliquez sur la liste déroulante Sélectionnez un rôle, sélectionnez Cloud KMS, puis cliquez sur le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS.

  7. Cliquez sur Enregistrer pour appliquer le rôle au compte de service.

gcloud

Pour attribuer le rôle, vous pouvez utiliser Google Cloud CLI comme suit :

gcloud kms keys add-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member serviceAccount:SERVICE_ACCOUNT \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --location=KMS_KEY_LOCATION \
    --keyring=KMS_KEY_RING \
    KMS_KEY

Remplacez les éléments suivants :

  • KMS_PROJECT_ID: ID de votre projet Google Cloudexécutant Cloud KMS
  • SERVICE_ACCOUNT: adresse e-mail de votre compte de service Dataform par défaut
  • KMS_KEY_LOCATION : nom de l'emplacement de votre clé Cloud KMS
  • KMS_KEY_RING : nom du trousseau de clés contenant votre clé Cloud KMS
  • KMS_KEY : nom de votre clé Cloud KMS

Définir une clé CMEK Dataform par défaut

Définir une clé CMEK Dataform par défaut pour votre projet Google Cloud vous permet de chiffrer plusieurs dépôts avec la même clé CMEK. Pour en savoir plus, consultez la section Utiliser une clé par défaut pour les dépôts Dataform.

Pour définir ou modifier une clé CMEK par défaut, appelez l'API Dataform dans la requête suivante:

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

Remplacez les éléments suivants :

  • KMS_KEY_RING: nom du trousseau de clés de votre clé Cloud KMS.
  • KMS_KEY: nom de votre clé Cloud KMS.
  • PROJECT_ID : ID de votre projet Google Cloud
  • PROJECT_LOCATION: nom de l'emplacement de votre projet Google Cloud.

Supprimer une clé CMEK Dataform par défaut

Pour supprimer une clé CMEK Dataform par défaut de votre projet Google Cloud, appelez l'API Dataform dans la requête suivante:

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud
  • PROJECT_LOCATION: nom de l'emplacement de votre projet Google Cloud pour lequel vous souhaitez désactiver la clé CMEK par défaut.

Vérifier si une clé CMEK Dataform par défaut est définie

Pour vérifier si une clé CMEK Dataform par défaut est définie pour votre projet Google Cloud, appelez l'API Dataform dans la requête suivante:

curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud
  • PROJECT_LOCATION: nom de l'emplacement de votre projet Google Cloud.

Appliquer le chiffrement CMEK à un dépôt

Vous pouvez appliquer la protection CMEK à un dépôt Dataform lors de sa création.

Pour appliquer le chiffrement CMEK à un dépôt Dataform, sélectionnez le chiffrement avec la clé CMEK Dataform par défaut ou spécifiez une clé Cloud KMS unique lorsque vous créez le dépôt. Pour obtenir des instructions, consultez Créer un dépôt.

Vous ne pouvez pas modifier le mécanisme de chiffrement d'un dépôt Dataform une fois le dépôt créé.

Pour en savoir plus, consultez la section Restrictions.

Étape suivante