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 los temas de Pub/Sub configurados en el secreto según la frecuencia y el tiempo de rotación proporcionados. En este tema, se muestra cómo configurar programas únicos o periódicos en los secretos para recibir notificaciones cuando sea el momento de rotarlos.

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 configurados en el secreto en su next_rotation_time. Esta marca de tiempo se establece de una de estas dos maneras:

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

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

Debes configurar un suscriptor de Pub/Sub para recibir los mensajes SECRET_ROTATE y tomar medidas al respecto. 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 la API de v1 de Secret Manager y en Google Cloud CLI.

  • Los temas de Pub/Sub se deben configurar en el secreto. Para aprender a crear un tema y una suscripción de Pub/Sub, consulta la guía de inicio rápido de Pub/Sub. Para obtener información sobre cómo configurar temas en un secreto, 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 durar menos de una hora. Para obtener orientación sobre el formato de marca de tiempo, consulta la referencia de datetime 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 en relación con la configuración del tema o el secreto, los permisos o las cuotas.

  • Las rotaciones en tránsito deben completarse antes de que se pueda iniciar otra rotación para evitar que las rotaciones simultáneas generen un comportamiento inesperado. Las notificaciones se consideran en tránsito mientras Secret Manager intenta enviar el mensaje a Pub/Sub. Las rotaciones programadas se omiten si hay una rotación en curso. Secret Manager volverá a intentar de forma automática los intentos fallidos de enviar un mensaje durante un máximo de siete días, después de lo cual se anula la rotación.

Ejemplos

Configura la rotación de un Secret

Crea un secreto con un next_rotation_time que rote 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
  {
    "next_rotation_time": "2040-06-01T09:00:00Z"
  }
  EOF

Inhabilita la rotación de un secreto

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

Quita el programa de rotación de un secreto. Esto quita 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?