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

Par défaut, Cloud Tasks chiffre le contenu client au repos. Cloud Tasks 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 Cloud Tasks. 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 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 Cloud Tasks 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).

Éléments protégés par CMEK

Lorsque vous activez le chiffrement CMEK dans Cloud Tasks, vous l'activez pour une région. Lorsqu'elle 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é lorsqu'ils sont au repos. Si une tâche a été créée lorsque CMEK était activé et que la clé est ensuite désactivée (en la désactivant ou en la supprimant, ou en désactivant 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 CMEK dans les cas suivants:

  • La tâche a été créée avant l'activation de 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 limitation de compatibilité

Limites de compatibilité

L'intégration de Cloud Tasks avec CMEK n'est pas compatible avec les éléments suivants:

  • Versions google-gax antérieures à 4.0.0:le package google-gax NPM pour Node.js est compatible avec les versions antérieures à 4.0.0. Pour ces versions, le chiffrement CMEK n'est compatible 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 Taskqueue intégré à App Engine:les tâches créées à l'aide du service Taskqueue intégré à App Engine ne sont pas protégées par CMEK, même si elles se trouvent dans une région pour laquelle il est activé. L'activation de CMEK n'empêche pas la création ni l'exécution (par exemple, l'exécution ou la suppression) de ces tâches.

  • Files d'attente pull:si vous activez la CMEK, vous pouvez créer et exécuter des tâches sur des files d'attente pull, mais ces tâches ne sont pas protégées par la CMEK. Les files d'attente de retrait sont peu courantes. Pour vérifier si votre file d'attente est une file d'attente de pull, 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 type est pull, votre file d'attente est une file d'attente pull. Si la valeur type indiquée est push, cette limite n'affecte pas les tâches de votre file d'attente.

  • Routage au niveau de la file d'attente:lorsque CMEK est activé, vous ne pouvez pas appliquer le routage au niveau de la file d'attente. Si le routage au niveau de la file d'attente est activé, vous ne pouvez pas activer 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é et n'est pas compatible avec 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.

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

Avant de commencer

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

  1. Activez les API.

    Console

    1. Enable the Cloud KMS and Cloud Tasks APIs.

      Enable the APIs

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

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

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

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

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

    Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

    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 disposez déjà d'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 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érez l'ID d'une clé Cloud KMS.

L'ID de ressource d'une clé Cloud KMS est obligatoire lorsque vous activez 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 des 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 pour la clé est copié dans votre presse-papiers. Son format est semblable à ce qui suit:

    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

    La sortie inclut l'ID de clé pour 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 au agent de service Cloud Tasks le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS Identity and Access Management (IAM) pour qu'il puisse accéder à la clé Cloud KMS:

Console

  1. Dans la console Google Cloud , accédez à la page IAM (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'ouvre, cliquez sur Ajouter un autre rôle.

  6. Recherchez et sélectionnez le rôle Chiffreur/Déchiffreur de clés cryptographiques 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 procéder, consultez la section Récupérer l'ID d'une clé Cloud KMS. N'incluez pas de numéro de version de clé. L'ajout 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 dans votre région compatible avec CMEK 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 CMEK pour Cloud Tasks.

Activer CMEK pour Cloud Tasks

Vous pouvez activer CMEK à l'aide de l'API ou de la gcloud CLI. Pour Cloud Tasks, CMEK est activé par région. Il n'est pas activé par les tâches individuelles. Lorsque le chiffrement 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.

gcloud

Pour activer 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 procéder, consultez la section Récupérer l'ID d'une clé Cloud KMS. N'incluez pas de numéro de version de clé. Si vous incluez un numéro de version de clé, cette commande risque d'échouer.

REST

Vous pouvez activer 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:

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

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

  1. Activez CMEK (voir la section sur l'activation de CMEK).
  2. Remplacez les tâches préexistantes. Pour ce faire, vous avez deux options principales. Le meilleur moyen de procéder dépend de ce qui est important pour vous:

    • Exécution continue:pour assurer une exécution continue (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 tâche.

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

Identifier la clé utilisée

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

gcloud tasks cmek-config describe --location=LOCATION

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

Si aucune sortie n'est générée, CMEK n'est pas configuré pour l'emplacement spécifié.

Appliquer une règle d'administration CMEK

Cloud Tasks est intégré à deux contraintes de règle d'administration pour garantir l'utilisation des 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 ressources Cloud Tasks 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 tâches existantes. Ces ressources restent accessibles sans CMEK et, le cas échéant, sont toujours chiffrées avec des clés existantes. Si vous souhaitez appliquer la règle aux tâches existantes, vous devez activer CMEK pour les tâches pré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 toutes les nouvelles ressources Cloud Tasks

Vous pouvez utiliser la contrainte constraints/gcp.restrictNonCmekServices pour exiger que les clés CMEK soient utilisées pour protéger toutes les nouvelles ressources Cloud Tasks 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 nouvelles ressources du projet. Toutes les ressources existantes 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 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:cloudtasks.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:cloudtasks.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 une file d'attente dans le projet. Le processus échoue, sauf si vous spécifiez une clé Cloud KMS.

Restreindre les clés Cloud KMS pour un projet Cloud Tasks

La contrainte constraints/gcp.restrictCmekCryptoKeyProjects vous permet de restreindre les clés Cloud KMS que vous pouvez utiliser pour protéger une ressource dans un projet Cloud Tasks.

Par exemple, vous pouvez spécifier une règle semblable à la suivante: "Pour toutes les ressources Cloud Tasks 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 une file d'attente à l'aide d'une clé Cloud KMS d'un autre projet. Le processus échoue.

Désactiver CMEK pour Cloud Tasks

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

La désactivation de la CMEK affecte les tâches créées à l'avenir, et non celles créées par le passé:

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

gcloud

Pour désactiver CMEK à l'aide de la Google Cloud CLI, utilisez 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.

REST

Vous pouvez désactiver 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:

Supprimer Cloud KMS

Si vous souhaitez révoquer l'accès aux données de vos tâches, vous pouvez supprimer Cloud KMS. Vous pouvez le faire de trois manières:

  • Désactivez la clé de chiffrement gérée par le client. La désactivation d'une clé CMEK entraîne la suspension de l'accès à toutes les données protégées par cette version de clé tant qu'elle est désactivée. Vous ne pouvez pas accéder ni créer de tâches avec une clé désactivée. Toute tentative d'exécution d'une tâche protégée par CMEK lorsque la clé est désactivée entraîne une erreur UNKNOWN dans Cloud Logging. Vous pouvez réactiver la clé plus tard si vous le souhaitez. Lorsque vous désactivez une clé de chiffrement gérée par le client, la prise en compte de la modification peut prendre jusqu'à cinq minutes.

  • Supprimez la clé de chiffrement gérée par le client. La destruction d'une clé CMEK entraîne la suspension définitive de l'accès à toutes les données protégées par cette version de clé. Vous ne pouvez pas accéder ni créer de tâches avec une clé qui a été détruite. Si une tâche a été créée lorsque CMEK était activé 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 prise en compte 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 projetGoogle Cloud qui prennent en charge le chiffrement à l'aide de CMEK. Vous ne pouvez pas créer de tâches intégrées à CMEK ni afficher de ressources chiffrées avec CMEK.

Même si aucune de ces opérations ne garantit une révocation immédiate des accès, les modifications de l'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 d'accès.

Tarifs

Cette intégration n'entraîne pas de coûts supplémentaires, outre les frais liés aux opérations de clés qui sont facturés dans le cadre de votre projet Google Cloud . Pour en savoir plus sur les tarifs actuels, consultez la page Tarifs de Cloud KMS.