Configurer les notifications sur un secret

Cette page explique comment configurer et utiliser les notifications d'événements pour vos secrets dans Secret Manager.

Présentation

Secret Manager s'intègre à Pub/Sub pour fournir des notifications d'événements en cas de modification des secrets et des versions de secrets. Vous pouvez utiliser ces notifications pour lancer des workflows, comme le redémarrage d'une application lorsqu'une nouvelle version de secret est ajoutée ou l'envoi d'une notification aux ingénieurs chargés de la sécurité lorsqu'un secret est supprimé. Pour en savoir plus sur l'utilisation de ces notifications pour démarrer des workflows, consultez la documentation Pub/Sub.

Fonctionnement des notifications d'événements dans Secret Manager

Les secrets peuvent être configurés avec une liste de 10 sujets Pub/Sub au maximum. Chaque fois qu'une opération modifiant le secret ou l'une de ses versions est effectuée, Secret Manager publie automatiquement un message dans chacun des sujets Pub/Sub de ce secret. Les appels Get, List et Access n'entraînent pas de publication de messages.

Les messages Pub/Sub comportent un ensemble de paires clé/valeur d'attributs contenant des métadonnées sur l'événement, ainsi qu'un champ data contenant une sérialisation JSON complète de la ressource Secret ou SecretVersion qui a été créée ou modifiée. Il s'agit d'une chaîne au format UTF-8 qui représente la ressource Secret ou SecretVersion au format spécifié par l'API publique de Secret Manager, encodée au format JSON comme spécifié dans Mappage JSON proto3.

Types d'événement

La liste suivante répertorie les types d'événements compatibles avec Secret Manager.

Type d'événement Description
SECRET_CREATE Envoyé lorsqu'un secret a bien été créé.
SECRET_UPDATE Envoyé lorsqu'un nouveau secret a bien été mis à jour.
SECRET_DELETE Envoyé lorsqu'un secret est supprimé, en raison d'une requête initiée par l'utilisateur ou de son expiration.
SECRET_VERSION_ADD Envoyé lorsqu'une nouvelle version de secret a bien été ajoutée.
SECRET_VERSION_ENABLE Envoyé lorsqu'une version de secret est activée.
SECRET_VERSION_DISABLE Envoyé lorsqu'une version de secret est désactivée.
SECRET_VERSION_DESTROY Envoyé lorsqu'une version de secret est détruite.
SECRET_VERSION_DESTROY_SCHEDULED Envoyé lorsqu'une durée de délai de destruction est configurée sur le secret et que l'utilisateur tente de détruire une version du secret.
SECRET_ROTATE Envoyé lorsqu'il est temps d'alterner un secret. Pour en savoir plus, consultez Créer des plannings de rotation.
TOPIC_CONFIGURED

Il s'agit d'un message de test sans corps ni attributs autres que eventType: TOPIC_CONFIGURED. Cela est envoyé lorsqu'un secret est créé ou mis à jour avec une liste de sujets Pub/Sub, mais n'indique pas que l'opération a réussi.

Un message SECRET_CREATE ou SECRET_UPDATE est envoyé immédiatement après la réussite de l'opération.

Chaque fois que des sujets sont mis à jour sur un secret, un message TOPIC_CONFIGURED est envoyé à tous les sujets du secret, y compris ceux qui étaient déjà présents.

Format des notifications

Les notifications envoyées au sujet Pub/Sub comprennent deux parties :

  • Attributs : ensemble de paires valeur/clé décrivant l'événement.

  • Données : chaîne contenant les métadonnées de l'objet modifié.

Attributs

Les attributs sont des paires clé/valeur présentes dans les notifications que Secret Manager envoie à votre sujet Pub/Sub. Toutes les notifications autres que les messages de test TOPIC_CONFIGURED contiennent toujours l'ensemble de paires clé/valeur suivant, quelles que soient les données de la notification :

Nom de l'attribut Exemple Description
eventType SECRET_CREATE Type d'événement qui vient de se produire. Consultez la section Types d'événements pour obtenir la liste des valeurs possibles.
dataFormat JSON_API_V1 Format des données d'objet.
secretId projects/p/secrets/my-secret Nom complet de la ressource du secret sur lequel l'événement s'est produit.
timestamp 2021-01-20T11:17:45.081104-08:00 Heure à laquelle l'événement s'est produit.

Parfois, les notifications contiennent l'ensemble de paires clé/valeur suivant :

Nom de l'attribut Exemple Description
versionId projects/p/secrets/my-secret/versions/456

Nom de la version du secret pour lequel l'événement s'est produit.

Cet élément n'est présent que dans les notifications d'événements SECRET_VERSION_ADD, SECRET_VERSION_ENABLE, SECRET_VERSION_DISABLE et SECRET_VERSION_DESTROY.

deleteType REQUESTED Indique si la suppression a été demandée par un utilisateur (REQUESTED) ou en raison de l'expiration du secret (EXPIRATION). Présent uniquement pour les notifications d'événements SECRET_DELETE.

Données

Le champ de données est une chaîne UTF-8 contenant les métadonnées de l'objet modifié. Les données sont soit un secret, soit une version de secret.

Dans le cas des notifications SECRET_DELETE, les métadonnées contenues dans le champ de données représentent les métadonnées de l'objet avant sa suppression. Pour toutes les autres notifications, les métadonnées incluses dans le champ de données représentent les métadonnées de l'objet après sa modification.

Limites

  • Les notifications d'événement ne sont disponibles que dans l'API v1 de Secret Manager et dans Google Cloud CLI.

  • Vous ne pouvez pas utiliser de manière fiable les notifications d'événements avec les sujets Pub/Sub qui ont une règle de stockage des messagesenforceInTransit est défini sur true.

    Secret Manager publie toutes les notifications d'événements à partir d'un point de terminaison mondial. Si un sujet Pub/Sub a la valeur true pour enforceInTransit, la publication est limitée à des allowedPersistenceRegions spécifiques. La restriction régionale est en conflit avec le point de terminaison de publication mondial pour Secret Manager, ce qui entraîne l'échec de la requête de publication avec une erreur FAILED_PRECONDITION.

Avant de commencer

Vous pouvez choisir de stocker toutes les ressources dans le même projet ou de stocker les secrets et les sujets Pub/Sub dans des projets distincts.

  1. Pour configurer Secret Manager, procédez comme suit :

    • Créez ou utilisez un projet existant pour stocker vos ressources Secret Manager.

    • Si nécessaire, suivez les étapes décrites sur la page Activer l'API Secret Manager.

  2. Pour configurer Pub/Sub, procédez comme suit :

    • Créez ou utilisez un projet existant pour stocker vos ressources Pub/Sub.

    • Si nécessaire, activez l'API Pub/Sub.

  3. Authentifiez-vous auprès de Google Cloud à l'aide de la commande suivante :

        $ gcloud auth login --update-adc
        

Créer une identité d'agent de service

Pour créer une identité d'agent de service pour chaque projet nécessitant des secrets avec des notifications d'événements, procédez comme suit :

  1. Pour créer une identité de service avec Google Cloud CLI, exécutez la commande suivante :

          $ gcloud beta services identity create \
              --service "secretmanager.googleapis.com" \
              --project "PROJECT_ID"
        

    Cette commande renvoie un nom de compte de service au format suivant :

        service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com
        
  2. Accordez à ce compte de service l'autorisation de publier des messages sur les sujets Pub/Sub configurés sur vos secrets.

  3. Enregistrez le nom du compte de service en tant que variable d'environnement à l'aide de la commande suivante :

        # This is from the output of the command above
        $ export SM_SERVICE_ACCOUNT="service-...."
        

Les variables d'environnement du projet Secret Manager, du projet Pub/Sub et du compte de service Secret Manager doivent être définies pendant toute la durée de cette procédure.

Créer des sujets Pub/Sub

Suivez le guide de démarrage rapide de Pub/Sub pour créer des sujets dans votre projet Pub/Sub dans la console Google Cloud . Vous pouvez également créer des thèmes dans la Google Cloud CLI à l'aide de la commande suivante :

gcloud

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • PUBSUB_PROJECT_ID : ID du projet dans lequel créer les abonnements
  • PUBSUB_TOPIC_NAME : nom du sujet

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"

Windows (PowerShell)

gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"

Windows (cmd.exe)

gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"

Répétez cette opération plusieurs fois si vous souhaitez créer plusieurs sujets Pub/Sub sur le secret.

Accordez au compte de service Secret Manager l'autorisation de publier des messages sur les sujets.

Vous pouvez accorder des autorisations au compte de service Secret Manager via la console Google Cloud ou Google Cloud CLI.

Pour accorder le rôle Diffuseur Pub/Sub (roles/pubsub.publisher) sur le sujet Pub/Sub, utilisez la commande suivante :

gcloud

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • PUBSUB_TOPIC_NAME : nom du sujet

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud pubsub topics add-iam-policy-binding PUBSUB_TOPIC_NAME \
    --member "serviceAccount:${SM_SERVICE_ACCOUNT}" \
    --role "roles/pubsub.publisher"

Windows (PowerShell)

gcloud pubsub topics add-iam-policy-binding PUBSUB_TOPIC_NAME `
    --member "serviceAccount:${SM_SERVICE_ACCOUNT}" `
    --role "roles/pubsub.publisher"

Windows (cmd.exe)

gcloud pubsub topics add-iam-policy-binding PUBSUB_TOPIC_NAME ^
    --member "serviceAccount:${SM_SERVICE_ACCOUNT}" ^
    --role "roles/pubsub.publisher"

Créer un abonnement Pub/Sub

Pour afficher les messages publiés dans un sujet, vous devez également créer un abonnement associé à ce sujet. Suivez le guide de démarrage rapide de Pub/Sub pour créer des abonnements dans votre projet Pub/Sub dans la console Google Cloud . Vous pouvez également créer des thèmes dans la Google Cloud CLI à l'aide de la commande suivante :

gcloud

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • PUBSUB_PROJECT_ID : ID du projet dans lequel créer les abonnements
  • PUBSUB_SUBSCRIPTION_NAME : nom de l'abonnement
  • PUBSUB_TOPIC_NAME : nom du sujet

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME \
  --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME

Windows (PowerShell)

gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME `
  --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME

Windows (cmd.exe)

gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME ^
  --topic projects/