Aller au contenu

Sécurité - Vue d'Ensemble

Architecture de sécurité de JARVIS.

Principes de Sécurité

graph TB
    subgraph "Defense in Depth"
        L1[WAF/Traefik]
        L2[Rate Limiting]
        L3[Authentication JWT]
        L4[Authorization RBAC]
        L5[Row-Level Security]
        L6[Encryption at Rest]
    end

    L1 --> L2 --> L3 --> L4 --> L5 --> L6

Couches de Protection

1. Périmètre (Traefik)

  • TLS 1.3 obligatoire
  • Headers de sécurité (CSP, HSTS, X-Frame-Options)
  • Rate limiting global

2. Application

  • JWT avec rotation des clés
  • RBAC (user, admin, super_admin)
  • Validation des entrées (Pydantic)
  • Protection CSRF

3. Données

  • Row-Level Security PostgreSQL
  • Chiffrement au repos (AES-256)
  • Hashing bcrypt (passwords)
  • PII masking dans les logs

OWASP Top 10 - Couverture

Risque Protection Status
A01 - Broken Access Control RLS + RBAC ✅
A02 - Cryptographic Failures TLS + bcrypt + AES ✅
A03 - Injection Pydantic + SQLAlchemy ORM ✅
A04 - Insecure Design Security by design ✅
A05 - Security Misconfiguration Hardened configs ✅
A06 - Vulnerable Components CVE scanning ✅
A07 - Auth Failures JWT + MFA ready ✅
A08 - Data Integrity Audit logs ✅
A09 - Logging Failures Structured logging ✅
A10 - SSRF URL validation ✅

Flux d'Authentification

sequenceDiagram
    participant U as User
    participant A as API
    participant DB as PostgreSQL
    participant R as Redis

    U->>A: POST /auth/login
    A->>DB: Verify credentials
    DB-->>A: User data
    A->>R: Store session
    A-->>U: JWT (access + refresh)

    U->>A: Request + Bearer token
    A->>A: Validate JWT
    A->>R: Check session
    A->>DB: Query with RLS
    DB-->>A: Filtered data
    A-->>U: Response

Protection des Données Sensibles

Détection PII

# Patterns détectés automatiquement
- Emails: user@example.com
- Téléphones: +33 6 12 34 56 78
- Cartes bancaires: 4111 1111 1111 1111
- IBAN: FR76 1234 5678 9012 3456 7890 123
- Numéros SS: 1 85 12 75 108 123 45

Routage LLM

Les données sensibles sont automatiquement routées vers le LLM local (Ollama) pour éviter l'envoi vers les API cloud.

Audit Trail

Toutes les actions critiques sont loguées :

{
  "timestamp": "2026-01-16T10:30:00Z",
  "user_id": "uuid",
  "action": "document.upload",
  "resource_type": "document",
  "resource_id": "uuid",
  "ip_address": "192.168.1.100",
  "user_agent": "Mozilla/5.0...",
  "status": "success",
  "metadata": {
    "filename": "rapport.pdf",
    "size_bytes": 102400
  }
}

Voir Aussi