
自律型AI搭載のサイバー防御システム(MCP、Gemini 2.0 Flash、Dynatraceオブザーバビリティ、MongoDBを使用)。Google Cloud Hackathonへの提出作品。
Google Cloud Hackathon 提出作品 — 自律的な脅威検出と対処を Google Cloud Agent Builder (Vertex AI Agent) が調整し、Gemini 2.0 Flash、Model Context Protocol (MCP)、Dynatrace 可観測性を活用。
セキュリティチームは、一般的なインシデントに対して 30 分の MTTD と 4 時間の MTTR を経験しています。人間のアナリストが攻撃を検出し、ファイアウォールルールを作成してデプロイする頃には、被害は発生しています。
SentinelMCP は、Google Cloud Agent Builder エージェント を導入することで MTTD を 30 秒未満、MTTR を 30 秒未満 に短縮します。このエージェントは Dynatrace の異常検知 Webhook を受信し、Gemini 2.0 Flash で分析し、MCP を介して実際の防御ツールを呼び出します — アラートを出すだけでなく、実際のインフラストラクチャに作用します。
Dynatrace webhook → Agent Builder receives alert → Gemini reasons → MCP tools execute → Threat neutralized
1 s 2 s 8 s 15 s 25 s total
その結果、以前は人間のアナリストと 4 時間を要していたインシデントライフサイクルが、30 秒未満で自律的に完了し、MongoDB に完全な監査証跡、Jaeger に分散トレースが記録されます。
┌──────────────────────────────────────────────────────────────────────┐
│ サンドボックス環境 │
│ │
│ ┌─────────────┐ 100–1000 req/s ┌──────────────────────────┐ │
│ │ attacker │ ──────────────────►│ victim-service │ │
│ │ (DDoS/SQLi) │ │ port 8080 │ │
│ └─────────────┘ │ /admin/* control API │ │
│ └────────────┬─────────────┘ │
└───────────────────────────────────────────────────│──────────────────┘
│ metrics + anomaly webhook
┌────────────────────────────────▼─────────────────┐
│ Dynatrace Mock (anomaly engine) │
│ Threat Risk Score → fires POST /alerts/simulate │
└────────────────────────┬─────────────────────────┘
│ webhook
┌─────────────────────────────────▼──────────────────────────┐
│ Google Cloud Agent Builder (Vertex AI Agent) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Gemini 2.0 Flash ── reasons over threat context │ │
│ │ Tool manifest ── dynamically fetched from MCP │ │
│ │ HITL gate ── halts if confidence < threshold │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────┬─────────────────────────┬───────────────────┘
│ REST calls │ audit write
┌───────────────▼──────┐ ┌────────────▼──────────┐
│ MCP Server :8001 │ │ MongoDB 7.0 Atlas │
│ 11 real tools │ │ incidents + traces │
└───────────┬──────────┘ └───────────────────────┘
│ acts on live infra
┌───────────▼──────────┐
│ FastAPI :8000 │
│ victim-service :8080│
└──────────────────────┘
┌──────────────────────────────────────────────────┐
│ 可観測性スタック │
│ OTel Collector ──► Jaeger (分散トレース) │
│ Prometheus ──────────────► Grafana │
└──────────────────────────────────────────────────┘
主要な設計原則: グレースフルデグラデーション + ヒューマンインザループ (HITL)。Agent Builder エージェントは、十分な信頼度で判断できない場合には安全に停止し、オペレーターに制御を戻します — 重要なインフラストラクチャに対して推測による判断は決して行いません。
3 つのサービスすべてが Google Cloud Run にデプロイされ、稼働中です:
本番環境に対してライブ攻撃を実行:
.\attack.production.ps1 status # すべてのサービスが正常であることを確認
.\attack.production.ps1 ddos # DDoS — Gemini が IP をブロック + レート制限
.\attack.production.ps1 sql # SQL インジェクション — Gemini が WAF を有効化
.\attack.production.ps1 brute # ブルートフォース — Gemini が送信元 IP をブロック
.\attack.production.ps1 stop # 防御をリセット
攻撃コンテナはローカルで実行され、Cloud Run 上の victim-service を HTTPS 経由でターゲットにします。コマンドセンターのダッシュボードで、検出 → 分析 → 無力化の全サイクルをリアルタイムで確認できます。
Google Cloud Agent Builder (Vertex AI ReasoningEngine) は、SentinelMCP の中央オーケストレーターです。実装は sentinel_mcp/agent/agent_builder.py にあります。
SentinelAgent は vertexai.preview.reasoning_engines.Queryable を継承しています — これは公式の Agent Builder プログラムインターフェースであり、ローカルで実行することも、単一のコマンドで管理された Agent Builder サービスにデプロイすることもできます。
主要コード — 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, ...}
Google Cloud Agent Builder にデプロイ:
# ローカルでテスト (google_ai_studio バックエンドを使用すれば GCP は不要)
python scripts/deploy_agent_builder.py --test-only
# 管理された Agent Builder エンドポイントにデプロイ
python scripts/deploy_agent_builder.py --project my-gcp-project
Agent Builder をアクティブバックエンドとして設定:
# .env
GEMINI_BACKEND=agent_builder
GOOGLE_CLOUD_PROJECT=my-gcp-project
VERTEX_LOCATION=us-central1
SentinelMCP は、Dynatrace の可観測性を 3 つの層で統合しています:
OpenTelemetry パイプライン — sentinel-otel-collector は FastAPI コアからのスパンとメトリクスを取り込み、Dynatrace Mock エンドポイント (OTLP/HTTP :14318) に転送します。すべてのインシデント、ツール実行、LLM 呼び出しは、完全な相関 ID でエンドツーエンドにトレースされます。
異常検知エンジンと自動トリガー — dynatrace-mock はバックグラウンドループを実行し、http_requests_total を監視して 脅威リスクスコア (dynatrace_mock_sentinel_risk_score、0–10) を計算し、スコアが重大しきい値を超えると自動的に POST /api/v1/alerts/simulate/{type} を SentinelMCP に送信します — これは本番の Dynatrace Davis 異常検知 Webhook の正確な動作を再現しています。
Dynatrace メトリクスを利用した Grafana ダッシュボード — リスクスコアゲージとタイムラインは dynatrace_mock_sentinel_risk_score を直接使用しており、Dynatrace が異常をフラグした瞬間と SentinelMCP が無力化を達成した瞬間を正確に可視化できます。
Gemini エージェントは、ランタイムに防御機能を動的に発見します — ハードコードされたツールリストはなく、機能が変更されてもプロンプトの書き換えは不要です:
GET /mcp/tools → 11 個のツール記述子を返す → Gemini がツールを選択して呼び出し
各ツールには、ライブカタログで REAL または Audit-Only のラベルが付けられています。Gemini はこのフラグを読み取り、実際のインフラストラクチャで何が実行できるかを理解し、推論トレースですべてのツール選択を正当化します。新しい防御機能を追加するために、プロンプトエンジニアリングは一切不要です。
実際のインフラストラクチャに作用するツール:
要件: Docker Desktop 24+、Google Cloud 認証情報または AI Studio API キー、約 3 GB のディスク、約 2 GB の RAM。
docker compose up -d --build
初回実行時はベースイメージをダウンロードします (約 3 GB、5–10 分)。以降の実行は 1 分未満です。
cd simulacion
docker compose up -d victim-service
cd ..
docker compose ps
# 期待される出力: 8 個のサービスが running/healthy
curl http://localhost:8000/health
# 期待される出力: {"status": "healthy", "service": "SentinelMCP", ...}
.\attack.ps1 ddos # DDoS 攻撃 (デフォルト)
.\attack.ps1 sql # SQL インジェクション
.\attack.ps1 brute # ブルートフォース
.\attack.ps1 stop # 攻撃停止 + 防御リセット
.\attack.ps1 status # システム状態を確認
攻撃実行中にコマンドセンターを開きます:
http://localhost:8000/dashboard
約 25 秒間での 4 つのフェーズを観察します:
THREAT DETECTED — Dynatrace がアラートを発報DEFENDING — Gemini が MCP ツールカタログを読み取り、アクションを選択、推論を記録NEUTRALIZED — MTTD と MTTR が完全な監査証跡とともに表示SentinelMCP は Gemini 上に構築されています。環境に合った認証方法を選択してください:
オプション A — Google AI Studio (最速のセットアップ):
# .env を編集
GOOGLE_API_KEY=AIza...your_key_here
GEMINI_BACKEND=google_ai_studio
オプション B — Google Cloud 上の Vertex AI:
gcloud auth application-default login
.\scripts\setup_gcloud.ps1 # プロジェクトを設定、SA キーを作成、.env を自動更新
その後、AI エンジンを再起動: docker compose restart api
GET http://localhost:8001/mcp/tools
SentinelMCP はフェイルセーフ監査モードを採用しています。ターゲットのインフラストラクチャに到達できない場合、エージェントはパイプラインを壊さずに意図したアクションを記録し、グレースフルデグラデーションを保証します。Gemini はカタログ内の REAL / Audit-Only フラグを読み取り — 何を実行でき、何を推奨のみにとどめるべきかを正確に把握します。
sentinel_mcp/
├── api/ FastAPI コア — ルート、スキーマ、ダッシュボード UI
├── agent/ 判断エンジン + LLM プロバイダー (Gemini 2.0 Flash、Vertex AI)
├── mcp_server/ MCP サーバー + 11 ツール実装
├── services/ インシデントサービス、修復オーケストレーター、脅威計算機
├── observability/ OTel / Dynatrace / SigNoz プロバイダー
└── core/ 設定、ロギング、例外
simulacion/
├── victim-service/ /admin/* コントロールプレーンを備えた FastAPI ターゲットサービス
└── attacker/ Python 攻撃エンジン (DDoS / SQLi / ブルートフォース)
docker/
├── prometheus.yml スクレイプ設定 (victim-service を 5 秒間隔)
└── grafana/ 自動プロビジョニングされたダッシュボード — 6 パネルのインフラストラクチャ監視
| Service | URL |
|---|
| 責務 | 実装 |
|---|
| Webhook 受付 | SentinelAgent.query(incident=...) — Agent Builder が Dynatrace アラートのたびに呼び出し |
| ツール宣言 | 6 つの MCP ツールが set_up() 内で Vertex AI FunctionDeclaration オブジェクトとして登録 |
| 推論 | Gemini 2.0 Flash が脅威コンテキスト + ツールカタログを読み取り、最小限のツールを選択し、自動的に呼び出し |
| HITL ゲート | Gemini がツール呼び出しを返さない場合 (信頼度 < しきい値)、escalate_to_humans=True が出力される |
| 監査 | すべてのツール呼び出しが MongoDB Atlas に記録され、OTel スパンとして Jaeger にエクスポート |
| Tool | 機能 |
|---|
block_ip_address | POST /admin/block_ip — 実行中のミドルウェアで攻撃元 IP をブロック |
activate_waf | POST /admin/waf — 実行中のサービスで WAF ブロッキングモードを有効化 |
rate_limit_requests | POST /admin/rate_limit — スライディングウィンドウレートリミッター、即時有効 |
scale_service | ソケット経由の Docker SDK — 負荷に応じて実際のレプリカコンテナを起動 |
rollback | POST /admin/reset_defenses — 完全なインシデントライフサイクルを実演: 攻撃 → 防御 → 復旧 |
collect_forensic_logs | インシデント後のレビューのために、実行中のコンテナから実際の証拠を収集 |
build_attack_timeline | 実行中のコンテナログから時系列のタイムラインを作成 |
analyze_attack_pattern | 実際のインシデントコンテキストデータを使用して攻撃タイプを分類 |
identify_iocs | 実際のインシデントファイルから実際の IP、ユーザーエージェント、ペイロードを抽出 |
| URL | 表示内容 |
|---|
| https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard | コマンドセンター — メインのデモ UI |
| https://sentinel-api-62d3d66zda-uc.a.run.app/docs | Swagger — 対話型 API エクスプローラー |
| https://sentinel-api-62d3d66zda-uc.a.run.app/health | ヘルスチェック |
| https://sentinel-api-62d3d66zda-uc.a.run.app/api/v1/incidents | インシデント履歴 (JSON) |
| https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools | Gemini が読み取るライブ MCP ツールカタログ |
| https://victim-service-62d3d66zda-uc.a.run.app | 被害者サービス (攻撃対象) |
| URL | 表示内容 |
|---|
http://localhost:8000/dashboard | コマンドセンター — メインのデモ UI |
http://localhost:8000/docs | Swagger — 対話型 API エクスプローラー |
http://localhost:8000/api/v1/incidents | インシデント履歴 (JSON) |
http://localhost:8000/api/v1/incidents/statistics/summary | すべてのインシデントの MTTD / MTTR 平均 |
http://localhost:8001/mcp/tools | Gemini が読み取るライブ MCP ツールカタログ |
http://localhost:8080 | 被害者サービス (攻撃対象) |
http://localhost:14499 | Dynatrace Mock — ライブメトリクス + 異常検知エンジン |
http://localhost:16686 | Jaeger — 分散トレース |
http://localhost:9090 | Prometheus — 生メトリクス |
http://localhost:3000 | Grafana — インフラストラクチャダッシュボード (admin / admin) |
| シナリオ | スクリプト | 動作 |
|---|
| DDoS | .\attack.ps1 ddos | 1000 req/s のフラッド; Gemini が IP をブロック + レート制限を有効化 |
| SQL インジェクション | .\attack.ps1 sql | ペイロード検出; Gemini が WAF をブロッキングモードで有効化 |
| ブルートフォース | .\attack.ps1 brute | ログイン試行の集中攻撃; Gemini が送信元 IP をブロック + WAF を有効化 |
| 自動モード | ダッシュボード 🎯 Auto ON | 45 秒から 90 秒ごとにランダム攻撃、完全自律応答 |
| Tool | カテゴリ | モード |
|---|
analyze_attack_pattern | 分析 | REAL |
identify_iocs | 分析 | REAL |
block_ip_address | 防御 | REAL → victim-service |
activate_waf | 防御 | REAL → victim-service |
rate_limit_requests | 防御 | REAL → victim-service |
scale_service | 防御 | REAL → Docker SDK |
collect_forensic_logs | フォレンジック | REAL |
build_attack_timeline | フォレンジック | REAL |
patch_vulnerabilities | 修復 | Audit-Only |
apply_hardening | 修復 | Audit-Only |
rollback | 修復 | REAL → victim-service |
| 層 | 技術 |
|---|
| エージェントオーケストレーター | Google Cloud Agent Builder (Vertex AI Agent) |
| LLM | Gemini 2.0 Flash — google-genai SDK 経由 |
| ツールプロトコル | MCP (Model Context Protocol) — 11 の実際のツール |
| API | FastAPI + Uvicorn (Python 3.11) |
| データベース | MongoDB 7.0 Atlas (Motor 非同期) |
| 可観測性 | OpenTelemetry → Dynatrace |
| トレーシング | Jaeger |
| メトリクス | Prometheus + Grafana |
| HTTP クライアント | httpx (非同期) |
| コンテナオーケストレーション | Docker Compose v2 |