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

Par défaut, Workflows chiffre vos données stockées au repos. Google Cloud traite et gère ce chiffrement par défaut sans intervention de votre part.

Si vous avez des exigences réglementaires ou de conformité spécifiques liées aux clés qui protègent vos données, vous pouvez utiliser des clés de chiffrement gérées par le client (CMEK) pour Workflows. Votre workflow et les données au repos associées sont protégées à l'aide d'une clé de chiffrement à laquelle vous seul pouvez accéder, et que vous pouvez contrôler et gérer à l'aide de Cloud Key Management Service (Cloud KMS).

Éléments protégés par CMEK

Lorsque vous déployez un workflow, vous pouvez spécifier une clé Cloud KMS. Cette clé permet de chiffrer le workflow et ses exécutions:

  • Un workflow nécessite un fichier source contenant une définition de workflow valide. Ce fichier source est chiffré à l'aide de la clé.

  • Une exécution de workflow exécute la définition du workflow en cours (une révision de workflow spécifique). À l'aide de la clé associée à la révision du workflow au moment de son déploiement, le workflow compilé, ainsi que les données d'entrée, de sortie et d'exécution d'exécution stockées sont chiffrés. Cela inclut les arguments d'exécution, les résultats, les erreurs et les exceptions, les événements Eventarc distribués, ainsi que les requêtes et réponses de rappel et HTTP.

Avant de commencer

Avant d'utiliser des clés CMEK dans Workflows, procédez comme suit:

  1. Activez les API.

    Console

    1. Activer les API Cloud KMS and Workflows.

      Activer les API

    gcloud

    1. Dans la console Google Cloud, activez Cloud Shell.

      Activer Cloud Shell

      En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

    2. Mettez à jour les composants gcloud.
      gcloud components update
      
    3. Activez les API Cloud KMS et Workflows pour le projet qui stockera vos clés de chiffrement.
      gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
      
  2. Cloud KMS génère des Cloud Audit Logs lorsque des clés sont activées, désactivées ou utilisées par les ressources Workflows pour chiffrer et déchiffrer des données. Assurez-vous que la journalisation est activée pour l'API Cloud KMS dans votre projet, et que vous avez décidé quelles autorisations et quels rôles spécifiques à la journalisation s'appliquent à votre cas d'utilisation. Pour en savoir plus, consultez la page Informations sur les journaux d'audit Cloud KMS.

Créer un trousseau et une clé Cloud KMS

Vous pouvez créer un trousseau de clés ou en utiliser un existant. Dans le trousseau de clés, vous pouvez ajouter une clé ou utiliser une clé existante.

  1. Créez un trousseau de clés.

  2. Créez une clé pour un trousseau de clés spécifié.

Récupérer l'ID de ressource d'une clé Cloud KMS

L'ID de ressource d'une clé Cloud KMS est obligatoire lorsque vous activez les CMEK pour un workflow. Dans ce document, consultez Activer les CMEK pour un workflow.

Console

  1. Dans la console Google Cloud, accédez à la page Gestion des clés.

    Accéder à la page "Gestion des clés"

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

  3. Pour la clé dont vous voulez récupérer l'ID de ressource, cliquez sur Plus.

  4. Cliquez sur Copier le nom de la ressource.

    L'ID de ressource de la clé est copié dans votre presse-papiers. Son format est semblable à celui-ci:

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    
  5. Une clé contient zéro ou plusieurs versions de clé. L'ID de ressource d'une version de clé correspond à l'ID de la clé, suivi d'une barre oblique (/) et de l'ID de la version. Pour répertorier toutes les versions d'une clé, procédez comme suit:

    1. Cliquez sur le nom de la clé.
    2. Pour obtenir une version spécifique, cliquez sur Plus.
    3. Cliquez sur Copier le nom de la ressource.

gcloud

  1. Répertoriez toutes les clés d'un trousseau de clés donné :

    gcloud kms keys list --keyring RING_NAME --location LOCATION
    

    Remplacez les éléments suivants :

    • RING_NAME : nom du trousseau de clés
    • LOCATION: région du trousseau de clés

    Le résultat inclut l'ID de ressource de chaque clé. Exemple :

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
  2. Une clé comporte zéro ou plusieurs versions de clé. L'ID de ressource d'une version de clé correspond à l'ID de la clé, suivi d'une barre oblique (/) et de l'ID de la version. Répertoriez toutes les versions d'une clé:

    gcloud kms keys versions list --location LOCATION --keyring RING_NAME --key KEY_NAME
    

    Le résultat inclut l'ID de ressource de chaque version de clé. Exemple :

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
    

Accorder à l'agent de service Workflows l'accès à la clé

Vous devez attribuer le rôle IAM (Identity and Access Management) à l'agent de service Workflows Chiffreur/Déchiffreur de CryptoKeys Cloud KMS pour qu'il puisse accéder à la clé Cloud KMS:

Console

Lorsque vous activez CMEK pour un workflow via la console, vous êtes invité à attribuer le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS au compte de service. Pour en savoir plus, consultez la section Activer les CMEK pour un workflow dans ce document.

gcloud

gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring RING_NAME \
    --location LOCATION \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

Remplacez les éléments suivants :

  • KEY_NAME : nom de la clé. Exemple :my-key
  • RING_NAME : nom du trousseau de clés. Exemple : my-keyring.
  • LOCATION : emplacement de la clé. Exemple : us-central1.
  • PROJECT_NUMBER : numéro de votre projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :

    export PROJECT=$(gcloud info --format='value(config.project)')
    gcloud projects describe ${PROJECT} --format="value(projectNumber)"
    

Tant que l'agent de service dispose du rôle roles/cloudkms.cryptoKeyEncrypterDecrypter, un workflow de votre projet peut chiffrer et déchiffrer ses données à l'aide de la clé CMEK. Si vous révoquez ce rôle, ou si vous désactivez ou détruisez la clé CMEK, ces données ne sont plus accessibles. Dans ce document, consultez la section Désactiver Cloud KMS.

Activer les CMEK pour un workflow

Lors de la création d'un workflow ou de sa mise à jour par la suite, vous pouvez spécifier la clé Cloud KMS que le workflow doit utiliser pour le chiffrement des données.

Console

  1. Dans la console Google Cloud, accédez à la page Workflows.

    Accéder à "Workflows"

  2. Cliquez sur le nom du workflow que vous souhaitez mettre à jour.

    La page Détails des workflows s'affiche.

  3. Cliquez sur Modifier.

  4. Sélectionnez Clé de chiffrement gérée par le client (CMEK).

  5. Dans la liste Sélectionner une clé gérée par le client, sélectionnez ou filtrez une clé Cloud KMS.

  6. Facultatif: Pour saisir manuellement le nom de ressource de la clé, dans la liste Sélectionner une clé gérée par le client, cliquez sur Saisir la clé manuellement, puis saisissez le nom de ressource de la clé au format spécifié.

  7. Si vous y êtes invité, attribuez le rôle cloudkms.cyptoKeyEncrypterDecrypter au compte de service Workflows avec le rôle workflows.serviceAgent.

  8. Cliquez sur Suivant.

  9. Pour enregistrer vos modifications et déployer le workflow mis à jour, cliquez sur Déployer.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --kms-key=KEY \
    --location LOCATION \
    --service-account=SERVICE_ACCOUNT

Remplacez les éléments suivants :

  • WORKFLOW_NAME: Nom de votre workflow
  • SOURCE_FILE: fichier source de votre workflow avec l'extension yaml pour un fichier YAML ou json pour un fichier JSON, par exemple myWorkflow.yaml.
  • KEY: ID de ressource de la clé au format projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. Vous pouvez récupérer l'ID de clé.

  • LOCATION: emplacement du workflow

  • SERVICE_ACCOUNT: compte de service que votre workflow utilisera pour accéder à d'autres services Google Cloud (par exemple, SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com). Nous vous recommandons vivement d'utiliser un compte de service ne bénéficiant que des privilèges les plus faibles nécessaires pour accéder aux ressources requises. Si aucune valeur n'est spécifiée, le compte de service par défaut est utilisé. Pour en savoir plus, consultez Accorder à un workflow l'autorisation d'accéder aux ressources Google Cloud.

Veuillez noter les points suivants :

  • Les révisions et les exécutions de workflow sont chiffrées à l'aide de la clé spécifiée au moment du déploiement. Les ressources précédemment chiffrées à l'aide d'une clé antérieure le restent. Si un workflow est modifié par la suite et qu'une nouvelle clé est spécifiée, cette révision du workflow est chiffrée avec cette nouvelle clé, qui sera utilisée par toutes les exécutions ultérieures.
  • Les révisions et exécutions de workflow non chiffrées par le chiffrement CMEK ne sont pas chiffrées.
  • Si vous désactivez les CMEK pour une révision de workflow, toutes les exécutions ultérieures seront créées sans chiffrement CMEK. Dans ce document, consultez la section Désactiver les CMEK pour un workflow. Les révisions et exécutions de workflow existantes restent chiffrées à l'aide des clés avec lesquelles elles ont été chiffrées précédemment.

Vérifier l'intégration de Cloud KMS

Vous pouvez vérifier l'intégration de la clé CMEK en affichant les métadonnées d'un workflow.

Console

  1. Dans la console Google Cloud, accédez à la page Workflows.

    Accéder à "Workflows"

  2. Cliquez sur le nom du workflow que vous souhaitez vérifier.

    La page Détails des workflows s'affiche.

  3. Cliquez sur l'onglet Détails.

    La valeur Chiffrement affiche l'ID de ressource de la clé Cloud KMS utilisée pour sécuriser le workflow et son exécution.

gcloud

gcloud workflows describe WORKFLOW_NAME \
    --location=LOCATION

La sortie devrait ressembler à ce qui suit :

createTime: '2022-08-10T19:57:58.233177709Z'
cryptoKeyName: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
name: projects/PROJECT_NAME/locations/LOCATION/workflows/WORKFLOW_NAME
revisionCreateTime: '2022-11-18T19:44:04.933633237Z'
revisionId: 000009-8be
serviceAccount: projects/PROJECT_NAME/serviceAccounts/SA_NAME@PROJECT_NAME.iam.gserviceaccount.com
sourceContents:
[...]
state: ACTIVE
updateTime: '2022-11-18T19:44:05.171793128Z'

La valeur cryptokeyName correspond à l'ID de ressource de la clé Cloud KMS utilisée pour sécuriser le workflow et son exécution.

Désactiver les CMEK pour un workflow

Vous pouvez désactiver les CMEK pour un workflow afin qu'il n'utilise plus la clé Cloud KMS associée.

Console

  1. Dans la console Google Cloud, accédez à la page Workflows.

    Accéder à "Workflows"

  2. Cliquez sur le nom du workflow que vous souhaitez mettre à jour.

    La page Détails des workflows s'affiche.

  3. Cliquez sur Modifier.

  4. Pour décocher la case d'option Clé de chiffrement gérée par le client (CMEK), sélectionnez Clé de chiffrement gérée par Google.

  5. Cliquez sur Suivant.

  6. Pour enregistrer vos modifications et déployer le workflow mis à jour, cliquez sur Déployer.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --clear-kms-key \
    --service-account=SERVICE_ACCOUNT

Cette action désactive les CMEK pour la révision de workflow en cours, et toutes les exécutions ultérieures sont créées sans chiffrement CMEK. Les révisions et exécutions de workflows existantes restent chiffrées à l'aide des clés avec lesquelles elles étaient précédemment chiffrées.

Désactiver Cloud KMS

Si vous souhaitez révoquer l'accès aux données de votre workflow ou de vos exécutions de workflow, vous pouvez désactiver Cloud KMS de l'une des façons suivantes:

  • Désactivez ou destroy la version de clé primaire de la clé de chiffrement gérée par le client. La désactivation d'une version de clé CMEK suspend l'accès à toutes les données protégées par cette version. La destruction d'une version de clé est l'équivalent permanent de cette action. Les deux concernent uniquement les workflows et les exécutions de workflows associés à la clé spécifique. Vous ne pouvez pas créer d'exécutions ni afficher les ressources associées à la clé désactivée ou détruite. Toutes les exécutions actives échouent et un message d'erreur correspondant s'affiche.

  • Révoquez le rôle IAM cloudkms.cryptoKeyEncrypterDecrypter de l'agent de service Workflows. Cela affecte tous les workflows du projet Google Cloud compatibles avec le chiffrement CMEK. Vous ne pouvez pas créer de workflows et d'exécutions intégrés à CMEK ni afficher de ressources chiffrées CMEK. Toutes les exécutions actives échouent et un message d'erreur correspondant s'affiche.

Même si aucune de ces opérations ne garantit une révocation immédiate des accès, les modifications de Cloud IAM se propagent généralement plus rapidement. Pour en savoir plus, consultez les pages Cohérence des ressources Cloud KMS et Propagation des modifications des accès.

Dépannage

Vous pouvez rencontrer des erreurs lorsque vous utilisez Cloud KMS avec Workflows. Le tableau suivant décrit différents problèmes et explique comment les résoudre.

Problème Description
L'autorisation cloudkms.cryptoKeyVersions.useToEncrypt est refusée Soit la clé Cloud KMS fournie n'existe pas, soit l'autorisation n'est pas correctement configurée.

Solution :

La version de clé n'est pas activée La version de clé Cloud KMS fournie a été désactivée.

Solution: réactivez la version de clé Cloud KMS.

La région du trousseau de clés ne correspond pas à la ressource à protéger La région du trousseau de clés KMS fournie est différente de celle du workflow.

Solution: utilisez un trousseau de clés Cloud KMS et un workflow protégé provenant de la même région. (Notez qu'ils peuvent se trouver dans des projets différents.) Pour en savoir plus, consultez les pages Emplacements Cloud KMS et Emplacements des workflows.

La limite de quota Cloud KMS est dépassée Vous avez atteint votre limite de quota pour les requêtes Cloud KMS.

Solution: limitez le nombre d'appels Cloud KMS ou augmentez la limite de quota. Pour en savoir plus, consultez la page Quotas Cloud KMS.

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

Si, pour une raison quelconque, Cloud KMS n'est pas disponible, Workflows ne pourra peut-être pas récupérer l'état de votre clé à partir de Cloud KMS.

Si l'état de la clé n'est pas disponible, le workflow ou son exécution renvoient une valeur state: UNAVAILABLE et les détails associés dans le champ stateError.

Si l'état de la clé devient indisponible lors de l'exécution d'un workflow (par exemple, une autorisation est révoquée lors d'un rappel), une erreur d'exécution se produit et renvoie une valeur state: FAILED, ainsi que les informations associées dans le champ error.

Tarification

Cette intégration n'entraîne aucuns frais supplémentaires au-delà des opérations de clés facturées dans votre projet Google Cloud. Pour obtenir des informations tarifaires actuelles, consultez la page Tarifs de Cloud KMS.