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
.envgitignored (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) yapp_runtime. - Aplica GRANT/REVOKE sobre
publicysecurity.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(oFMP_API_KEY),OPENAI_API_KEY, etc. manage_secrets.pyguardaname,value (pgp_sym_encrypt)ylast_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 -UseVaultSecretsllama internamente al export y borraenv/.env.runtimeal 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.pycontra el entorno. - Registrar en
docs/operational/despliegue.mdla 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 (
pgaudito triggers) para rastrearSELECT/INSERT/UPDATEsobresecurity.secrets. - Mantener un archivo
storage/logs/vault_audit.log(local) con cada export realizado (timestamp, usuario, entorno). - Integrar alerts: si
manage_secrets.pyfalla al exportar, registrar evento enstorage/logs/ops/alerts-*.log.
6. Documentar en cada entorno#
docs/operational/despliegue.mddebe 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).