Configurer le chiffrement des messages

Par défaut, Pub/Sub chiffre les messages à l'aide de clés de chiffrement fournies par Google Cloud. Aucune installation ou configuration n'est requise, et il n'est pas nécessaire de modifier le mode d'accès au service. Chaque message est chiffré aux états et aux couches suivants:

  • Au repos

    • Couche matérielle
    • Couche d'infrastructure
    • Couche d'application
  • En transit

Au niveau de la couche d'application, Pub/Sub chiffre individuellement les messages entrants dès leur réception. Cette implémentation ajoute les fonctionnalités suivantes :

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

Pub/Sub utilise le modèle de chiffrement encapsulé avec CMEK. 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 les sujets

Vous pouvez configurer les CMEK à l'aide de la console Google Cloud 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.

Utiliser la console Google Cloud

Vous pouvez utiliser la boîte de dialogue de création de sujet de la console Google Cloud pour ajouter vos clés de chiffrement. Consultez le guide de démarrage rapide de la console Google Cloud pour découvrir comment accéder à cette boîte de dialogue.

La console Google Cloud :

  • 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 utiliser la Google Cloud CLI pour configurer CMEK sur un sujet:


   # 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 Google Cloud.

   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
     

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.

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

La publication et la distribution des messages peuvent échouer avec des erreurs FAILED_PRECONDITION pour plusieurs raisons.

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.

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 les pages Cohérence des ressources Cloud KMS et Propagation des modifications des accès.

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 distribution et la publication, rétablissez l'accès à la clé Cloud KMS.

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

Bien que des interruptions intermittentes de moins d'une minute pour Cloud KMS soient peu susceptibles d'interrompre significativement la publication et la livraison, l'indisponibilité étendue de Cloud KMS a le même effet que la révocation de clés.