Rotación de secretos en .env.prod: qué rotar y cómo

admin · 2 min

El fichero .env.prod contiene secretos de varios tipos. Algunos son independientes (se pueden cambiar directamente), otros son derivados (cambiar uno implica regenerar los que dependen de él). Conocer qué es qué evita romper el stack durante una rotación.

Secretos críticos y sus dependencias

VariableTipoDependencias
JWT_SECRETRaízANON_KEY y SERVICE_ROLE_KEY deben regenerarse si cambia
ANON_KEYDerivado de JWT_SECRETUsado por frontends para llamadas sin auth
SERVICE_ROLE_KEYDerivado de JWT_SECRETUsado por el backend (FastAPI) para bypass de RLS
POSTGRES_PASSWORDIndependienteDebe actualizarse también en el servidor Postgres
SECRET_KEY_BASEIndependienteInvalida sesiones de Fizzy al cambiar
N8N_ENCRYPTION_KEYIndependienteInvalida credenciales guardadas en n8n al cambiar
MEILI_MASTER_KEYIndependienteRequiere reiniciar MeiliSearch
REDIS_PASSWORDIndependienteRequiere reiniciar Redis y actualizar REDIS_URL

Regenerar ANON_KEY y SERVICE_ROLE_KEY

Estos tokens son JWT firmados con JWT_SECRET. La forma más directa de regenerarlos es con el generador oficial de Supabase en supabase.com/docs/guides/self-hosting, o con cualquier herramienta JWT con los payloads correctos:

# ANON_KEY payload
{ "role": "anon", "iss": "supabase", "iat": , "exp":  }

# SERVICE_ROLE_KEY payload
{ "role": "service_role", "iss": "supabase", "iat": , "exp":  }

Procedimiento seguro de rotación

  1. Actualizar el valor en .env.prod en el servidor.
  2. Actualizar el mismo valor en la base de datos si aplica (ej. POSTGRES_PASSWORD).
  3. Reiniciar solo los servicios afectados, no todo el stack: docker compose --env-file .env.prod -f 03-app.yml up -d fastapi
  4. Verificar que el servicio arranca correctamente antes de continuar con el siguiente.

Lo que nunca debe ir en Git

.env.prod está en .gitignore. Aun así, conviene verificarlo periódicamente:

git ls-files --error-unmatch .env.prod 2>/dev/null && echo "¡ALERTA: .env.prod está en Git!"

Si aparece en el historial, la rotación no es opcional: hay que asumir que esos valores están comprometidos y cambiarlos todos.

admin

Editor en D4R.