Crea programas de rotación en Secret Manager

Secret Manager es compatible con los programas de rotación para los secretos. Secret Manager envía mensajes a temas de Pub/Sub configurados en el secreto según la y el tiempo de rotación. En este tema, se muestra cómo configurar una única vez o programaciones periódicas en tus secretos para recibir notificaciones cuando debas rotar el secreto.

Rotar los secretos periódicamente ayuda a:

  • Limitar la cantidad de tiempo en que un secreto filtrado es válido y expone una vulnerabilidad
  • Ejecutar de forma continua el flujo de rotación para garantizar la confiabilidad del proceso

¿Cómo funciona?

Secret Manager envía un mensaje SECRET_ROTATE a los temas de Pub/Sub que está configurada en el Secret, en su next_rotation_time. La marca de tiempo es se puede establecer de una de estas dos maneras:

  1. Lo proporciona el usuario cuando crea o actualiza el secreto.

  2. Si se proporciona un rotation_period, Secret Manager enviará un SECRET_ROTATE mensaje después del rotation_period transcurrido. Se actualizará next_rotation_time a para reflejar la nueva fecha y hora de rotación.

Debes configurar un suscriptor de Pub/Sub para recibir mensajes de SECRET_ROTATE y tomar medidas al respecto. de Google Cloud. Si es necesario, implementa flujos de trabajo adicionales, como agregar una nueva versión del secreto y activar implementaciones de la aplicación.

Notas

  • La administración de las políticas de rotación solo está disponible en Secret Manager API de v1 y Google Cloud CLI.

  • Los temas de Pub/Sub se deben configurar en el secreto. Para aprender a hacer lo siguiente: crear un tema y una suscripción a Pub/Sub, consulta la Guía de inicio rápido de Pub/Sub. Para aprender a configurar temas en un Secret, consulta Notificaciones de eventos de Secret Manager.

  • Se debe establecer next_rotation_time si se especifica rotation_period.

  • next_rotation_time no se puede establecer para menos de cinco minutos en el futuro. El rotation_period no puede tener una duración inferior a una hora. Para guiar el formato de la marca de tiempo, consulta la referencia de fecha y hora de gcloud.

  • Errores de entrega: Secret Manager volverá a intentar automáticamente los intentos fallidos para enviar un mensaje. Secret Manager no garantiza la entrega en caso de que haya una configuración incorrecta con respecto a la configuración del Secret o del tema, los permisos o las cuotas.

  • Las rotaciones en tránsito deben completarse antes de que se pueda iniciar otra rotación en orden para evitar que las rotaciones simultáneas generen un comportamiento inesperado. Las notificaciones son se considera en tránsito mientras Secret Manager intenta enviar el mensaje a Pub/Sub Las rotaciones programadas se omiten si hay una rotación en tránsito. Secret Manager reintentará automáticamente los intentos fallidos de enviar un mensaje a de hasta siete días. Después de ese período, se anula la rotación.

Ejemplos

Configura la rotación de un Secret

Crea un secreto con un next_rotation_time que rota cada 30 días a partir del 1 de junio de 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

Actualiza la configuración de rotación de un secreto

Las rutas de updateMask válidas para la rotación incluyen: rotation, rotation.next_rotation_time y rotation.rotation_period.

Actualiza el next_rotation_time de un secreto:

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
  {
    "rotation": {"next_rotation_time": "2040-06-01T09:00:00Z"}
  }
  EOF

Inhabilitar la rotación de un Secret

Quita el next_rotation_time de un secreto:

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

Quitar el programa de rotación de un secreto. Esto quita los elementos next_rotation_time y 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

¿Qué sigue?