Trust boundaries
Zones de confiance de la plateforme Nex et contrôles qui régissent leur traversée. Livrable typiquement demandé par un pentester ou un auditeur dès le J1 d’une mission.
Diagramme
Zones de confiance
| # | Zone | Confiance | Composants |
|---|---|---|---|
| 1 | Untrusted (Internet) | aucune | Apps installées chez les utilisateurs, navigateurs externes |
| 2 | Edge (Cloudflare) | partielle | WAF, CDN, rate limiting au niveau edge |
| 3 | API publique | restreinte | Orchestrator NestJS — validation JWT, guards, throttle |
| 4 | Internal services | élevée | 10 microservices backend, communication JWT internal-service |
| 5 | Datastores | très élevée | PostgreSQL schémas isolés, Redis, S3 |
| 6 | Secrets | maximale | Doppler + K8s External Secrets Operator |
| 7 | Admin plane | élevée | Dashboards CMMS / Backoffice (auth renforcée à durcir) |
Crossings et contrôles
B1 — Internet → Edge Cloudflare
| Aspect | Contrôle | Statut |
|---|---|---|
| Confidentialité transit | TLS 1.2 minimum (Cloudflare) | ✅ |
| Authenticité serveur | Certificat Let's Encrypt via cert-manager | ✅ |
| Anti-DDoS / scraping | Cloudflare WAF + rate limiting | ✅ partiel (plan Free) |
| Bruteforce sur OTP / login | WAF rules + rate limit applicatif | ✅ (cf. /operations/gateway-cdn-securisation) |
B2 — Edge Cloudflare → Orchestrator
| Aspect | Contrôle | Statut |
|---|---|---|
| Confidentialité transit | TLS Cloudflare ↔ NLB (Full strict) | ✅ |
| Authentification client | Firebase ID token vérifié par JWKS | ✅ (cf. ADR-0002) |
| Autorisation | Guards NestJS (@Roles, @UseGuards) | ✅ |
| CORS | origin: true permissif | ⚠ known-gap |
| Headers de sécurité | Pas de Helmet / CSP / X-Frame-Options visibles | ⚠ known-gap |
B3 — Orchestrator → Microservices back
| Aspect | Contrôle | Statut |
|---|---|---|
| Authentification inter-service | JWT internal-service avec scope | ✅ |
| Confidentialité transit | HTTP intra-cluster (mTLS à confirmer) | ⚠ à documenter |
| Segmentation réseau | NetworkPolicy K8s default-deny + same-namespace allow | ✅ |
| Prefetched policy / data trust | Champ prefetched rejette policy/eligibility/limits | ✅ (cf. ADR-0007) |
B4 — Microservices → Datastores
| Aspect | Contrôle | Statut |
|---|---|---|
| Authentification DB | User PostgreSQL dédié par service | ✅ (cf. ADR-0014) |
| Périmètre DB | USAGE + CRUD limité au schéma propre du service | ✅ |
| Chiffrement at-rest | RDS encryption | ⚠ à confirmer / documenter |
| Pas de jointures cross-schema | Convention architecturale | ✅ |
| Stockage fichiers (S3) | Signed URLs, ACL, expiration | ⚠ à documenter /services/file-service/ |
B5 — Microservices → Doppler
| Aspect | Contrôle | Statut |
|---|---|---|
| Pull secrets | External Secrets Operator → K8s secrets | ✅ |
| Rotation | Manuelle / planifiée — procédure à documenter | ⚠ known-gap |
| Audit accès | Logs Doppler natifs | ✅ |
B6 — Admin plane → Orchestrator
| Aspect | Contrôle | Statut |
|---|---|---|
| Authentification CMMS / Backoffice | À documenter | ⚠ |
| MFA admin | À évaluer / implémenter | ⚠ |
| Audit actions admin | Service logs-reporting (à enrichir) | ⚠ |
Modèle STRIDE simplifié par zone
| Zone | S (spoofing) | T (tampering) | R (repudiation) | I (info disclosure) | D (DoS) | E (elevation of privilege) |
|---|---|---|---|---|---|---|
| 1→2 | TLS, JWT | TLS auth tag | logs edge | Rate limit | WAF | — |
| 2→3 | JWT verify | TLS | audit trail | guards | throttle | guards |
| 3→4 | JWT scope | TLS | audit | NetworkPolicy | rate limit | scopes |
| 4→5 | DB user | TLS | DB audit | RBAC schéma | pool limit | DB privileges |
| 4→6 | API key Doppler | TLS | Doppler audit | ESO secrets | — | — |
Suite
Une page de threat model STRIDE détaillé sera produite par service dans /services/<service>/threat-model (Lot 5).