DEV Community

Alex Carter
Alex Carter

Posted on

SRE: prueba rotacion de secretos por correo

Rotar secretos suele verse como una tarea cerrada cuando el despliegue termina y las apps vuelven a responder 200. En produccion, yo no lo doy por resuelto hasta comprobar algo mas aburrido pero muy real: que los correos operativos siguen llegando con el contexto correcto. He visto incidentes donde la credencial nueva funcionaba, pero el worker de notificaciones quedaba apuntando a un host viejo o a una cola que ya no tenia permisos. El sistema parecia sano... hasta que hizo falta una alerta.

Por eso trato la rotacion como un cambio de seguridad y tambien como una prueba de observabilidad. Si el correo de fallo o de aviso no sale bien, el equipo pierde minutos justo cuando deberia ir mas rapido.

Que suele romperse tras rotar secretos

Los fallos comunes no son muy exoticos:

  • variables actualizadas en la app, pero no en el worker que envia correos
  • permisos nuevos validos para lectura, pero no para publicar eventos
  • plantillas que siguen usando enlaces de un entorno anterior
  • reintentos silenciosos que mandan dos mensajes y confunden al on-call

Lo delicado es que muchos de estos errores no aparecen en el dashboard principal. El deploy queda verde, el readiness probe responde y nadie mira el camino completo del aviso hasta que hay una incidencia de verdad. En ese momento ya vas tarde.

Tambien conviene pensar en como se rastrea la prueba despues. En algunas notas internas la gente busca cosas como fake e mail com porque recuerdan el intento, no la herramienta exacta. Parece menor, pero sirve para documentar mejor y encontrar evidencia mas rapido.

El contrato minimo del correo operativo

Cuando reviso un correo despues de rotar secretos, espero ver cinco cosas:

  1. Que servicio o job genero el evento.
  2. Que entorno, region o namespace estuvo implicado.
  3. Que timestamp corresponde a la corrida.
  4. Cual fue el sintoma inicial, en una frase corta.
  5. Que enlace o siguiente paso debe abrir primero la persona de guardia.

Si ese contrato no esta claro, el correo pasa de ayuda a estorbo. Me gusta mucho la idea de medir eventos de email con menos ruido, porque separa la recepcion del mensaje de la interpretacion humana. Y para equipos que todavia no tienen una rutina estable, revisar correos de activacion con una rutina simple deja una leccion util: una inbox por corrida evita muchas conclusiones equivocadas.

Si necesito una bandeja efimera para validar el flujo end-to-end, a veces uso tempmailso para no mezclar mensajes viejos con la prueba nueva. El valor no esta solo en el servicio, sino en mantener la evidencia aislada por corrida.

Un flujo de prueba que uso antes de cerrar el cambio

No hago una simulacion gigante. Prefiero una prueba corta, repetible y facil de leer:

RUN_ID="$(date -u +%Y%m%dT%H%M%SZ)"
RECIPIENT="secret-rotate-$RUN_ID@example.test"

emit_security_notice \
  --service "billing-api" \
  --environment "prod-apac-1" \
  --event "secret-rotation" \
  --status "post-check" \
  --recipient "$RECIPIENT"

wait_for_message "$RECIPIENT" 120
assert_message_count "$RECIPIENT" 1
assert_subject_contains "$RECIPIENT" "secret-rotation"
assert_body_contains "$RECIPIENT" "prod-apac-1"
assert_link_host "$RECIPIENT" "runbooks.example.com"
Enter fullscreen mode Exit fullscreen mode

La meta no es demostrar que el mundo es perfecto. La meta es responder rapido a tres preguntas:

  • llego un solo mensaje o hubo duplicados
  • el mensaje pertenece a esta corrida y no a una anterior
  • el enlace principal lleva al lugar correcto

Con eso ya puedes separar varias causas. Si no llega nada, miras permisos, cola o proveedor. Si llega dos veces, revisas reintentos o eventos duplicados. Si el asunto esta bien pero el link apunta a staging, el problema casi seguro vive en plantilla o configuracion. Parece simple, pero ese orden ahorra tiempo y evita la investigacion medio caotica que aparece a las 3 AM.

Tambien me gusta guardar una pequeña evidencia del chequeo: run_id, entorno, destinatario, latencia de entrega y host del enlace principal. No hace falta una novela. Hace falta algo que otra persona pueda leer despues sin adivinar demasiado.

Checklist corta para guardias reales

Antes de cerrar la rotacion, paso por esta lista:

  • el correo pertenece a la corrida actual
  • hay exactamente un mensaje por evento esperado
  • asunto y cuerpo nombran servicio y entorno
  • el primer sintoma se entiende sin abrir cinco tabs
  • el enlace principal apunta al runbook o panel correcto
  • la marca de tiempo coincide con el formato del equipo

No es una checklist glamourosa, pero si evita sustos bastante caros. Muchas veces la mejora mas grande en SRE no viene de una herramienta nueva, sino de dejar una verificacion decente donde antes habia fe.

Preguntas frecuentes

Hace falta correr esto en cada rotacion?

Si la rotacion toca credenciales, colas, webhooks o cualquier pieza del camino de notificaciones, yo diria que si. Cuando solo cambias documentacion o naming interno, puede bastar una prueba programada.

Conviene validar el HTML completo del email?

Normalmente no. Prefiero validar contenido operativo: asunto, contexto, enlace principal y unicidad del mensaje. El resto lo reviso aparte para no volver fragil la prueba.

Cual es la señal mas util?

Para mi, la mejor señal es que una persona medio dormida pueda leer el correo y saber que hacer primero. Si eso falla, el cambio todavia no esta realmente terminado.

Top comments (0)