Gestion de secretos
Gestion de secretos
Section titled “Gestion de secretos”MedSync no debe operar produccion con secretos en archivos versionados, chats, tickets ni documentacion. Usa secret manager o el mecanismo seguro de la plataforma.
Secretos criticos
Section titled “Secretos criticos”| Secreto | Variable | Rotacion recomendada |
|---|---|---|
| Firma JWT | JWT_SECRET | Al menos por incidente, cambio de custodia o calendario formal. |
| Refresh token HMAC | REFRESH_TOKEN_SECRET | Por incidente o rotacion planificada con invalidacion controlada. |
| CSRF HMAC | CSRF_TOKEN_SECRET | Por incidente o rotacion planificada. |
| Password reset HMAC | PASSWORD_RESET_CODE_SECRET | Por incidente; invalida challenges pendientes. |
| DB password | DB_PASSWORD | Periodica y por cambio de personal/incidente. |
| SMTP password | SMTP_PASSWORD | Periodica y ante abuso/filtracion. |
| Storage keys | AWS_SECRET_ACCESS_KEY, CLOUDINARY_API_SECRET | Periodica y por incidente. |
| Signature links | SIGNATURE_LINK_TOKEN_SECRET | Por incidente; puede invalidar links publicos. |
Reglas
Section titled “Reglas”- Generar secretos con alta entropia.
- No reutilizar
JWT_SECRETcomo fallback de refresh/password-reset en produccion. - Guardar cada secreto con nombre y version.
- Separar secretos por ambiente.
- No usar
.env.localcomo fuente productiva. - No imprimir secretos en logs de startup.
- No incluir secretos en reportes de QA.
- Revocar/rotar si un valor se copio a un lugar inseguro.
Auditoria de .env.example
Section titled “Auditoria de .env.example”La revision detecto que el backend .env.example contiene algunas muestras concretas. No se copiaron a esta documentacion. Antes de produccion:
- Reemplazar valores concretos por placeholders.
- Rotar cualquier credencial real que haya estado en ejemplos.
- Asegurar que
.env.localno se versiona. - Revisar historial Git si algun secreto real fue commiteado.
Formato recomendado
Section titled “Formato recomendado”JWT_SECRET=<secret-manager-path>/medsync/prod/jwt-secretREFRESH_TOKEN_SECRET=<secret-manager-path>/medsync/prod/refresh-token-secretCSRF_TOKEN_SECRET=<secret-manager-path>/medsync/prod/csrf-token-secretPASSWORD_RESET_CODE_SECRET=<secret-manager-path>/medsync/prod/password-reset-code-secretDB_PASSWORD=<secret-manager-path>/medsync/prod/db-passwordSMTP_PASSWORD=<secret-manager-path>/medsync/prod/smtp-passwordRotacion de secretos
Section titled “Rotacion de secretos”- Abrir ventana de cambio.
- Tomar backup cuando aplique.
- Crear nuevo secreto en secret manager.
- Desplegar backend con nuevo secreto.
- Invalidar artefactos dependientes si aplica.
- Ejecutar smoke tests.
- Monitorear 401/403/500/auth failures.
- Revocar secreto viejo.
- Registrar evidencia sin valores sensibles.
Impacto por secreto
Section titled “Impacto por secreto”| Secreto rotado | Impacto esperado |
|---|---|
JWT_SECRET | Access tokens existentes dejan de validar; usuarios pueden requerir re-login. |
REFRESH_TOKEN_SECRET | Refresh tokens existentes dejan de validar; usuarios requieren re-login. |
CSRF_TOKEN_SECRET | CSRF tokens existentes fallan; frontend debe pedir /api/auth/csrf. |
PASSWORD_RESET_CODE_SECRET | Codigos/challenges pendientes dejan de validar. |
DB_PASSWORD | Requiere restart/reload backend con password nuevo. |
SMTP_PASSWORD | Envio de correo falla hasta actualizar credencial. |
No documentar
Section titled “No documentar”- Passwords reales.
- Tokens reales.
- Cookies completas.
- IPs privadas sensibles sin necesidad.
- Credenciales DB/SMTP.
- Salidas de comandos que muestren secretos.