
自律型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 にデプロイされ、稼働中です:
| Service | URL |
|---|---|
| コマンドセンター (ダッシュボード) | https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard |
| Swagger API ドキュメント | https://sentinel-api-62d3d66zda-uc.a.run.app/docs |
| ヘルスチェック | https://sentinel-api-62d3d66zda-uc.a.run.app/health |
| MCP ツールカタログ | https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools |
| 被害者サービス | https://victim-service-62d3d66zda-uc.a.run.app |
本番環境に対してライブ攻撃を実行:
.\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 サービスにデプロイすることもできます。
| 責務 | 実装 |
|---|---|
| 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 にエクスポート |
主要コード — 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 つの層で統合しています:
sentinel-otel-collector は FastAPI コアからのスパンとメトリクスを取り込み、Dynatrace Mock エンドポイント (OTLP/HTTP :14318) に転送します。すべてのインシデント、ツール実行、LLM 呼び出しは、完全な相関 ID でエンドツーエンドにトレースされます。