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

Par défaut, Cloud Tasks chiffre les données stockées au repos. Google Cloud gère ce chiffrement par défaut sans aucune action supplémentaire 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 Cloud Tasks. Votre tâche et les données associées (corps et en-tête) au repos 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 activez les CMEK dans Cloud Tasks, vous les activez pour une région. Lorsque cette option est activée, le corps et l'en-tête des tâches créées dans cette région sont protégés par votre clé au repos. Si une tâche a été créée alors que la CMEK était activée et que la clé est ensuite rendue inactive (en désactivant ou en supprimant la clé, ou en désactivant la CMEK), la tâche est chiffrée avec votre clé, mais ne peut pas être exécutée.

Les tâches ne sont pas protégées par des CMEK dans les cas suivants:

  • La tâche a été créée avant l'activation des CMEK
  • La tâche ne se trouve pas dans la région pour laquelle CMEK est activé
  • La tâche est affectée par une limite de compatibilité

Limites de compatibilité

L'intégration de Cloud Tasks à CMEK n'accepte pas les éléments suivants:

  • Versions google-gax antérieures à 4.0.0:le package NPM google-gax pour Node.js est compatible de façon limitée avec les versions antérieures à 4.0.0. Pour ces versions, les clés CMEK ne sont compatibles qu'avec la région us-central1. Même si vous n'avez que des tâches dans cette région, nous vous recommandons de passer à la version 4.0.0 ou ultérieure.

  • Service de file d'attente de tâches intégré à App Engine:les tâches créées à l'aide du service de file d'attente de tâches intégré à App Engine ne sont pas protégées par les clés CMEK, même si elles se trouvent dans une région pour laquelle elles sont activées. L'activation de CMEK n'empêche pas la création ni l'opération (par exemple, l'exécution ou la suppression) de ces tâches.

  • Files d'attente de retrait:si vous activez les CMEK, vous pouvez créer et exécuter des tâches dans des files d'attente de retrait, mais ces tâches ne sont pas protégées par les CMEK. Les files d'attente d'extraction sont peu courantes. Pour vérifier si votre file d'attente est une file d'attente de retrait, exécutez la commande gcloud CLI suivante dans votre terminal:

    gcloud beta tasks queues describe QUEUE_NAME
    

    Remplacez QUEUE_NAME par le nom de votre file d'attente.

    Si le type indiqué est pull, votre file d'attente est une file d'attente de retrait. Si la valeur de type indiquée est push, cette limitation n'affecte pas les tâches de la file d'attente.

  • Routage au niveau de la file d'attente:lorsque le chiffrement CMEK est activé, vous ne pouvez pas appliquer le routage au niveau de la file d'attente. De plus, si le routage au niveau de la file d'attente est activé, vous ne pouvez pas activer les CMEK. Pour vérifier si le routage au niveau de la file d'attente est activé, procédez comme suit:

    1. Exécutez la commande gcloud CLI suivante dans votre terminal:

      gcloud beta tasks queues describe QUEUE_NAME
      Remplacez QUEUE_NAME par le nom de votre file d'attente.

    2. Dans le résultat, recherchez le champ httpTarget et vérifiez si uriOverride a été défini. Si un host est spécifié, le routage au niveau de la file d'attente est activé sur votre file d'attente et n'est pas compatible avec les CMEK. Pour supprimer le routage au niveau de la file d'attente, consultez la section Mettre à jour ou supprimer le routage au niveau de la file d'attente. Si la sortie n'affiche pas uriOverride avec un host spécifié, votre file d'attente n'utilise pas le routage au niveau de la file d'attente.

  • Valeur TTL de la tâche:lorsque la CMEK est activée, vous ne pouvez pas définir task_ttl sur une valeur supérieure à 60 jours. Si la valeur task_ttl est supérieure à 60 jours, vous ne pouvez pas activer les CMEK.

Avant de commencer

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

  1. Activez les API.

    Console

    1. Activer les API Cloud KMS and Cloud Tasks.

      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. Définissez votre projet par défaut. Il doit s'agir du projet contenant les ressources Cloud Tasks que vous souhaitez protéger avec des CMEK. Si vous devez exécuter une commande dans un autre projet, tel que celui contenant vos ressources Cloud KMS, cette page inclut l'option --project dans la commande de gcloud CLI et vous indique le projet à spécifier.

      gcloud config set project PROJECT_ID
      

      Remplacez PROJECT_ID par l'ID du projet contenant vos ressources Cloud Tasks.

    3. Mettez à jour les composants gcloud.

      gcloud components update
      

    4. Activez les API Cloud KMS et Cloud Tasks pour le projet qui stockera vos clés de chiffrement.

      gcloud services enable cloudkms.googleapis.com cloudtasks.googleapis.com 
      --project=PROJECT_ID

      Remplacez PROJECT_ID par l'ID du projet qui stockera vos clés de chiffrement. Il peut s'agir du même projet que vos ressources Cloud Tasks. Toutefois, pour limiter l'accès à vos clés Cloud KMS, envisagez de configurer Cloud KMS dans un projet distinct.

  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 Cloud Tasks 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 choisi les autorisations et les rôles spécifiques à la journalisation qui s'appliquent à votre cas d'utilisation. Pour en savoir plus, consultez la section Informations sur les journaux d'audit Cloud KMS.

  3. Obtenir des rôles Identity and Access Management

    Pour obtenir les autorisations nécessaires pour utiliser CMEK avec Cloud Tasks, demandez à votre administrateur de vous attribuer les rôles IAM suivants sur votre projet:

    • Activez ou désactivez les CMEK : roles/cloudtasks.admin
    • Affichez la clé utilisée : roles/cloudtasks.viewer

    Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

    Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Créer un trousseau et une clé Cloud KMS

Si vous possédez déjà un trousseau de clés dans la même région que vos ressources Cloud Tasks et que vous souhaitez utiliser cette clé et ce trousseau, ignorez cette section. Si ce n'est pas le cas, suivez ces instructions pour créer votre clé et votre trousseau de clés Cloud KMS.

  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 d'une clé Cloud KMS

Vous devez indiquer un ID de ressource pour une clé Cloud KMS lorsque vous activez les CMEK pour Cloud Tasks.

Console

  1. Dans la console Google Cloud, accédez à la page Gestion des clés, puis sélectionnez l'onglet Inventaire de clés.

    Accéder à l'inventaire de clés

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

  3. 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
    

gcloud

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

    gcloud kms keys list --keyring=KEY_RING --location=LOCATION --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • KEY_RING : nom du trousseau de clés
    • LOCATION: région du trousseau de clés
    • PROJECT_ID: ID du projet contenant le trousseau de clés

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

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    

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

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

Console

  1. Dans la console Google Cloud, accédez à la page Identity and Access Management.

    Accéder à IAM

  2. Cochez la case Inclure les attributions de rôles fournies par Google.

  3. Recherchez le compte de service Cloud Tasks en saisissant cloudtasks.iam.gserviceaccount.com dans le filtre.

    Le compte de service Cloud Tasks se présente sous la forme service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com.

  4. Cliquez sur l'icône en forme de crayon Modifier le compte principal.

  5. Dans le panneau qui s'affiche, cliquez sur Ajouter un autre rôle.

  6. Recherchez et sélectionnez le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS.

  7. Cliquez sur Enregistrer.

gcloud

gcloud kms keys add-iam-policy-binding KEY_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Remplacez les éléments suivants :

  • KEY_ID: ID de ressource complet de votre clé Pour savoir comment trouver cette clé, consultez Récupérer l'ID d'une clé Cloud KMS. N'incluez pas le numéro de version de clé. L'inclusion d'un numéro de version de clé peut entraîner l'échec de cette commande.
  • PROJECT_NUMBER: numéro de votre projet Google Cloud Vous pouvez trouver le numéro de votre projet sur la page Tableau de bord de la console Google Cloud ou en exécutant la commande suivante :

    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, une tâche de votre région où les CMEK sont activés 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 sont inaccessibles. Dans ce document, consultez la section Désactiver Cloud KMS.

Activer CMEK pour Cloud Tasks

Vous pouvez activer les CMEK à l'aide de l'API ou de gcloud CLI. Pour Cloud Tasks, les clés CMEK sont activées par région. Il n'est pas activé par des tâches individuelles. Lorsque les clés CMEK sont activées pour une région donnée dans Cloud Tasks, toutes les tâches de cette région sont protégées par des CMEK.

API

Vous pouvez activer les CMEK en appelant la méthode Update CMEK config. L'API Cloud Tasks fournit la méthode Update CMEK config dans les API REST et RPC:

gcloud

Pour activer les CMEK à l'aide de Google Cloud CLI, exécutez la commande suivante:

gcloud tasks cmek-config update --location=LOCATION --kms-key-name=KEY_ID

Remplacez les éléments suivants :

  • LOCATION: région de votre ressource Cloud Tasks
  • KEY_ID: ID de ressource complet de votre clé Pour savoir comment trouver cette clé, consultez Récupérer l'ID d'une clé Cloud KMS. N'incluez pas de numéro de version de clé. L'inclusion d'un numéro de version de clé peut entraîner l'échec de cette commande.

Pour vérifier que la clé a bien été activée, suivez les instructions de la section Identifier la clé utilisée.

Activer pour les tâches préexistantes

Les CMEK ne protègent pas les tâches créées avant l'activation de CMEK pour Cloud Tasks. Pour protéger des tâches préexistantes avec des CMEK:

  1. Activez les CMEK (consultez la section sur l'activation des CMEK).
  2. Remplacez les tâches préexistantes. Pour ce faire, vous disposez de deux méthodes principales. La meilleure façon de procéder dépend de ce qui est important pour vous:

    • Exécution continue:pour garantir une exécution continue (distribution au moins une fois), vous pouvez d'abord recréer la tâche, puis supprimer la tâche préexistante après avoir vérifié que la nouvelle tâche fonctionne comme prévu. Cela peut entraîner des exécutions en double, car l'ancienne et la nouvelle tâche peuvent s'exécuter avant que vous ne supprimiez l'ancienne.

    • Protection contre les doublons:pour éviter les exécutions en double (distribution au maximum une fois), vous pouvez d'abord supprimer l'ancienne tâche, puis la recréer. Cela peut entraîner des exécutions perdues en raison du temps écoulé entre la suppression de l'ancienne tâche et sa création.

Identifier la clé utilisée

Pour identifier la clé CMEK utilisée pour vos ressources Cloud Tasks, exécutez la commande gcloud CLI suivante dans votre terminal:

gcloud tasks cmek-config describe --location=LOCATION

Remplacez LOCATION par la région de vos ressources Cloud Tasks.

Si aucun résultat ne s'affiche, cela signifie que la clé CMEK n'est pas configurée pour l'emplacement spécifié.

Désactiver les CMEK pour Cloud Tasks

Vous pouvez désactiver les CMEK à l'aide de l'API ou de gcloud CLI. Pour Cloud Tasks, les clés CMEK sont désactivées par région. Il n'est pas désactivé par des tâches individuelles. Lorsque les CMEK sont désactivées pour une région donnée dans Cloud Tasks, les tâches de cette région ne sont pas protégées par les CMEK.

La désactivation des CMEK affecte les tâches créées à une date ultérieure, et non celles créées par le passé:

  • Nouvelles tâches:ne sont pas protégées par les CMEK.
  • Tâches préexistantes:les tâches créées lorsque la CMEK était activée restent chiffrées et continuent de s'exécuter tant que la clé Cloud KMS reste active.

API

Vous pouvez désactiver les CMEK en appelant la méthode Update CMEK config et en effaçant la clé Cloud KMS en la remplaçant par une chaîne vide. L'API Cloud Tasks fournit la méthode Update CMEK config dans les API REST et RPC:

gcloud

Pour désactiver les CMEK à l'aide de Google Cloud CLI, exécutez la commande suivante:

gcloud tasks cmek-config update --location=LOCATION --clear-kms-key

Remplacez les éléments suivants :

  • LOCATION: région de votre ressource Cloud Tasks

Supprimer Cloud KMS

Si vous souhaitez révoquer l'accès aux données de vos tâches, vous pouvez supprimer Cloud KMS. Pour ce faire, vous disposez de trois options:

  • Désactivez la clé de chiffrement gérée par le client. Lorsque vous désactivez une clé CMEK, l'accès à toutes les données protégées par cette version de clé est suspendu. Vous ne pouvez pas accéder à des tâches ni en créer avec une clé désactivée. Toute tentative d'exécution d'une tâche protégée par une clé CMEK alors que la clé est désactivée génère une erreur UNKNOWN dans Cloud Logging. Vous pourrez réactiver la clé ultérieurement si vous le souhaitez. Lorsque vous désactivez une clé de chiffrement gérée par le client, l'application de la modification peut prendre jusqu'à cinq minutes.

  • Détruisez la clé de chiffrement gérée par le client. La destruction d'une clé CMEK suspend définitivement l'accès à toutes les données protégées par cette version de clé. Vous ne pouvez pas accéder à des tâches ni en créer avec une clé détruite. Si une tâche a été créée alors que la CMEK était activée et que la clé est détruite par la suite, la tâche est chiffrée avec votre clé, mais ne peut pas être exécutée. Si la tâche tente de s'exécuter, Cloud Logging consigne une erreur UNKNOWN. Lorsque vous détruisez une clé de chiffrement gérée par le client, la modification peut prendre jusqu'à cinq minutes.

  • Révoquez le rôle IAM cloudkms.cryptoKeyEncrypterDecrypterde l'agent de service Cloud Tasks. Cela concerne toutes les tâches du projet Google Cloud compatibles avec le chiffrement à l'aide de CMEK. Vous ne pouvez pas créer de tâches intégrées à CMEK ni afficher les ressources chiffrées par CMEK.

Bien qu'aucune de ces opérations ne garantit une révocation instantanée des accès, les modifications IAM prennent généralement effet plus rapidement. Pour en savoir plus, consultez les pages Cohérence des ressources Cloud KMS et Propagation des modifications des accès.

Tarification

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