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é 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 Google CloudProjet exé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

Appliquer une règle d'administration CMEK

Dataform est intégré à deux contraintes de règle d'administration pour garantir l'utilisation de CMEK dans l'ensemble d'une organisation:

  • constraints/gcp.restrictNonCmekServices permet d'exiger la protection CMEK.
  • constraints/gcp.restrictCmekCryptoKeyProjects permet de limiter les clés Cloud KMS utilisées pour la protection CMEK.

Cette intégration vous permet de spécifier les exigences de conformité au chiffrement suivantes pour les dépôts Dataform de votre organisation:

Éléments à prendre en compte lors de l'application de règles d'administration

Avant d'appliquer des règles d'administration CMEK, vous devez connaître les points suivants.

Se préparer à un délai de propagation

Après avoir défini ou mis à jour une règle d'administration, la prise en compte de la nouvelle règle peut prendre jusqu'à 15 minutes.

Tenir compte des ressources existantes

Les ressources existantes ne sont pas soumises aux règles d'administration nouvellement créées. Par exemple, une règle d'administration ne s'applique pas rétroactivement aux dépôts existants. Ces ressources restent accessibles sans CMEK et, le cas échéant, sont toujours chiffrées avec des clés existantes.

Vérifier les autorisations requises pour définir une règle d'administration

L'autorisation de définir ou de mettre à jour la règle d'administration peut s'avérer difficile à obtenir à des fins de test. Vous devez disposer du rôle Administrateur des règles d'administration, qui ne peut être accordé qu'au niveau de l'organisation (et non au niveau du projet ou du dossier).

Bien que le rôle doit être accordé au niveau de l'organisation, il est toujours possible de spécifier une stratégie qui ne s'applique qu'à un projet ou un dossier spécifique.

Exiger des CMEK pour tous les nouveaux dépôts Dataform

Vous pouvez utiliser la contrainte constraints/gcp.restrictNonCmekServices pour exiger que des CMEK soient utilisées pour protéger tous les nouveaux dépôts Dataform d'une organisation.

Si cette règle d'administration est définie, toutes les requêtes de création de ressources sans clé Cloud KMS spécifiée échouent.

Une fois cette règle définie, elle ne s'applique qu'aux nouveaux dépôts du projet. Tous les dépôts existants sans clé Cloud KMS appliquée continuent d'exister et sont accessibles sans problème.

Console

  1. Dans la console Google Cloud, accédez à la page Règles d'administration.

    Accéder à la page Règles d'administration

  2. Utilisez le filtre Filtrer pour rechercher la contrainte suivante:

    constraints/gcp.restrictNonCmekServices
    
  3. Dans la colonne "Nom", cliquez sur Restreindre les services autorisés à créer des ressources sans CMEK.

  4. Cliquez sur Gérer la règle.

  5. Sur la page Modifier la règle, sous Source de la règle, sélectionnez Remplacer la règle parente.

  6. Sous Règles, cliquez sur Ajouter une règle.

  7. Dans la liste Valeurs de règles, sélectionnez Personnalisé.

  8. Dans la liste Policy type (Type de règle), sélectionnez Deny (Refuser).

  9. Dans le champ Valeurs personnalisées, saisissez les valeurs suivantes:

    is:dataform.googleapis.com
    
  10. Cliquez sur OK, puis sur Définir la règle.

gcloud

  1. Créez un fichier temporaire /tmp/policy.yaml pour stocker la règle :

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:dataform.googleapis.com

    Remplacez PROJECT_ID par l'ID du projet auquel vous appliquez cette contrainte.

  2. Exécutez la commande org-policies set-policy :

    gcloud org-policies set-policy /tmp/policy.yaml

Pour vérifier que la stratégie est appliquée, vous pouvez essayer de créer un dépôt Dataform dans le projet. Le processus échoue, sauf si vous spécifiez une clé Cloud KMS.

Restreindre les clés Cloud KMS pour un projet Dataform

La contrainte constraints/gcp.restrictCmekCryptoKeyProjects vous permet de restreindre les clés Cloud KMS que vous pouvez utiliser pour protéger un dépôt dans un projet Dataform.

Par exemple, vous pouvez spécifier une règle semblable à la suivante: "Pour tous les dépôts Dataform dans projects/my-company-data-project, les clés Cloud KMS utilisées dans ce projet doivent provenir de projects/my-company-central-keys OU projects/team-specific-keys."

Console

  1. Dans la console Google Cloud, accédez à la page Règles d'administration.

    Accéder à la page Règles d'administration

  2. Utilisez le filtre pour rechercher la contrainte suivante:

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. Dans la colonne "Nom", cliquez sur Limiter les projets pouvant fournir des clés CryptoKeys KMS pour CMEK.

  4. Cliquez sur Gérer la règle.

  5. Sur la page Modifier la règle, sous Source de la règle, sélectionnez Remplacer la règle parente.

  6. Sous Règles, cliquez sur Ajouter une règle.

  7. Dans la liste Valeurs de règles, sélectionnez Personnalisé.

  8. Dans la liste Type de règle, sélectionnez Autoriser.

  9. Dans le champ Valeurs personnalisées, saisissez les valeurs suivantes:

    under:projects/KMS_PROJECT_ID
    

    Remplacez KMS_PROJECT_ID par l'ID du projet dans lequel se trouvent les clés Cloud KMS que vous souhaitez utiliser.

    Par exemple, under:projects/my-kms-project.

  10. Cliquez sur OK, puis sur Définir la règle.

gcloud

  1. Créez un fichier temporaire /tmp/policy.yaml pour stocker la règle :

      name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects
      spec:
        rules:
        - values:
            allowedValues:
            - under:projects/KMS_PROJECT_ID

    Remplacez les éléments suivants

    • PROJECT_ID: ID du projet auquel vous appliquez cette contrainte.
    • KMS_PROJECT_ID: ID du projet dans lequel se trouvent les clés Cloud KMS que vous souhaitez utiliser.
  2. Exécutez la commande org-policies set-policy :

    gcloud org-policies set-policy /tmp/policy.yaml

Pour vérifier que la règle a bien été appliquée, vous pouvez essayer de créer un dépôt Dataform à l'aide d'une clé Cloud KMS d'un autre projet. Le processus échoue.

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