
Système autonome de cybersécurité alimenté par l'IA utilisant MCP, Gemini 2.0 Flash, l'observabilité Dynatrace et MongoDB. Soumission au Google Cloud Hackathon.
Soumission au Google Cloud Hackathon — Détection et remédiation autonomes orchestrées par Google Cloud Agent Builder (Vertex AI Agent), propulsées par Gemini 2.0 Flash, le Model Context Protocol (MCP) et l'observabilité Dynatrace.
Les équipes de sécurité font face à un MTTD de 30 minutes et un MTTR de 4 heures pour les incidents typiques. Le temps qu'un analyste humain détecte l'attaque, rédige la règle de pare-feu et la déploie, les dégâts sont déjà faits.
SentinelMCP réduit le MTTD à < 30 secondes et le MTTR à < 30 secondes en déployant un agent Google Cloud Agent Builder qui reçoit les webhooks d'anomalies Dynatrace, les analyse avec Gemini 2.0 Flash, et exécute de véritables outils de défense via MCP — agissant sur l'infrastructure en direct, pas seulement en alertant.
Webhook Dynatrace → Agent Builder reçoit l'alerte → Gemini raisonne → Outils MCP exécutent → Menace neutralisée
1 s 2 s 8 s 15 s 25 s total
Le résultat : un cycle de vie d'incident qui nécessitait auparavant un analyste humain et 4 heures se termine désormais de manière autonome en moins de 30 secondes, avec une piste d'audit complète dans MongoDB et des traces distribuées dans Jaeger.
┌──────────────────────────────────────────────────────────────────────┐
│ ENVIRONNEMENT SANDBOX │
│ │
│ ┌─────────────┐ 100–1000 req/s ┌──────────────────────────┐ │
│ │ attaquant │ ──────────────────►│ victim-service │ │
│ │ (DDoS/SQLi) │ │ port 8080 │ │
│ └─────────────┘ │ /admin/* API contrôle │ │
│ └────────────┬─────────────┘ │
└───────────────────────────────────────────────────│──────────────────┘
│ métriques + webhook d'anomalie
┌────────────────────────────────▼─────────────────┐
│ Dynatrace Mock (moteur d'anomalies) │
│ Score de Risque de Menace → POST /alerts/simulate│
└────────────────────────┬─────────────────────────┘
│ webhook
┌─────────────────────────────────▼──────────────────────────┐
│ Google Cloud Agent Builder (Agent Vertex AI) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Gemini 2.0 Flash ── analyse le contexte de menace │ │
│ │ Manifeste d'outils ── récupéré dynamiquement du MCP│ │
│ │ Porte HITL ── s'arrête si confiance < seuil │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────┬─────────────────────────┬───────────────────┘
│ appels REST │ écriture d'audit
┌───────────────▼──────┐ ┌────────────▼──────────┐
│ Serveur MCP :8001 │ │ MongoDB 7.0 Atlas │
│ 11 outils réels │ │ incidents + traces │
└───────────┬──────────┘ └───────────────────────┘
│ agit sur l'infra en direct
┌───────────▼──────────┐
│ FastAPI :8000 │
│ victim-service:8080 │
└──────────────────────┘
┌──────────────────────────────────────────────────┐
│ STACK D'OBSERVABILITÉ │
│ Collecteur OTel ──► Jaeger (traces distribuées)│
│ Prometheus ──────────────► Grafana │
└──────────────────────────────────────────────────┘
Principe de conception clé : Dégradation progressive + Humain dans la boucle (HITL). L'agent Agent Builder s'arrête en toute sécurité et redonne le contrôle à l'opérateur lorsque qu'il ne peut pas prendre une décision avec une confiance suffisante — il ne devine jamais sur une infrastructure critique.
Les trois services sont déployés et fonctionnent sur Google Cloud Run :
| Service | URL |
|---|---|
| Centre de commande (Tableau de bord) | https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard |
| Documentation API Swagger | https://sentinel-api-62d3d66zda-uc.a.run.app/docs |
| Vérification de santé | https://sentinel-api-62d3d66zda-uc.a.run.app/health |
| Catalogue d'outils MCP | https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools |
| Service victime | https://victim-service-62d3d66zda-uc.a.run.app |
Exécuter une attaque en direct contre la production :
.\attack.production.ps1 status # vérifier que tous les services sont sains
.\attack.production.ps1 ddos # DDoS — Gemini bloque les IP + limite de débit
.\attack.production.ps1 sql # Injection SQL — Gemini active le WAF
.\attack.production.ps1 brute # Force brute — Gemini bloque les IP sources
.\attack.production.ps1 stop # réinitialiser les défenses
Le conteneur attaquant s'exécute localement et cible le service victime Cloud Run via HTTPS. Observez le tableau de bord du Centre de commande pour le cycle complet détection → raisonnement → neutralisation en temps réel.
Google Cloud Agent Builder (Vertex AI ReasoningEngine) est l'orchestrateur central de SentinelMCP. L'implémentation se trouve dans sentinel_mcp/agent/agent_builder.py.
SentinelAgent hérite de vertexai.preview.reasoning_engines.Queryable — l'interface programmatique officielle d'Agent Builder — et peut être exécuté localement ou déployé vers le service géré Agent Builder avec une seule commande.
| Responsabilité | Implémentation |
|---|---|
| Réception du webhook | SentinelAgent.query(incident=...) — appelé par Agent Builder pour chaque alerte Dynatrace |
| Déclarations d'outils | 6 outils MCP enregistrés comme objets FunctionDeclaration de Vertex AI dans set_up() |
| Raisonnement | Gemini 2.0 Flash lit le contexte de menace + le catalogue d'outils, sélectionne les outils minimaux, les invoque automatiquement |
| Porte HITL | Si Gemini ne renvoie aucun appel d'outil (confiance < seuil), escalate_to_humans=True est émis |
| Audit | Chaque appel d'outil est enregistré dans MongoDB Atlas + exporté comme span OTel vers Jaeger |
Code clé — sentinel_mcp/agent/agent_builder.py:
class SentinelAgent(reasoning_engines.Queryable):
def set_up(self):
# MCP tools as Vertex AI FunctionDeclarations — Gemini selects at runtime
mcp_tools = Tool(function_declarations=[
FunctionDeclaration(name="block_ip_address", ...),
FunctionDeclaration(name="activate_waf", ...),
FunctionDeclaration(name="rate_limit_requests", ...),
FunctionDeclaration(name="scale_service", ...),
FunctionDeclaration(name="collect_forensic_logs", ...),
FunctionDeclaration(name="analyze_attack_pattern", ...),
])
self._model = GenerativeModel("gemini-2.0-flash-001", tools=[mcp_tools])
self._chat = self._model.start_chat()
def query(self, *, incident: dict) -> dict:
# Entry point — Agent Builder calls this for every Dynatrace webhook
response = self._chat.send_message(threat_prompt(incident))
tool_calls = [{"name": p.function_call.name, "args": dict(p.function_call.args)}
for p in response.candidates[0].content.parts if p.function_call]
return {"engine": "agent_builder", "tool_calls": tool_calls, ...}
Déployer sur Google Cloud Agent Builder :
# Tester localement (pas besoin de GCP avec le backend google_ai_studio)
python scripts/deploy_agent_builder.py --test-only
# Déployer vers le point de terminaison géré Agent Builder
python scripts/deploy_agent_builder.py --project mon-projet-gcp
Définir Agent Builder comme backend actif :
# .env
GEMINI_BACKEND=agent_builder
GOOGLE_CLOUD_PROJECT=mon-projet-gcp
VERTEX_LOCATION=us-central1
SentinelMCP intègre l'observabilité Dynatrace à trois niveaux :
Pipeline OpenTelemetry — Le sentinel-otel-collector ingère les spans et métriques du cœur FastAPI et les transmet au point de terminaison Dynatrace Mock (OTLP/HTTP :14318). Chaque incident, exécution d'outil et appel LLM est tracé de bout en bout avec des identifiants de corrélation complets.
Moteur d'anomalies avec déclenchement automatique — dynatrace-mock exécute une boucle en arrière-plan qui surveille http_requests_total, calcule un Score de Risque de Menace (dynatrace_mock_sentinel_risk_score, 0–10), et envoie automatiquement POST /api/v1/alerts/simulate/{type} à SentinelMCP lorsque le score franchit le seuil critique — reproduisant exactement le comportement d'un webhook de détection d'anomalie Dynatrace Davis en production.
Tableau de bord Grafana alimenté par les métriques Dynatrace — La jauge de Score de Risque et la chronologie consomment directement dynatrace_mock_sentinel_risk_score, permettant de visualiser le moment précis où Dynatrace a signalé l'anomalie par rapport au moment où SentinelMCP a atteint la neutralisation.
L'agent Gemini découvre dynamiquement ses capacités de défense à l'exécution — aucune liste d'outils codée en dur, aucune réécriture de prompt lorsque les capacités changent :
GET /mcp/tools → renvoie 11 descripteurs d'outils → Gemini sélectionne et invoque les outils
Chaque outil est étiqueté RÉEL ou Audit uniquement dans le catalogue en direct. Gemini lit ce drapeau, comprend ce qu'il peut réellement faire sur l'infrastructure en direct, et justifie chaque sélection d'outil dans sa trace de raisonnement. L'ajout d'une nouvelle capacité de défense ne nécessite aucun travail d'ingénierie de prompt.
Outils qui agissent sur l'infrastructure en direct :
| Outil | Ce qu'il fait |
|---|---|
block_ip_address | POST /admin/block_ip — bloque les IP des attaquants dans le middleware en cours |
activate_waf | POST /admin/waf — active le mode de blocage WAF dans le service en cours |
rate_limit_requests | POST /admin/rate_limit — limiteur de débit à fenêtre glissante, actif immédiatement |
scale_service | SDK Docker via socket — démarre de vrais conteneurs de réplicas sous charge |
rollback | POST /admin/reset_defenses — démontre le cycle de vie complet d'un incident : attaque → défense → restauration |
collect_forensic_logs | Capture des preuves réelles depuis les conteneurs en cours pour examen post-incident |
build_attack_timeline | Chronologie à partir des journaux des conteneurs en direct |
analyze_attack_pattern | Classifie le type d'attaque avec des données réelles de contexte d'incident |
identify_iocs | Extrait les IP réelles, user-agents et charges utiles des fichiers d'incident en direct |
Prérequis : Docker Desktop 24+, identifiants Google Cloud ou clé API AI Studio, ~3 Go de disque, ~2 Go de RAM.
docker compose up -d --build
Le premier téléchargement télécharge les images de base (~3 Go, 5–10 min). Les exécutions suivantes prennent moins d'1 minute.
cd simulacion
docker compose up -d victim-service
cd ..
docker compose ps
# Attendu : 8 services en cours d'exécution / sains
curl http://localhost:8000/health
# Attendu : {"status": "healthy", "service": "SentinelMCP", ...}
.\attack.ps1 ddos # Attaque DDoS (par défaut)
.\attack.ps1 sql # Injection SQL
.\attack.ps1 brute # Force brute
.\attack.ps1 stop # Arrêter l'attaque + réinitialiser les défenses
.\attack.ps1 status # Vérifier l'état du système
Ouvrez le Centre de commande pendant l'attaque :
http://localhost:8000/dashboard
Observez les 4 phases en ~25 secondes :
MENACE DÉTECTÉE — Dynatrace déclenche l'alerteDÉFENSE EN COURS — Gemini lit le catalogue d'outils MCP, sélectionne les actions, enregistre le raisonnementNEUTRALISÉE — MTTD et MTTR affichés avec la piste d'audit complèteSentinelMCP est construit sur Gemini. Choisissez la méthode d'authentification adaptée à votre environnement :
Option A — Google AI Studio (configuration la plus rapide) :
# Modifier .env
GOOGLE_API_KEY=AIza...votre_clé_ici
GEMINI_BACKEND=google_ai_studio
Option B — Vertex AI sur Google Cloud :
gcloud auth application-default login
.\scripts\setup_gcloud.ps1 # définit le projet, crée la clé SA, met à jour .env automatiquement
Redémarrez ensuite le moteur IA : docker compose restart api
| URL | Ce qu'elle affiche |
|---|---|
| https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard | Centre de commande — interface utilisateur principale de la démo |
| https://sentinel-api-62d3d66zda-uc.a.run.app/docs | Swagger — explorateur API interactif |
| https://sentinel-api-62d3d66zda-uc.a.run.app/health | Vérification de santé |
| https://sentinel-api-62d3d66zda-uc.a.run.app/api/v1/incidents | Historique des incidents (JSON) |
| https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools | Catalogue d'outils MCP en direct tel que lu par Gemini |
| https://victim-service-62d3d66zda-uc.a.run.app | Service victime (la cible sous attaque) |
| URL | Ce qu'elle affiche |
|---|---|
http://localhost:8000/dashboard | Centre de commande — interface utilisateur principale de la démo |
http://localhost:8000/docs | Swagger — explorateur API interactif |
http://localhost:8000/api/v1/incidents | Historique des incidents (JSON) |
http://localhost:8000/api/v1/incidents/statistics/summary | Moyennes MTTD / MTTR sur tous les incidents |
http://localhost:8001/mcp/tools | Catalogue d'outils MCP en direct tel que lu par Gemini |
http://localhost:8080 | Service victime (la cible sous attaque) |
http://localhost:14499 | Dynatrace Mock — métriques en direct + moteur d'anomalies |
http://localhost:16686 | Jaeger — traces distribuées |
http://localhost:9090 | Prometheus — métriques brutes |
http://localhost:3000 | Grafana — tableau de bord d'infrastructure (admin / admin) |
| Scénario | Script | Ce qui se passe |
|---|---|---|
| DDoS | .\attack.ps1 ddos | Inondation de 1000 req/s ; Gemini bloque les IP + active la limite de débit |
| Injection SQL | .\attack.ps1 sql | Détection de charge utile ; Gemini active le WAF en mode blocage |
| Force brute | .\attack.ps1 brute | Martèlement de connexion ; Gemini bloque les IP sources + active le WAF |
| Mode auto | Tableau de bord 🎯 Auto ON | Attaques aléatoires toutes les 45–90s, réponse entièrement autonome |
GET http://localhost:8001/mcp/tools
| Outil | Catégorie | Mode |
|---|---|---|
analyze_attack_pattern | analyse | RÉEL |
identify_iocs | analyse | RÉEL |
block_ip_address | défense | RÉEL → victim-service |
activate_waf | défense | RÉEL → victim-service |
rate_limit_requests | défense | RÉEL → victim-service |
scale_service | défense | RÉEL → SDK Docker |
collect_forensic_logs | forensique | RÉEL |
build_attack_timeline | forensique | RÉEL |
patch_vulnerabilities | remédiation | Audit uniquement |
apply_hardening | remédiation | Audit uniquement |
rollback | remédiation | RÉEL → victim-service |
SentinelMCP emploie un Mode d'audit à sécurité intégrée. Si l'infrastructure cible est inaccessible, l'agent enregistre les actions prévues sans casser le pipeline, assurant une dégradation progressive. Gemini lit le drapeau RÉEL / Audit uniquement dans le catalogue — il sait précisément ce qu'il peut exécuter par rapport à ce qu'il peut seulement recommander.
sentinel_mcp/
├── api/ Cœur FastAPI — routes, schémas, interface utilisateur du tableau de bord
├── agent/ Moteur de décision + fournisseurs LLM (Gemini 2.0 Flash, Vertex AI)
├── mcp_server/ Serveur MCP + implémentations des 11 outils
├── services/ Service d'incidents, orchestrateur de remédiation, calculateur de menace
├── observability/ Fournisseurs OTel / Dynatrace / SigNoz
└── core/ Configuration, journalisation, exceptions
simulacion/
├── victim-service/ Service cible FastAPI avec plan de contrôle /admin/*
└── attacker/ Moteur d'attaque Python (DDoS / SQLi / force brute)
docker/
├── prometheus.yml Configuration de collecte (victim-service à intervalle de 5s)
└── grafana/ Tableau de bord auto-provisionné — 6 panneaux de témoin d'infrastructure
| Couche | Technologie |
|---|---|
| Orchestrateur d'agent | Google Cloud Agent Builder (Agent Vertex AI) |
| LLM | Gemini 2.0 Flash — via SDK google-genai |
| Protocole d'outils | MCP (Model Context Protocol) — 11 outils réels |
| API | FastAPI + Uvicorn (Python 3.11) |
| Base de données | MongoDB 7.0 Atlas (Motor asynchrone) |
| Observabilité | OpenTelemetry → Dynatrace |
| Traçage | Jaeger |
| Métriques | Prometheus + Grafana |
| Client HTTP | httpx (asynchrone) |
| Orchestration de conteneurs | Docker Compose v2 |