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

Par défaut, Cloud Tasks chiffre vos données stockées au repos. Google Cloud 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 Cloud Tasks. Votre tâche et les données associées (corps et en-têtes) au repos sont protégées par 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 qu'elle devient ensuite 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 clés 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 à la fonctionnalité CMEK n'est pas compatible avec les éléments suivants:

  • google-gax versions antérieures à 4.0.0:le package NPM google-gax pour Node.js est partiellement compatible avec les versions antérieures à 4.0.0. Pour ces versions, les clés CMEK ne sont compatibles que dans la région us-central1. Même si vous n'avez des tâches que 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 intégré à App Engine ne sont pas protégées par la clé CMEK, même si elles se trouvent dans une région pour laquelle elle est activée. 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 elles ne sont pas protégées par CMEK. Les files d'attente de retrait ne sont pas 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 tasks queues describe QUEUE_NAME
    

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

    Si le type répertorié est pull, votre file d'attente est une file d'attente de retrait. Si le type listé est push, cette limitation n'affecte pas les tâches de votre 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 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é dans 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 le résultat 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 CMEK est activé, vous ne pouvez pas définir task_ttl sur une valeur supérieure à 60 jours. De plus, 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 clés CMEK. Si vous devez exécuter une commande dans un autre projet, tel que le projet contenant vos ressources Cloud KMS, cette page inclura l'option --project dans la commande gcloud CLI et vous indiquera 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 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.

  3. Obtenez des rôles Identity and Access Management.

    Pour obtenir les autorisations dont vous avez besoin 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é en cours d'utilisation : 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 la clé et le trousseau de clés Cloud KMS.

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

    • Le trousseau de clés doit se trouver dans la région contenant les ressources Cloud Tasks que vous souhaitez protéger. Pour en savoir plus, consultez les pages Emplacements Cloud KMS et Emplacements Cloud Tasks.

    • Le trousseau de clés et les ressources Cloud Tasks protégées par une clé CMEK peuvent se trouver dans le même projet. Toutefois, pour limiter l'accès à vos clés Cloud KMS, envisagez de configurer Cloud KMS dans un projet distinct.

  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 l'ID de ressource d'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 des 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 IAM (Identity and Access Management) 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 la section 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.
  • 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 :

    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 la région où les CMEK sont activées 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 pas accessibles. 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 CMEK est activé pour une région donnée dans Cloud Tasks, toutes les tâches de cette région sont protégées par 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 la 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 la section 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

La fonctionnalité CMEK ne protège pas les tâches créées avant son activation pour Cloud Tasks. Pour protéger les tâches préexistantes à l'aide de clés 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 (envoi 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.

    • Prévention des doublons:pour éviter les exécutions en double ("au moins une fois), vous pouvez d'abord supprimer l'ancienne tâche, puis la recréer. Cela peut entraîner des pertes d'exécutions 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 dans le passé:

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

API

Pour désactiver les CMEK, appelez la méthode Update CMEK config et effacez 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 la 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 cela, vous pouvez procéder de trois façons:

  • Désactivez la clé de chiffrement gérée par le client. Lorsque la clé CMEK est désactivée, 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. Si vous le souhaitez, vous pourrez réactiver la clé ultérieurement. 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é qui a été détruite. Si une tâche a été créée alors que la fonctionnalité CMEK était activée et que la clé est détruite ultérieurement, 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, l'application de la modification peut prendre jusqu'à cinq minutes.

  • Révoquez le rôle IAM cloudkms.cryptoKeyEncrypterDecrypter de l'agent de service Cloud Tasks. Cela affecte toutes les tâches du projet Google Cloud compatibles avec le chiffrement à l'aide de clés 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 la 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 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.