Docs

Rotación de Secrets — Politica y Procedimiento

Politica de rotación trimestral de secrets del ecosistema Nvito: JWT, Stripe, Twilio, OpenAI, Clerk, Encryption. Checklist operacional y procedimiento paso a paso.

PublicadoMarzo 2026Equipo de desarrollo, operaciones, CTO

Por que rotar secrets

Los secrets (API keys, tokens, passwords) deben rotarse periódicamente para:

  • Limitar el impacto si un secret fue comprometido sin saberlo
  • Cumplir con mejores practicas de seguridad (OWASP, SOC 2)
  • Evitar que secrets antiguos se acumulen en logs, backups o memorias de equipo

Frecuencia de rotación

SecretFrecuenciaRazon
JWT_SECRETTrimestralTokens de sesion — limitar ventana de compromiso
MOBILE_JWT_SECRETTrimestralTokens de app movil
ENCRYPTION_PASSWORDAnualRequiere re-encriptar datos existentes
ENCRYPTION_SALTAnualMismo que ENCRYPTION_PASSWORD
CLERK_SECRET_KEYTrimestralAutenticación principal
CLERK_WEBHOOK_SECRETTrimestralWebhooks de Clerk
STRIPE_SECRET_KEYTrimestralPagos — alto impacto si comprometido
STRIPE_WEBHOOK_SECRETTrimestralWebhooks de Stripe
TWILIO_AUTH_TOKENTrimestralMensajeria WhatsApp/SMS
OPENAI_API_KEYTrimestralCosto directo si comprometido
ANTHROPIC_API_KEYTrimestralCosto directo si comprometido
INVITATIONS_WEBHOOK_SECRETTrimestralRevalidación ISR
REDIS_PASSWORDSemestralInfraestructura interna
Certificados SSLAntes de expiraciónVer guia de Certificate Pinning

Checklist de rotación trimestral

Ejecutar cada inicio de trimestre (enero, abril, julio, octubre):

1. Generar nuevos valores

# JWT secrets
openssl rand -base64 32  # → JWT_SECRET
openssl rand -base64 32  # → MOBILE_JWT_SECRET

# Webhook secrets
openssl rand -base64 32  # → INVITATIONS_WEBHOOK_SECRET
openssl rand -base64 32  # → CLERK_WEBHOOK_SECRET

2. Actualizar en Bitwarden

  • Abrir Bitwarden Secrets Manager
  • Actualizar cada secret con el nuevo valor
  • Registrar fecha de rotación en notas del secret

3. Actualizar en ambientes

AmbienteDonde actualizar
DEVCoolify → nvito-api → Environment Variables
TESTCoolify → nvito-api → Environment Variables
PRODRailway → nvito-api → Environment Variables

4. Rotar API keys externas

ServicioDonde rotar
Stripedashboard.stripe.com → Developers → API Keys → Roll key
Twilioconsole.twilio.com → Account → API keys
OpenAIplatform.openai.com → API keys → Create new, delete old
Anthropicconsole.anthropic.com → API keys
Clerkdashboard.clerk.com → API keys → Rotate

5. Desplegar cambios

  • Restart nvito-api en cada ambiente (Coolify/Railway)
  • Verificar que la app arranca correctamente (/health retorna OK)
  • Verificar que webhooks siguen funcionando (enviar test desde Clerk/Stripe)

6. Verificar

  • Login en nvito-admin funciona (Clerk)
  • RSVP en invitación pública funciona
  • Webhook de revalidación ISR funciona
  • Login movil en nvito-client funciona (JWT)

7. Documentar

  • Registrar fecha de rotación en Bitwarden
  • Notificar al equipo via canal de comunicación interno

Consideraciones especiales

ENCRYPTION_PASSWORD y ENCRYPTION_SALT

Estos secrets protegen datos PII encriptados en la base de datos (emails, teléfonos de invitados). Rotarlos requiere re-encriptar todos los datos existentes. Este proceso es:

  1. Generar nuevo password/salt
  2. Ejecutar script de migración que desencripte con valores viejos y re-encripte con nuevos
  3. Verificar integridad de datos
  4. Actualizar variables de entorno
  5. Desplegar

Frecuencia: Anual o si se sospecha compromiso.

JWT_SECRET — Impacto en sesiones activas

Al rotar JWT_SECRET, todos los tokens JWT existentes se invalidan. Los usuarios necesitaran re-autenticarse. Para minimizar impacto:

  1. Rotar en horario de bajo trafico
  2. Los refresh tokens del mobile (MOBILE_JWT_SECRET) también se invalidan — los usuarios de nvito-client necesitaran re-login

Clerk keys

Al rotar CLERK_SECRET_KEY, actualizar también CLERK_WEBHOOK_SECRET ya que Clerk puede regenerar ambas.

Que hacer si un secret fue comprometido

  1. Rotar inmediatamente — No esperar al ciclo trimestral
  2. Revocar el secret antiguo en el servicio externo (Stripe, Twilio, etc.)
  3. Revisar logs de acceso para detectar uso no autorizado
  4. Notificar al equipo con detalles del incidente
  5. Documentar el incidente y acciones tomadas
Esta pagina fue util?