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

Les clés de chiffrement gérées par le client (CMEK) pour Pub/Sub vous offrent une couche de contrôle supplémentaire sur les données de message stockées au repos. Les sujets peuvent être configurés pour utiliser une ressource CryptoKey de Cloud Key Management Service pour le chiffrement des messages.

  • Par défaut, les clés gérées par Google sont utilisées.

  • CMEK vous permet de gérer l'accès aux clés à l'aide de Cloud KMS. Pour empêcher Pub/Sub de déchiffrer les messages, désactivez cette clé.

Pub/Sub utilise le modèle de chiffrement encapsulé. Dans cette approche, les messages ne sont pas chiffrés par Cloud KMS. À la place, Cloud KMS sert à chiffrer les clés de chiffrement des données (DEK) créées par Pub/Sub pour chaque sujet. Ces DEK ne sont stockées que sous forme chiffrée ou encapsulée par Pub/Sub. Avant de stocker une DEK, le service l'envoie à Cloud KMS pour qu'elle soit chiffré à l'aide de la clé de chiffrement de clé (KEK) spécifiée sur le sujet. Une nouvelle DEK est générée pour chaque sujet environ toutes les six heures.

Avant que Pub/Sub ne publie les messages dans un abonnement, il les chiffre à l'aide de la DEK la plus récente ayant été générée pour le sujet. Pub/Sub déchiffre les messages peu de temps avant qu'ils ne soient distribués aux abonnés.

Pub/Sub utilise un compte de service Google Cloud pour accéder à Cloud KMS. Le compte de service est géré en interne par Pub/Sub pour chaque projet. Il ne s'affiche pas dans votre liste de comptes de service. Le compte de service se présente sous la forme suivante : service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com. Pour que la fonctionnalité CMEK s'exécute correctement, vous devez attribuer à ce compte le rôle Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS dans Cloud Identity and Access Management.

Configurer et désactiver CMEK

Configurer les sujets

Vous pouvez configurer CMEK à l'aide de Google Cloud Console ou de l'outil de ligne de commande gcloud. En ce qui concerne les prérequis, vous devez :

Pour savoir comment effectuer ces tâches, consultez le guide de démarrage rapide de Cloud KMS.

Étant donné que les ressources Pub/Sub sont globales, nous vous recommandons vivement d'utiliser des clés Cloud KMS globales pour configurer les sujets activés par CMEK. En fonction de l'emplacement des éditeurs et des abonnés d'un sujet, l'utilisation d'une clé Cloud KMS régionale peut entraîner des dépendances inutiles pour les liens réseau interrégionaux.

à l'aide de Cloud Console ;

Vous pouvez vous servir de la boîte de dialogue de création de sujet de Cloud Console pour ajouter vos clés de chiffrement. Consultez le guide de démarrage rapide de Cloud Console pour savoir comment accéder à cette boîte de dialogue.

Si vous ne voyez pas le menu déroulant

Cloud Console :

  • simplifie la configuration Cloud IAM tout en garantissant que le compte de service Pub/Sub dispose des autorisations appropriées ;

  • vous permet de configurer le chiffrement dans la boîte de dialogue de création du sujet.

Utiliser la ligne de commande

Cet exemple montre comment configurer CMEK sur un sujet à l'aide de l'outil de ligne de commande gcloud :


   # Grant the Pub/Sub service account the Cloud KMS CryptoKey
   # Encrypter/Decrypter role. This service account is different
   # from the service account you are using to authorize requests to GCP.

   $ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=\
        "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
        --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

   # Create a topic that uses customer-managed encryption, using the
   # --topic-encryption-key argument to specify the Cloud KMS key to use
   # for protecting message data.

   $ KEY_ID=projects/${PROJECT_ID}/locations/global/keyRings/my-key-ring/cryptoKeys/my-crypto-key
   $ alias pubsub="gcloud pubsub"
   $ pubsub topics create $TOPIC_NAME --topic-encryption-key=$KEY_ID

   # Confirm that the topic is configured for customer-managed encryption,
   # indicated by the presence of the kmsKeyName specified on the topic.

   $ pubsub topics describe $TOPIC_NAME
     name: $TOPIC_NAME
     kmsKeyName: $KEY_ID
     

Désactiver et réactiver les clés

Vous pouvez empêcher Pub/Sub de déchiffrer les données de message de deux manières différentes :

  • Recommandé : Désactivez la clé Cloud KMS que vous avez associée au sujet à l'aide de Pub/Sub. Cette approche n'affecte que les abonnements et les sujets Pub/Sub qui sont associés à cette clé spécifique.

  • Révoquez le rôle Chiffreur/Déchiffreur de clés cryptographiques Pub/Sub du compte de service Pub/Sub (service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) à l'aide de Cloud IAM. Cette approche affecte tous les sujets Pub/Sub du projet, ainsi que les abonnements contenant des messages chiffrés à l'aide de CMEK.

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 la section Cohérence des ressources Cloud KMS et les questions fréquentes sur Cloud IAM.

Lorsque Pub/Sub ne peut pas accéder à la clé, la publication et la distribution des messages avec la fonction "streamingPull" ou "pull" échouent en renvoyant les erreurs FAILED_PRECONDITION. La distribution des messages vers les points de terminaison push s'arrêtera. Pour reprendre la diffusion et la publication, rétablissez l'accès à la clé.

Une fois la clé accessible à Pub/Sub, la publication est disponible sous 12 heures et la distribution des messages reprend dans les deux heures.

Pub/Sub tente de faire la distinction entre l'indisponibilité de la clé due à une action intentionnelle (telle que la désactivation de celle-ci) et l'indisponibilité étendue du service Cloud KMS. Bien qu'une panne de Cloud KMS ne risque pas d'interrompre la publication et la livraison, l'indisponibilité provoque le même effet qu'une révocation de clé.

Journaux d'audit

Cloud KMS génère des journaux d'audit lorsque les clés sont activées, désactivées ou utilisées par Pub/Sub pour le chiffrement et le déchiffrement des messages. Cela s'avère utile pour résoudre les problèmes de disponibilité de la publication ou de la diffusion.

Les clés Cloud KMS sont associées aux journaux d'audit pour les ressources du sujet Pub/Sub. Pub/Sub n'inclut aucune autre information associée à Cloud KMS.

Tarifs

Pour les requêtes Pub/Sub suivantes, l'utilisation de CMEK entraîne des frais pour l'accès au service Cloud KMS en fonction de la tarification Pub/Sub :

  • Pour chaque sujet utilisant CMEK, une nouvelle DEK est chiffrée et stockée toutes les six heures.

  • La clé permet de déchiffrer les DEK toutes les six minutes. Le déchiffrement se produit à trois reprises : une fois pour chaque zone de la région dans laquelle le service Pub/Sub est exécuté.

Prenons l'exemple d'un sujet comportant les éléments suivants :

  • Au moins un abonnement

  • Des clients éditeurs et abonnés dans la même région

Le nombre d'opérations de chiffrement Cloud KMS peut être estimé comme suit :

1 key access for ENCRYPT * (30 days / month * 24 hours / day) / 6 hours
 + 3 key accesses for DECRYPT
   * (30 days / month * 24 hours / day * 60 minutes / hour ) / 5 minutes
  = 26,000 Cloud KMS key access events.
En tenant compte d'une grille tarifaire dans laquelle les opérations de chiffrement coûtent 0,03 $ pour 10 000 opérations, l'utilisation ci-dessus coûterait environ 0,08 $. Pour obtenir les informations de tarification les plus récentes, reportez-vous à la section Tarifs Cloud KMS.

En pratique, les clés peuvent être récupérées plus ou moins fréquemment en fonction des modèles d'accès. Ces chiffres ne sont que des estimations.

Surveillance et dépannage

Les problèmes d'accès aux clés peuvent avoir les conséquences suivantes :

  • Retards dans la distribution des messages

  • Erreurs de publication

Surveillez les erreurs de publication et de demande d'extraction à l'aide des métriques suivantes, regroupées par response_class et response_code :

  • topic/send_request_count
  • subscription/pull_request_count
  • subscription/streaming_pull_response_count

Le taux d'erreur de la réponse StreamingPull est de 100 %. Cela indique que le flux est terminé, et non que les requêtes échouent. Pour surveiller StreamingPull, recherchez le code de réponse FAILED_PRECONDITION.

Pour les abonnements push, il n'existe aucun moyen de détecter directement les problèmes de distribution spécifiques à CMEK. Effectuez plutôt les opérations suivantes :

  • Surveillez la taille et l'âge des tâches en attente au sein d'un abonnement push à l'aide de subscription/num_unacked_messages.

  • Surveillez subscription/oldest_unacked_message_age à la recherche de pics inhabituels.

  • Servez-vous des erreurs de publication et des journaux d'audit CMEK pour identifier les problèmes.