Seaway — Security Overview
Cette documentation présente les principes d'architecture et les pratiques d'ingénierie du projet.
Les détails opérationnels et configurations d'infrastructure internes sont intentionnellement omis.
Objectif
Mettre en place une architecture de sécurité défensive par défaut pour l'application Seaway.
Les principes suivis :
- authentification stateless
- séparation frontend / backend
- exposition minimale des services
- défense en profondeur
flowchart LR
User --> Frontend
Frontend --> Nginx
Nginx --> Backend
Backend --> PostgreSQL
Backend --> Kafka
Authentification
Seaway utilise une authentification basée sur JWT.
Architecture :
- Access Token (durée de vie courte)
- Refresh Token (renouvellement de session)
Les tokens sont stockés dans :
- cookies HttpOnly
- cookies Secure
Flux d'authentification :
POST /auth/login- génération access token + refresh token
- stockage dans cookies sécurisés
- appels API authentifiés via cookies
POST /auth/refreshpour renouveler l'access token
Autorisation
Le système utilise un modèle RBAC (Role-Based Access Control).
Rôles actuels :
ADMINUSER
L'autorisation est appliquée via :
- Spring Security
- contrôles d'accès au niveau des endpoints
Backend Security
Spring Security est configuré en mode stateless.
Principes :
- sessions désactivées
- authentification via JWT
- filtres personnalisés pour validation du token
Protections :
- password hashing via BCrypt
- optimistic locking (
@Version) - validation des entrées
Reverse Proxy
Nginx agit comme point d'entrée unique.
Responsabilités :
- terminaison HTTPS
- reverse proxy vers le backend
- protection contre certaines attaques
Headers de sécurité activés :
X-Frame-OptionsX-Content-Type-OptionsStrict-Transport-SecurityReferrer-PolicyPermissions-Policy
Docker Security
Les conteneurs sont configurés selon le principe du moindre privilège.
Mesures appliquées :
- exécution avec un utilisateur non-root
- filesystem en lecture seule
/tmpmonté entmpfs
Firewall
Le firewall UFW applique une politique restrictive.
Ports exposés :
22— SSH80— ACME challenge (certificats)443— HTTPS
Ports internes non exposés :
- PostgreSQL
- Kafka
Isolation réseau
Les services sensibles ne sont accessibles que via le réseau Docker interne.
- PostgreSQL
- Kafka
- services internes
Aucun de ces services n'est exposé publiquement.
Défense en profondeur
La sécurité repose sur plusieurs couches :
- authentification JWT
- autorisation RBAC
- reverse proxy sécurisé
- isolation réseau
- conteneurs sécurisés
- firewall restrictif
Cette approche limite l'impact d'une compromission éventuelle.