Aller au contenu principal

Durcissement Sécurité

Liste de vérification et guide de durcissement sécurité pour la Plateforme STOA en production.

Couches de Sécurité

┌─────────────────────────────────────────┐
│ Réseau (TLS, NetworkPolicy, pare-feu) │
├─────────────────────────────────────────┤
│ Identité (Keycloak, OIDC, mTLS) │
├─────────────────────────────────────────┤
│ Application (RBAC, quotas, blocage SSRF)│
├─────────────────────────────────────────┤
│ Conteneur (PSS, seccomp, FS en lecture) │
├─────────────────────────────────────────┤
│ Données (chiffrement au repos, audit) │
└─────────────────────────────────────────┘

Configuration TLS

TLS Ingress

Tous les endpoints externes doivent utiliser TLS 1.2+ :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: stoa-gateway
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-protocols: "TLSv1.2 TLSv1.3"
spec:
tls:
- secretName: gateway-tls
hosts:
- mcp.<VOTRE_DOMAINE>

TLS Interne

Pour le chiffrement service-à-service dans le cluster, activez mTLS via le gateway. Voir Configuration mTLS.

Politiques Réseau

Isolation des Tenants

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: tenant-isolation
namespace: stoa-system
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: stoa-system
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: ingress-nginx
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
- to:
- podSelector: {}

Restriction de Sortie du Gateway

Limitez les connexions sortantes du gateway aux backends connus :

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: gateway-egress
namespace: stoa-system
spec:
podSelector:
matchLabels:
app: stoa-gateway
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
app: control-plane-api
ports:
- port: 8000
- to:
- namespaceSelector: {}
ports:
- port: 443 # Backends HTTPS
- port: 53 # DNS
protocol: UDP

Sécurité des Conteneurs

Standards de Sécurité des Pods

Appliquez le standard de sécurité des pods restricted :

apiVersion: v1
kind: Namespace
metadata:
name: stoa-system
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted

Contexte de Sécurité (Tous les Conteneurs)

securityContext:
privileged: false
runAsNonRoot: true
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true # Pas pour les conteneurs nginx
capabilities:
drop:
- ALL
seccompProfile:
type: RuntimeDefault

Protection SSRF

Le STOA Gateway inclut une liste de blocage SSRF intégrée qui rejette les URLs backend pointant vers :

  • Adresses loopback (127.0.0.0/8, ::1)
  • Réseaux privés (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
  • Link-local (169.254.0.0/16 — métadonnées AWS)
  • IPv6 unique-local (fd00::/8)

C'est une défense en profondeur : les URLs backend proviennent de données configurées par l'administrateur, mais un Control Plane compromis pourrait injecter des cibles internes.

En-têtes de Sécurité

Le gateway ajoute automatiquement ces en-têtes à chaque réponse :

En-têteValeurObjectif
X-Content-Type-OptionsnosniffPrévenir le sniffing MIME
X-Frame-OptionsDENYPrévenir le clickjacking
X-XSS-Protection0Désactiver le filtre XSS hérité
Referrer-Policystrict-origin-when-cross-originContrôler la fuite de referrer
Permissions-Policycamera=(), microphone=(), geolocation=()Restreindre les APIs navigateur

Gestion des Secrets

Architecture Recommandée

Infisical (auto-hébergé) → Secrets K8s → Variables d'env des pods
  • Ne jamais coder les secrets en dur dans le code, les valeurs Helm ou les ConfigMaps
  • Utiliser secretRef dans les specs de pods pour référencer les Secrets K8s
  • Effectuer la rotation des secrets via Infisical ; les pods récupèrent les changements au redémarrage

Voir Gestion des Secrets pour la configuration détaillée.

Liste de Vérification de Rotation des Secrets

SecretFréquence de RotationMéthode
Mot de passe de base de données90 joursInfisical + redémarrage des pods
Secrets clients Keycloak90 joursAdmin Keycloak + mise à jour de config
Token admin du Gateway90 joursSecret K8s + redémarrage des pods
Certificats TLSAutomatique (cert-manager)cert-manager gère le renouvellement
Clés APIÀ la demandeInitiée par le consommateur via API

Alignement Réglementaire

DORA (Digital Operational Resilience Act)

Exigence DORACapacité STOA
Gestion des risques ICTRBAC, piste d'audit, monitoring
Signalement d'incidentsAlertmanager + logs d'audit
Tests de résilience opérationnelleBenchmarks Gateway Arena
Risques tiersPatron adaptateur multi-gateway
Partage d'informationsPiste d'audit OpenSearch

NIS2 (Directive Sécurité des Réseaux et des Systèmes d'Information)

Exigence NIS2Capacité STOA
Analyse des risquesEn-têtes de sécurité, liste de blocage SSRF
Gestion des incidentsAlertes Prometheus, piste d'audit
Sécurité de la chaîne d'approvisionnementGénération SBOM (CI), commits signés
ChiffrementTLS 1.2+, support mTLS
Contrôle d'accèsRBAC Keycloak, 4 rôles

La Plateforme STOA fournit des capacités techniques qui soutiennent les efforts de conformité réglementaire. Cela ne constitue pas un avis juridique ni une garantie de conformité. Les organisations doivent consulter un conseiller juridique qualifié pour leurs obligations réglementaires.

Liste de Vérification de Durcissement Production

  • TLS sur tous les endpoints ingress
  • NetworkPolicy appliquée au namespace stoa-system
  • Standard de sécurité des pods défini à restricted
  • Protection contre la force brute Keycloak activée
  • Durées de vie des tokens réduites (5min accès, 15min inactivité)
  • Liste de blocage SSRF active (par défaut)
  • En-têtes de sécurité actifs (par défaut)
  • Secrets dans Infisical/Vault (pas dans env ou ConfigMap)
  • Rôles RBAC attribués (pas d'accès admin par défaut)
  • Piste d'audit activée (OpenSearch)
  • Alerting configuré (Alertmanager)
  • Images de conteneurs scannées (Trivy en CI)
  • Commits signés imposés

Voir Aussi