Architecture de référence¶
Vue d'ensemble¶
L'architecture de sécurité runtime repose sur trois composants principaux, chacun couvrant une fonction distincte :
graph TD
subgraph K8s["Cluster Kubernetes"]
API["API Server<br/>OPA/Gatekeeper Webhook<br/>(ValidatingAdmissionWebhook)"]
API --> Nodes
subgraph Nodes["Noeuds"]
F1["Falco (DaemonSet)<br/>eBPF probe<br/>Node 1"] --> W1["Workloads"]
F2["Falco (DaemonSet)<br/>eBPF probe<br/>Node 2"] --> W2["Workloads"]
F3["Falco (DaemonSet)<br/>eBPF probe<br/>Node 3"] --> W3["Workloads"]
end
TrivyOp["Trivy Operator (Deployment)<br/>Scanne les images periodiquement<br/>Genere des VulnerabilityReport CRD"]
GK["Gatekeeper Controller (Deployment)<br/>Evalue les ConstraintTemplates<br/>Mode audit : detecte les violations"]
end
K8s -->|Alertes et rapports| Obs
subgraph Obs["Stack Observabilite"]
Loki["Loki<br/>(alertes Falco)"]
Prom["Prometheus<br/>(metriques Falco/OPA)"]
Grafana["Grafana<br/>(dashboards securite)"]
end Composants et flux de données¶
Falco — Detection eBPF¶
Falco est déployé comme DaemonSet : une instance par nœud du cluster.
| Aspect | Detail |
|---|---|
| Déploiement | DaemonSet (1 pod par nœud) |
| Méthode de capture | eBPF CO-RE (kernel >= 5.8) ou module kernel (legacy) |
| Données observees | Appels système, accès fichiers, connexions réseau, executions de processus |
| Sortie | stdout (JSON), gRPC, HTTP webhook |
| Stockage | Aucun (stateless, les alertes sont poussees vers Loki) |
Flux de données :
- Le kernel execute un appel système (ex:
execve,open,connect) - La sonde eBPF Falco capture l'événement
- Le moteur de regles Falco evalue l'événement contre les regles chargees
- Si une regle matche, une alerte est emise (JSON sur stdout)
- Alloy/Fluentd collecte l'alerte et la pousse vers Loki
- Grafana affiche l'alerte dans le dashboard sécurité
OPA/Gatekeeper — Admission control¶
Gatekeeper est déployé comme Deployment avec un webhook d'admission.
| Aspect | Detail |
|---|---|
| Déploiement | Deployment (2+ replicas pour HA) |
| Méthode | ValidatingAdmissionWebhook |
| Données evaluees | Manifestes Kubernetes (Pod, Deployment, Service, etc.) |
| Sortie | Allow/Deny sur la requête API |
| Stockage | CRD (ConstraintTemplate, Constraint, Config) |
Flux de données :
- Un utilisateur ou un contrôleur cree/modifie une ressource Kubernetes
- L'API Server envoie la requête au webhook Gatekeeper
- Gatekeeper evalue le manifeste contre les Constraints actives
- Si une violation est détectée : la requête est rejetee avec un message explicatif
- Les violations en mode audit sont stockees dans le status de la Constraint
Trivy Operator — Scanning continu¶
Le Trivy Operator est un Deployment qui surveille les workloads et scanne automatiquement les images.
| Aspect | Detail |
|---|---|
| Déploiement | Deployment (1 replica) |
| Méthode | Reconciliation loop sur les workloads (Deployment, StatefulSet, DaemonSet) |
| Données evaluees | Images de conteneurs, configurations Kubernetes |
| Sortie | CRD VulnerabilityReport, ConfigAuditReport, ExposedSecretReport |
| Stockage | CRD dans etcd |
Flux de données :
- Un nouveau Deployment est cree ou une image est mise à jour
- Le Trivy Operator détecte le changement et cree un Job de scan
- Le Job scanne l'image contre la base de vulnerabilites (NVD, GitHub Advisory)
- Le résultat est stocke comme CRD VulnerabilityReport
- Prometheus scrape les metriques du Trivy Operator (nombre de CVE par sévérité)
- Grafana affiche un dashboard des vulnerabilites
Integration SIEM¶
Tous les composants alimentent la stack d'observabilité :
| Source | Destination | Données | Protocole |
|---|---|---|---|
| Falco (stdout JSON) | Loki (via Alloy) | Alertes de sécurité runtime | Push Loki API |
| Gatekeeper (audit) | Prometheus | Violations de politiques | Scrape metriques |
| Trivy Operator | Prometheus | Nombre de CVE par sévérité | Scrape metriques |
| Falco | Prometheus | Metriques de performance (événements/s, drops) | Scrape metriques |
| Tous | Grafana | Dashboards et alertes | Datasource Loki + Prometheus |
Metriques cles a collecter¶
# Metriques Falco
falco_events_total # Nombre total d'evenements evalues
falco_alerts_total # Nombre d'alertes declenchees par regle
falco_drops_total # Evenements perdus (saturation)
falco_kernel_events_per_second # Debit du kernel
# Metriques Gatekeeper
gatekeeper_violations # Violations detectees par contrainte
gatekeeper_request_duration # Latence d'evaluation des webhooks
gatekeeper_constraint_templates # Nombre de templates charges
# Metriques Trivy Operator
trivy_image_vulnerabilities # CVE par image et severite
trivy_config_audits # Non-conformites de configuration
trivy_exposed_secrets # Secrets exposes detectes
Dimensionnement¶
Falco¶
| Parametre | Petite infra (\<50 pods) | Moyenne (50-500 pods) | Grande (>500 pods) |
|---|---|---|---|
| CPU request | 100m | 200m | 500m |
| CPU limit | 500m | 1000m | 2000m |
| Memory request | 128Mi | 256Mi | 512Mi |
| Memory limit | 256Mi | 512Mi | 1Gi |
| Buffer eBPF | 8 Mo | 16 Mo | 32 Mo |
OPA/Gatekeeper¶
| Parametre | Petite infra | Moyenne | Grande |
|---|---|---|---|
| Replicas | 2 | 3 | 3 |
| CPU request | 100m | 200m | 500m |
| Memory request | 256Mi | 512Mi | 1Gi |
| Latence webhook | < 20ms | < 50ms | < 100ms |
Trivy Operator¶
| Parametre | Petite infra | Moyenne | Grande |
|---|---|---|---|
| Replicas | 1 | 1 | 1 |
| CPU request | 100m | 200m | 500m |
| Memory request | 128Mi | 256Mi | 512Mi |
| Scan concurrency | 1 | 3 | 5 |
| Scan interval | 24h | 12h | 6h |
Surveiller les drops Falco
Si falco_drops_total augmente, Falco n'arrive pas a traiter tous les événements du kernel. Augmentez le buffer eBPF ou les ressources CPU. Des drops signifient que des événements de sécurité sont perdus.