Créer des calendriers de rotation dans Secret Manager

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

Avantages de la rotation des secrets :

  • 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 niveau de l'objet next_rotation_time du secret. Cet horodatage est défini de l'une des deux manières suivantes:

  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 envoie un message SECRET_ROTATE après l'expiration rotation_period. next_rotation_time sera mis à jour pour refléter la nouvelle date de rotation suivante.

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

Notes

  • La gestion des stratégies de rotation n'est disponible que dans l'API Secret Manager v1 et Google Cloud CLI.

  • 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 durée de l'élément rotation_period ne peut pas être inférieure à une heure. Pour en savoir plus sur le format des codes temporels, consultez la documentation de référence de gcloud datetime.

  • Erreurs de distribution: Secret Manager relance automatiquement les tentatives d'envoi de message ayant échoué. Secret Manager n'offre aucune garantie en ce qui concerne la diffusion en cas d'erreur de configuration concernant la configuration des secrets ou des sujets, les autorisations ou les quotas.

  • Les rotations en cours de transfert doivent se terminer avant qu'une autre rotation puisse être lancée afin d'éviter que les rotations simultanées ne produisent 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. Secret Manager relance automatiquement les tentatives d'envoi de message ayant échoué pendant sept jours, après quoi la rotation est annulée.

Examples

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.

Mettez à jour l'next_rotation_time d'un secret:

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

Supprimez l'next_rotation_time d'un secret:

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

Supprimez 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

Étapes suivantes