Skip to content

Seguridad

Daniel J. Saldaña edited this page Oct 29, 2026 · 2 revisions

Seguridad

🇬🇧 English

Comunicar una vulnerabilidad

Comunica las vulnerabilidades de forma privada mediante los avisos de seguridad de GitHub, no en issues públicas.

Modelo de seguridad

Credenciales

  • Las credenciales de la nube y de la base de datos permanecen en el servidor. El navegador solo habla con las APIs del backend.
  • En Azure, todos los componentes usan identidades administradas; el código no contiene secretos.
  • Los secretos locales viven en .env, iac/.env, iac/.azure/*.local.json y functions/local.settings.json, todos ignorados por Git.

Mínimo privilegio

Identidad Permisos
Function colectora Reader en las suscripciones inventariadas; escritura en sus propios contenedores de Storage.
Web Lectura de blobs, DML en PostgreSQL, Inventory.Generate en la API de la Function, Cost Management Reader, lectura de métricas y gestión limitada de la Function para Administración.
Web (Miembros, opcional) Solo el permiso de aplicación User.Read.All de Microsoft Graph.
Migrador El único proceso con DDL en PostgreSQL.

El colector solo lee la configuración de los recursos. Nunca lee contenido de blobs, datos de bases de datos, secretos de Key Vault, claves de cuentas ni cadenas de conexión.

Autenticación y autorización

  • Las páginas y APIs de datos están protegidas en el servidor. Una configuración inválida bloquea el acceso en lugar de pasar a modo público.
  • Las sesiones son cookies JWT HttpOnly y SameSite=Lax que caducan a las 8 horas.
  • Los roles de Goliat se vuelven a comprobar en el servidor en cada petición.
  • La Function valida firma, emisor, tenant, audiencia, caducidad, cliente, tipo de token, scope y rol antes de leer el cuerpo de la petición.

Endurecimiento HTTP

  • Las APIs de datos devuelven Cache-Control: private, no-store.
  • Las respuestas incluyen X-Content-Type-Options: nosniff, X-Frame-Options: SAMEORIGIN y una política de referrer restrictiva.
  • Las peticiones que modifican estado exigen el mismo origen y un cuerpo JSON de tamaño limitado.
  • El iframe del diagrama de arquitectura está aislado con sandbox.

FinOps

Antes de enviar un token a Azure Resource Manager, FinOps valida origen, credenciales en la URL, ruta de la suscripción y ciclos de paginación. Aplica límites por proceso y devuelve 429 con Retry-After cuando se superan. Las suscripciones se fijan en el servidor; el navegador no puede enviar IDs ni endpoints.

Logs

Nunca se registran cuerpos, cookies, tokens, query strings ni SQL. Los errores externos solo conservan su tipo y código.

Aviso corregido

La web y el colector usan ahora @azure/identity 4.14.1 con @azure/msal-node 7.1.2 corregido, resolviendo GHSA-xcx6-jx8p-x3h5. Se han actualizado ambos lockfiles. Mantén actualizados los dos proyectos; una auditoría limpia no garantiza la ausencia de vulnerabilidades.

Antes de pasar a producción

  • Valida el tenant, los permisos, el TLS de PostgreSQL y la identidad de Azure del entorno.
  • Define una política de retención para snapshots y blobs.
  • Aplica las políticas de acceso condicional, MFA e invitados de tu organización. Los roles de Goliat no las sustituyen.

Clone this wiki locally