Console API
KYRA MDR管理コンソールのREST APIエンドポイントで、すべてのプラットフォーム機能へのプログラマティックアクセスを提供します。
すべてのAPIはテナント対応で、JWTベース認証によるテナント分離を強制します。
ベースURL: https://api.seekerslab.com/v1
認証: Authorization ヘッダーにBearer JWTトークン
1. コネクタ管理API
GET /connectors
テナントのすべてのコネクタを一覧表示
レスポンス:
{ "connectors": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Primary Data Source", "type": "siem", "status": "healthy", "enabled": true, "health": { "last_check": "2026-02-20T10:30:00Z", "message": "Connected, receiving events", "consecutive_failures": 0 }, "stats": { "events_received_total": 125430, "events_failed_total": 12, "bytes_received_total": 45678900, "events_per_second": 42.5, "last_event_at": "2026-02-20T10:30:15Z" }, "config": { "url": "https://siem.internal.example.com", "polling_interval": "30s" }, "created_at": "2026-01-15T08:00:00Z", "updated_at": "2026-02-20T10:30:00Z" } ]}GET /connectors/{id}/health
コネクタの詳細なヘルスステータスを取得
レスポンス:
{ "connector_id": "550e8400-e29b-41d4-a716-446655440000", "status": "healthy", "last_check": "2026-02-20T10:30:00Z", "checks": [ { "type": "connectivity", "status": "pass", "message": "Connection established", "latency_ms": 45 }, { "type": "authentication", "status": "pass", "message": "API key valid" }, { "type": "data_flow", "status": "pass", "message": "Receiving events", "events_in_last_minute": 85 } ]}GET /connectors/{id}/metrics
コネクタの時系列メトリクスを取得(チャート用)
クエリパラメータ:
from: ISO 8601タイムスタンプ(デフォルト:1時間前)to: ISO 8601タイムスタンプ(デフォルト:現在)interval: 集約間隔(1m、5m、15m、1h)
POST /connectors
新しいコネクタを作成
リクエスト:
{ "name": "Production CrowdStrike", "type": "crowdstrike", "enabled": true, "config": { "client_id": "abc123...", "client_secret": "secret...", "base_url": "https://api.crowdstrike.com", "polling_interval": "30s" }}PUT /connectors/{id}
コネクタ設定を更新
DELETE /connectors/{id}
コネクタを削除
POST /connectors/{id}/test
保存前にコネクタ接続性をテスト
2. イベントパイプライン監視API
GET /pipeline/metrics
全体的なパイプラインメトリクスを取得
レスポンス:
{ "timestamp": "2026-02-20T10:30:00Z", "stages": { "ingestion": { "events_total": 1250000, "events_per_second": 125.5, "active_connectors": 5, "healthy_connectors": 5 }, "normalization": { "events_processed": 1248500, "events_failed": 50, "success_rate": 99.96, "avg_latency_ms": 12.5, "p99_latency_ms": 45 }, "detection": { "events_evaluated": 1248500, "rules_matched": 1250, "alerts_generated": 856, "false_positives": 394, "avg_evaluation_time_ms": 8.2 }, "enrichment": { "alerts_processed": 856, "avg_enrichment_time_ms": 150, "intel_cache_hit_rate": 78.5 } }}GET /pipeline/metrics/timeseries
パイプラインメトリクスの時系列データを取得(チャート用)
3. 検出エンジンAPI
GET /detection/rules
検出ルールを一覧表示
クエリパラメータ:
level: 重大度でフィルタ(low、medium、high、critical)enabled: ステータスでフィルタ(true/false)tactic: MITRE戦術でフィルタtechnique: MITREテクニックでフィルタpage,size: ページネーション
GET /detection/rules/{id}
詳細なルール情報を取得
GET /detection/rules/{id}/matches
ルールの最近のマッチを取得
PUT /detection/rules/{id}
ルールを更新(有効化/無効化、定義の変更)
POST /detection/rules/{id}/test
サンプルイベントに対してルールをテスト
GET /detection/metrics
検出エンジンのパフォーマンスメトリクスを取得
4. システムヘルスAPI
GET /health
全体的なシステムヘルスチェック
レスポンス:
{ "status": "healthy", "timestamp": "2026-02-20T10:30:00Z", "services": { "connector-service": { "status": "up", "replicas": 3, "healthy_replicas": 3 }, "normalizer-service": { "status": "up", "replicas": 5, "healthy_replicas": 5 }, "detection-service": { "status": "up", "replicas": 5, "healthy_replicas": 5 }, "enrichment-service": { "status": "up", "replicas": 3, "healthy_replicas": 3 } }}5. アラート管理API
GET /alerts
アラートを一覧表示
クエリパラメータ:
severity: 重大度でフィルタstatus: open、investigating、resolved、false_positivefrom,to: 時間範囲page,size: ページネーション
PUT /alerts/{id}
アラートステータスを更新
リクエスト:
{ "status": "investigating", "assignee": "analyst@example.com", "notes": "ユーザーと調査中"}6. リアルタイム更新用WebSocket API
WS /ws/monitoring
リアルタイムメトリクス更新用WebSocket接続
認証: クエリパラメータ ?token=xxx にJWTトークン
メッセージタイプ:
サーバープッシュ(5秒ごと):
{ "type": "metrics_update", "timestamp": "2026-02-20T10:30:00Z", "data": { "ingestion_rate": 125.5, "normalization_latency_p99": 45.0, "alerts_last_minute": 8, "queue_consumer_lag_total": 1250 }}サーバープッシュ(イベント発生時):
{ "type": "connector_status_change", "timestamp": "2026-02-20T10:30:00Z", "data": { "connector_id": "550e8400-...", "old_status": "healthy", "new_status": "unhealthy", "message": "Connection timeout" }}クライアントサブスクリプション:
{ "action": "subscribe", "topics": ["metrics", "connector_health", "alerts"]}7. コンソールページ
主要コンソールページ
- ダッシュボード - リアルタイムメトリクスを含む概要
- コネクタ - データソース連携管理
- 検出ルール - 検出ルール管理
- アラート - アラートトリアージと調査
- パイプライン - 詳細なパイプラインメトリクスとヘルス
- システムヘルス - サービスステータス
8. カスタマーポータルページ
テナント向けポータルで利用可能なページ:
- ポータルホーム / SOC概要 - アラートボリューム、アクティブインシデント、取り込みヘルス、検出トレンドウィジェット
- アラート&トリアージ - 重大度、ステータス、ソース、MITRE戦術、時間範囲での検索/フィルタ
- タイムライン検索 - 構造化クエリサポートを備えたフルタイムライン検索
- 資産&露出 - 資産ごとのアクティビティタイムラインとリンクされた検出
- コネクタ - テナントコネクタのオンボーディングとヘルスモニタリング
- レポート - スケジュールされたコンプライアンスおよびエグゼクティブレポート(PDF/CSVエクスポート)
- テナント設定 - SSO、ロールマッピング、保持ポリシー、通知チャネル
ポータルAPI要件
テナント分離
- すべてのリクエストはJWTから
tenant_idを解決し、クエリ実行前にテナントコンテキストを強制 - 内部システム識別子はAPIレスポンスに公開されない
パフォーマンスSLO
- アラート一覧ページ:30日クエリウィンドウでp95 < 2.0秒
- タイムライン検索ページ:ページネーション付き結果でp95 < 3.0秒
- コネクタヘルスページ:30秒リフレッシュ間隔で1%未満のステールリード
監査可能性
- 検索クエリ、ケース更新、コネクタ変更のポータルユーザーアクションをログ
- 最低1年間の不変監査証跡エントリを保持
9. 大規模データセットAPIの動作(ソート/検索/フィルタ)
クエリコントラクト標準
sort: 方向付きのカンマ区切り許可フィールド(例:detected_at:desc,severity:desc)cursor: 次ページ用の不透明トークンlimit: デフォルト50、エンドポイント最大値を強制q: ページ固有のフィールドスコープでのキーワード検索filters: 高度なフィルタリングエンドポイント用の構造化JSON式
バックエンド要件
- すべてのソート/フィルタ/検索操作はサーバーサイドで実行
- サポートされていないソート/フィルタフィールドは
400 INVALID_QUERY_FIELDを返す
パフォーマンスターゲット
- APIレスポンスタイム:200ms未満(p95)
- WebSocketレイテンシ:100ms未満
- ダッシュボードリフレッシュレート:5秒
- メトリクス保持:90日