Alterner les secrets

Cet article traite de la gestion des notifications de rotation programmée sur des secrets via Secret Manager.

Aperçu

Secret Manager accepte les calendriers de rotation pour les secrets. Secret Manager envoie des messages aux sujets Pub/Sub configurés sur le secret en fonction de la fréquence de rotation et de la date de rotation fournies. Ce guide vous explique comment configurer des programmations ponctuelles ou périodiques sur vos secrets pour recevoir des notifications lorsqu'il est temps d'alterner les secrets.

La rotation périodique des secrets permet de:

  • Limitez la durée pendant laquelle un secret piraté reste valide et expose une faille.
  • Exercez un flux de rotation en continu pour garantir la fiabilité des processus.

Fonctionnement

Secret Manager envoie un message SECRET_ROTATE aux sujets Pub/Sub configurés sur le secret au moment de la prochaine date de rotation (next_rotation_time) du secret. Cet horodatage est défini de deux manières:

  1. Fournie par l'utilisateur lors de la création ou de la mise à jour du secret.

  2. Si un rotation_period est fourni, Secret Manager enverra un message SECRET_ROTATE après la rotation_period écoulée. next_rotation_time sera mis à jour pour refléter la nouvelle date de la prochaine rotation.

Vous devez configurer un abonné Pub/Sub pour recevoir les messages SECRET_ROTATE et agir en conséquence. Si nécessaire, mettez en œuvre des workflows supplémentaires, tels que l'ajout d'une nouvelle version de secret et le déclenchement de déploiements d'applications.

Remarques

  • La gestion des règles de rotation n'est disponible que dans l'API v1 de Secret Manager et dans l'outil de ligne de commande gcloud.

  • Les sujets Pub/Sub doivent être configurés sur le secret. Pour découvrir comment créer un sujet et un abonnement Pub/Sub, consultez le guide de démarrage rapide de Pub/Sub. Pour savoir comment configurer des sujets sur un secret, consultez la page Notifications d'événements pour Secret Manager.

  • next_rotation_time doit être défini si rotation_period est spécifié.

  • La valeur next_rotation_time ne peut pas être fixée sur moins de cinq minutes dans le futur. La valeur rotation_period ne peut pas être inférieure à une heure. Pour en savoir plus sur la mise en forme des horodatages, consultez la documentation de référence sur gcloud datetime.

  • Erreurs de distribution: Secret Manager relance automatiquement les tentatives infructueuses d'envoi d'un message. Secret Manager n'offre aucune garantie quant à la distribution en cas d'erreur de configuration de la configuration, des autorisations ou des quotas des secrets ou des sujets.

  • Les rotations en cours doivent être terminées avant de démarrer une autre rotation afin d'empêcher les rotations simultanées de générer un comportement inattendu. Les notifications sont considérées comme en cours pendant que Secret Manager tente d'envoyer le message à Pub/Sub. Les rotations planifiées sont ignorées en cas de rotation en cours. Pour les tentatives infructueuses d'envoi d'un message, Secret Manager tente automatiquement d'envoyer le message pendant sept jours au maximum, après quoi la rotation est annulée.

Exemples

Configurer la rotation sur un secret

Créez un secret avec un next_rotation_time qui alterne tous les 30 jours à compter du 1er juin 2021:

gcloud

$ gcloud secrets create secret-id \
    --replication-policy "automatic" \
    --next-rotation-time="2021-06-01T09:00:00Z" \
    --rotation-period="2592000s" \
    --topics=full-topic-name"

API

 curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets?secretId=${SECRET_ID}" \
  --request "POST" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --data-binary @- <<EOF
{
"replication":{
  "automatic":{}
},
"topics": {"name" : "projects/${PROJECT_ID}/topics/${TOPIC_NAME}"},
"rotation":
  {
    "next_rotation_time": "2021-06-01T09:00:00Z",
    "rotation_period" : '2592000s'
  },
}
EOF

Mettre à jour les paramètres de rotation d'un secret

Les chemins d'accès updateMask valides pour la rotation incluent: rotation, rotation.next_rotation_time, rotation.rotation_period.

Pour mettre à jour la prochaine date de rotation (next_rotation_time) d'un secret, procédez comme suit:

gcloud

$ gcloud secrets update secret-id \
  --next-rotation-time "2022-06-01T09:00:00Z"

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {
    "next_rotation_time": "2040-06-01T09:00:00Z"
  }
  EOF

Désactiver la rotation sur un secret

Pour supprimer la next_rotation_time d'un secret, procédez comme suit:

gcloud

$ gcloud secrets update secret-id \
  --remove-next-rotation-time

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF

Pour supprimer le calendrier de rotation d'un secret. Cela supprime à la fois next_rotation_time et rotation_period:

gcloud

$ gcloud secrets update secret-id \
  --remove-rotation-schedule

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF