Seguridad
Modelo de confianza
Es un sitio estático público sin autenticación: todo el contenido es de acceso libre y se sirve igual a cualquier visitante (--allow-unauthenticated, .github/workflows/deploy.yml:45; nginx sin auth, nginx.conf:1-34). No hay área privada, login, sesiones ni manejo de datos de usuario. La superficie de ataque de aplicación es mínima: no hay backend ni base de datos en runtime.
Autenticación y autorización
- En la aplicación: N/A (sin authn/authz; contenido público).
- En el despliegue: la autenticación a GCP usa el secreto
GCP_SA_KEY(.github/workflows/deploy.yml:22-25) y la Service Accountblueup-docs-deployer@homelab-466309.iam.gserviceaccount.com(:51). Este es el único límite de confianza con privilegios.
Gestión de secretos
- El único secreto es
GCP_SA_KEY, referenciado desde el contexto de secrets del workflow, no hardcodeado (.github/workflows/deploy.yml:25). .envy*.localestán en.gitignore(.gitignore:5-6); no hay credenciales en el árbol del repo (revisado: sin tokens/keys en config ni scripts).
Cabeceras de seguridad (nginx)
Aplicadas a todas las respuestas (nginx.conf:8-11):
| Cabecera | Valor |
|---|---|
X-Frame-Options | SAMEORIGIN |
X-Content-Type-Options | nosniff |
X-XSS-Protection | 1; mode=block |
Referrer-Policy | strict-origin-when-cross-origin |
Observaciones:
- No se define
Content-Security-PolicyniStrict-Transport-Securityennginx.conf(HSTS suele aportarlo el frontend de Cloud Run;DESCONOCIDO:configuración de CSP/HSTS a nivel de Cloud Run). - La caché agresiva de estáticos (
expires 1y,immutable,nginx.conf:25-28) es segura porque los assets de VitePress llevan hash en el nombre.
Recursos de terceros
- Google Fonts se cargan desde
fonts.googleapis.com/fonts.gstatic.com(.vitepress/config.mts:30-32): conexión del navegador del visitante a Google. - Búsqueda local (sin envío de consultas a terceros) (
.vitepress/config.mts:121,188-190).
Postura Zero Trust del repo
- No participa en la malla Zero Trust de la plataforma (sin Ziti, sin mTLS, sin NKeys): es un servicio público de borde. N/A respecto a la postura ZTA de
bc/idagent/ztaclient.
Límites de confianza
mermaid
flowchart LR
visitante([Visitante anónimo]) -->|HTTPS público| run[Cloud Run nginx]
run -. fuente de verdad .-> gitea[(Gitea repo)]
op([Operador]) -->|GCP_SA_KEY + SA| run
visitante -. tipografías .-> gfonts([Google Fonts])