本文にスキップ

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_positive
  • from, 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. コンソールページ

主要コンソールページ

  1. ダッシュボード - リアルタイムメトリクスを含む概要
  2. コネクタ - データソース連携管理
  3. 検出ルール - 検出ルール管理
  4. アラート - アラートトリアージと調査
  5. パイプライン - 詳細なパイプラインメトリクスとヘルス
  6. システムヘルス - サービスステータス

8. カスタマーポータルページ

テナント向けポータルで利用可能なページ:

  1. ポータルホーム / SOC概要 - アラートボリューム、アクティブインシデント、取り込みヘルス、検出トレンドウィジェット
  2. アラート&トリアージ - 重大度、ステータス、ソース、MITRE戦術、時間範囲での検索/フィルタ
  3. タイムライン検索 - 構造化クエリサポートを備えたフルタイムライン検索
  4. 資産&露出 - 資産ごとのアクティビティタイムラインとリンクされた検出
  5. コネクタ - テナントコネクタのオンボーディングとヘルスモニタリング
  6. レポート - スケジュールされたコンプライアンスおよびエグゼクティブレポート(PDF/CSVエクスポート)
  7. テナント設定 - 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日