Projet Production · DevSecOps · K3s

AI Security
Sentinel

Agent de surveillance sécurité temps réel pour clusters Kubernetes. Détection, analyse IA, remédiation GitOps automatique et métriques RSSI — 5 phases déployées sur homelab de production.

Voir le repo GitHub Résultats mesurés →
github.com/Pierre-DevOps/k3s-security-sentinel Scanner Python + manifests K8s publics · Tag v1.0
Voir →
31→13
Findings réduits
-58% après remédiation
100→52
Score de risque
CRIT → WARN
2h48
MTTR Secrets
Mean Time To Remediate
5 min
Cycle de scan
Continu en production
5
Phases déployées
100% opérationnel
Architecture
Pipeline bout en bout
// Flux de détection → remédiation
🐍
Scanner
Python
(5 min)
📊
Prometheus
+ Score
0-100
🔔
Alert-
manager
Rules
⚙️
n8n
Workflow
Auto
🤖
Groq
LLaMA 3.3
70B
🔀
GitHub
PR Auto
GitOps
📧
Brevo
Email
RSSI
# Données réelles — PostgreSQL scan_history
SELECT finding_type,
  EXTRACT(EPOCH FROM (
    MIN(scanned_at) FILTER (WHERE fixed = true) -
    MIN(scanned_at) FILTER (WHERE fixed = false)
  ))/60 AS mttr_minutes
FROM scan_history GROUP BY finding_type;

-- Résultats production :
exposed_secrets167.9 min (2h48)
missing_network_policy888.9 min (14h49)
run_as_rooten cours
Chronologie réelle
L'histoire en 5 actes
Acte 1 — Détection

Le scanner trouve 100/100 CRITIQUE

Dès le premier scan, AI Security Sentinel détecte 31 findings sur le cluster de production. Score de risque : 100/100. Niveau CRITIQUE. L'alerte part automatiquement.

Grafana · Edition Technique
Score de risque : 100/100 CRITIQUE — Premier scan
Grafana AI Security Sentinel — Score 100 CRITIQUE, 18 Containers Root, 7 NetworkPolicy manquantes
Grafana AI Security Sentinel — Score 100 CRITIQUE, 18 Containers Root, 7 NetworkPolicy manquantes

01 juin 2026 · Scan initial · 18 containers root, 7 NetworkPolicy manquantes, 2 ServiceAccounts permissifs

Score
100/100
Niveau CRITIQUE
Containers Root
18
runAsNonRoot absent
NetworkPolicy
7
Namespaces non isolés
Scanner
✓ Actif
Scan toutes les 5 min
Acte 2 — Analyse IA

n8n déclenche Groq — Pipeline en 5.112s

Alertmanager envoie le webhook à n8n. Le workflow récupère les métriques Prometheus, interroge Groq LLaMA 3.3 70B, parse la réponse IA, évalue l'éligibilité à l'autofix, et lance le pipeline GitOps. Durée totale : 5.112 secondes.

n8n · shadow-twin.pierre-devops.com
Workflow exécuté — Succeeded in 5.112s · ID#1350
n8n workflow AI Security Sentinel — Alertmanager → Groq LLaMA → GitHub → Brevo
n8n workflow AI Security Sentinel — Alertmanager → Groq LLaMA → GitHub → Brevo

Nodes visibles : POST Webhook Alertmanager → Alert firing? → GET Métriques Prometheus → Parse → Groq LLaMA 3.3 Analysis → Auto-fix éligible? → GitHub Get SHA → Create branch → Push fix → Create PR → Prépare email Brevo → Envoi alertes → Respond OK

Acte 3 — Email & PR Automatiques

Email Brevo livré · Pull Request GitHub créée

Groq génère l'analyse complète : cause racine, résumé, actions immédiates, commande kubectl. L'email part via Brevo. En parallèle, une PR est créée automatiquement sur GitHub sur la branche security-fixes/SecurityRiskCritical-1780302944493.

Brevo · [email protected]
Email CRITIQUE reçu — Score 100/100 · Analyse Groq LLaMA
Email Brevo AI Security Sentinel — CRITICAL Score 100/100, cause racine, actions immédiates
Email Brevo AI Security Sentinel — CRITICAL Score 100/100, cause racine, actions immédiates
GitHub · Pierre-DevOps/k3s-security-sentinel
Pull Request #1 créée automatiquement
GitHub Pull Requests — [AI Security Sentinel] Auto-remediation CRITICAL score 100/100
GitHub Pull Requests — [AI Security Sentinel] Auto-remediation CRITICAL score 100/100

PR #1 ouverte automatiquement par le pipeline n8n → GitHub API

GitHub · Pull Request #1 — Détail
Root Cause · Summary · Proposed Fix — Généré par Groq LLaMA 3.3 70B
GitHub PR détail — Risk Score 100/100, CRITICAL, Root Cause, Actions immédiates, Proposed Fix
GitHub PR détail — Risk Score 100/100, CRITICAL, Root Cause, Actions immédiates, Proposed Fix

Le manifest correctif est généré par l'IA. Review manuelle requise avant merge → ArgoCD sync.

GitHub · Branches
Branche security-fixes créée automatiquement — 0 conflit avec main
GitHub Branches — security-fixes/SecurityRiskCritical-1780302944493, PR #1
GitHub Branches — security-fixes/SecurityRiskCritical-1780302944493, PR #1

Branche créée 3 minutes après l'alerte. 0 | 1 commit ahead. Prête à merger.

Acte 4 — Remédiation

Score 100 → 52 · -58% de findings

Après remédiation guidée : 3 secrets exposés → 0, 7 NetworkPolicy appliquées. Le score passe de 100 (CRITIQUE) à 52 (WARNING). Réduction de risque : 48%. Le cluster est mesurable, historisé, traçable.

Grafana · Edition Technique — Après remédiation
Score 52/100 WARN · Secrets OK · NetworkPolicy OK
Grafana AI Security Sentinel après remédiation — Score 52 WARN, Secrets exposés OK, NetworkPolicy 0
Grafana AI Security Sentinel après remédiation — Score 52 WARN, Secrets exposés OK, NetworkPolicy 0

Score passé de 100 à 52. Secrets exposés : OK. NetworkPolicy manquantes : 0. 13 findings containers root restants.

Score actuel
52/100
Niveau WARNING
Secrets
✓ OK
0 secret exposé
NetworkPolicy
✓ OK
7 namespaces isolés
Réduction risque
-48%
100 → 52
Grafana · Risk Trend — Historique complet
Évolution du score sur 7 jours · PostgreSQL scan_history
Grafana AI Security Sentinel Risk Trend — évolution score 7 jours, findings historique complet
Grafana AI Security Sentinel Risk Trend — évolution score 7 jours, findings historique complet
Acte 5 — Métriques RSSI

MTTR mesuré · Dashboard décisionnel · PostgreSQL

La Phase 5 transforme les données techniques en indicateurs décisionnels. MTTR Secrets : 2.80h. MTTR NetworkPolicy : 14.8h. Réduction de risque : 48%. Le dashboard Edition RSSI est lisible par un DSI sans connaissance Kubernetes. PostgreSQL historise chaque scan.

Grafana · Edition RSSI — Vue décisionnelle
MTTR 2.80h · 14.8h · Réduction 48% · Conformité totale
Grafana Edition RSSI — MTTR Données Sensibles 2.80h, MTTR Isolation Réseau 14.8h, Réduction 48%, Score 52
Grafana Edition RSSI — MTTR Données Sensibles 2.80h, MTTR Isolation Réseau 14.8h, Réduction 48%, Score 52

Dashboard lisible par un RSSI ou DSI sans connaissance Kubernetes. Indicateurs de conformité tous verts.

Grafana · Edition RSSI — MTTR détaillé
Mean Time To Remediate par type de finding
Grafana AI Security Sentinel MTTR — Secrets exposés 2.80h, NetworkPolicy manquantes 14.8h, Containers Root En cours
Grafana AI Security Sentinel MTTR — Secrets exposés 2.80h, NetworkPolicy manquantes 14.8h, Containers Root En cours

MTTR Secrets exposés : 2.80 hours · MTTR NetworkPolicy manquantes : 14.8 hours · Containers Root : En cours

PostgreSQL · scan_history
Historique des scans en base de données — toutes les 5 minutes
PostgreSQL scan_history — 9 scans, score 52 WARN, 13 findings, root_containers 13, exposed_secrets 0
PostgreSQL scan_history — 9 scans, score 52 WARN, 13 findings, root_containers 13, exposed_secrets 0

kubectl exec postgres-sentinel — 9 scans consécutifs, toutes les 5 min. Score stable 52/100. 0 secret exposé confirmé.

Développement
Les 5 phases du projet
01
Détecter
✓ Déployé

Scanner Python interrogeant l'API Kubernetes toutes les 5 minutes. Détection de 6 types de failles, calcul d'un score de risque 0-100 exposé via Prometheus. Socat proxy pour le scraping cross-serveur.

PythonK8s APIPrometheusScoring 0-100socat proxy
02
Analyser & Corriger
✓ Déployé

Alertmanager déclenche n8n sur chaque finding critique. Groq LLaMA 3.3 70B analyse la cause racine et génère les correctifs. Création automatique de PR GitHub vers la branche security-fixes/AlertName-timestamp.

Alertmanagern8nGroq LLaMA 3.3GitHub APIGitOps PR
03
Visualiser
✓ Déployé

Dashboard Grafana double format : Edition Technique (courbes de score, histogramme findings par type, état des namespaces) et Edition RSSI (indicateurs décisionnels lisibles par la direction sans connaissance Kubernetes).

GrafanaDashboard TechniqueEdition RSSIRapport hebdomadaire
04
Historiser
✓ Déployé

Chaque scan (toutes les 5 min) est persisté dans PostgreSQL avec timestamp, score et findings détaillés. Vues SQL pour Risk Trend sur 30 jours, suivi des régressions et évolution de la posture sécurité.

PostgreSQLscan_historyRisk TrendRétention 30j
05
Mesurer — MTTR
✓ Déployé

Calcul automatique du MTTR (Mean Time To Remediate) par type de finding depuis PostgreSQL. Métriques exposées en Prometheus, affichées dans Grafana Edition RSSI. Indicateur clé de l'efficacité de remédiation.

MTTRMétriques PrometheusIndicateurs RSSIEfficacité remédiation
Détection
6 types de failles détectées
🔓
Containers root
Pods sans securityContext runAsNonRoot — vecteur d'escalade de privilèges critique.
🔒
Secrets en clair
Variables d'environnement contenant des credentials non chiffrés (tokens, passwords).
🌐
NetworkPolicy absente
Namespaces sans isolation réseau — trafic lateral possible entre pods.
🚪
NodePorts non autorisés
Ports exposés hors whitelist — surface d'attaque élargie vers le réseau LAN.
👤
ServiceAccount permissif
Comptes avec ClusterRole trop larges — violation du principe du moindre privilège.
🛡️
allowPrivilegeEscalation
Containers autorisant l'escalade de privilèges sans restriction explicite.
Données réelles
Résultats mesurés en production
Indicateur Avant Après Évolution
Findings totaux 31 13 -58%
Score de risque 100/100 [CRIT] 52/100 [WARN] -48 pts
Secrets exposés 3 findings 0 -100% ✓
NetworkPolicy 0 namespaces 7 namespaces Corrigé ✓
MTTR Secrets exposés 167.9 min 2h48
MTTR NetworkPolicy 888.9 min 14h49
MTTR moyen global 528 min 8h49
Scans PostgreSQL Toutes les 5 min Continu
GitHub Tag v1.0 PR auto ✓
Technologies
Stack technique
☸️
K3s
🐍
Python
📊
Prometheus
🔔
Alertmanager
📈
Grafana
⚙️
n8n
🤖
Groq LLaMA
🗄️
PostgreSQL
🐙
GitHub API
📧
Brevo SMTP
🚀
ArgoCD
🐟
Flask API

Déployer sur votre cluster ?

Ce projet est livrable en 2 semaines sur un cluster Kubernetes client.
Scanner opérationnel · Dashboard RSSI · Rapport hebdomadaire automatique · MTTR mesuré.