Saltar a contenido

Gestión de credenciales y vault interno#

Plan oficial para manejar secretos en demo/live usando PostgreSQL + pgcrypto.

Estado actual:

  • El deploy externo (CT110) esta corriendo con archivos .env gitignored (por simplicidad).
  • Este vault es una mejora recomendada si vamos a operar mas de 30 dias o en modo live.

1. Provisionar roles (una sola vez por entorno)#

$env:DB_ADMIN_URL="postgresql://postgres:<admin_pass>@pgad.perlatec.net:5432/signaldashpro"
python scripts/init_vault_roles.py `
    --vault-admin-password <vault_admin_pass> `
    --app-runtime-password <app_runtime_pass>
  • Crea/actualiza vault_admin, vault_reader (opcional) y app_runtime.
  • Aplica GRANT/REVOKE sobre public y security.secrets.
  • Registrar las claves en un gestor seguro (no dejar en repositorio).

2. Cargar secretos cifrados#

$env:SECRETS_MASTER_KEY="<clave_maestra>"
python scripts/manage_secrets.py set BINANCE_API_KEY --prompt
python scripts/manage_secrets.py set BINANCE_API_SECRET --prompt
python scripts/manage_secrets.py set NEWSAPI_KEY --value key
python scripts/manage_secrets.py list
  • Repetir para PRIXE_API_KEY, TRADINGECONOMICS_API_KEY (o FMP_API_KEY), OPENAI_API_KEY, etc.
  • manage_secrets.py guarda name, value (pgp_sym_encrypt) y last_rotated.

3. Exportar a .env temporal#

En cada arranque:

$env:SECRETS_MASTER_KEY="<clave_maestra>"
python scripts/manage_secrets.py export --path env/.env.runtime
. .\setenv.ps1 env/.env.runtime
scripts\run_backend.ps1 -UseVaultSecrets   # este paso ya exporta y elimina .env.runtime automáticamente
  • run_backend.ps1 -UseVaultSecrets llama internamente al export y borra env/.env.runtime al finalizar.
  • En Linux, equivalente: python scripts/manage_secrets.py export --path /opt/signaldashpro/.env.runtime.

4. Políticas de rotación#

Entorno Frecuencia Responsable Acciones
Demo Cada 90 días Equipo QA/Ops manage_secrets.py rotate NAME --prompt + registrar en runbook.
Live Cada 60 días o ante incidente Equipo Ops Rotar en Binance/News/LLM, actualizar vault y reiniciar servicios fuera de horario critico.
  • Después de cada rotación:
  • Ejecutar scripts/run_smoke_suite.py contra el entorno.
  • Registrar en docs/operational/despliegue.md la fecha, variables rotadas y persona responsable.
  • Adjuntar evidencia (storage/logs/signaldashpro.log, storage/logs/ops/alerts-*.log).

5. Auditoría y registro#

  • Habilitar logging en PostgreSQL (pgaudit o triggers) para rastrear SELECT/INSERT/UPDATE sobre security.secrets.
  • Mantener un archivo storage/logs/vault_audit.log (local) con cada export realizado (timestamp, usuario, entorno).
  • Integrar alerts: si manage_secrets.py falla al exportar, registrar evento en storage/logs/ops/alerts-*.log.

6. Documentar en cada entorno#

  • docs/operational/despliegue.md debe listar:
  • URL del vault (Postgres host/port).
  • Dónde vive SECRETS_MASTER_KEY (por ejemplo Azure Key Vault).
  • Fecha de última validación (scripts/manage_secrets.py list).
  • Añadir al runbook interno la tabla de credenciales y su estado (activa/rotada/suspendida).