InfraGuard

セキュリティ問題解決

セキュリティのインシデントと侵害を、登録 → 調査中 → 原因特定 → 解決 → 終了 のワークフローで進めるケースボードです。セキュリティ診断から昇格した致命的な検出結果も自動で追跡します。

概要 — 何をする画面か

セキュリティ ▸ 問題解決 は、セキュリティのインシデントと侵害への対応を、5段階のパイプラインを持つ単一のケースボードとして管理します。

open → investigating → cause_identified → resolved → closed

すべてのケースは 500レポート構造(直接原因/根本原因/解決/再発防止策)と、監査可能なタイムラインを持ちます。この画面は サービス ▸ 問題解決 のコントローラーをミラーリングしたものです。同じ infr_incident テーブルを共有しつつ area='security' で絞り込み、セキュリティのケースをサービスのインシデントから分離しています。

ケースがこのボードに載る経路は2つあります。

  1. 手動登録 — 運用担当者がケースを作成します。選択できる source は manual · agency · quarantine です。
  2. 診断からの昇格 — セキュリティ診断 の fail + crit の検出結果が、自動的にケースへ昇格します(source=detection)。これはシステム専用の source であり、担当者が手で選ぶことはできません。

このコンソールは、リモートの crontab やファイアウォールを直接操作しません。人間による対応プロセスを記録・追跡するためのワークフローツールです。実際のブロックや隔離の操作は ブロックリスト と 自動ブロック にあります。


こんなときに使う


画面構成

KPI ストリップ

KPI 定義
total area='security' のケースの総数
active open + investigating + cause_identified の合計
resolved resolved + closed の合計
MTTR occurred_at と resolved_at の両方を持つケースの平均分数
downtime 全ケースの downtime_min の合計
uptime target OpsPolicy::slaDefaults()['uptime_target']

ケースボード

ケースは次の順で並びます。

  1. ステータス順位 — open → investigating → cause_identified → resolved → closed
  2. 深刻度順位 — crit → warn → info
  3. 新しい順 — id の降順

各カードには、タイトル、深刻度、ステータス、source バッジ、紐付いたプロジェクト/サービス、発生時刻、ダウンタイム、イベント件数が表示されます。

詳細モーダル

ケースを開くと、2つのペインに分かれます。

上部のステータスパイプラインをクリックすると、ステップ遷移ダイアログが開きます。「このステップで何をするか」のガイドが表示され、その段階のレポートフィールドをその場で更新できます。


使い方

ケースを作成する(手動)

  1. 上部の [ケースを登録] をクリックします。
  2. タイトル(必須)、深刻度、source(manual / agency / quarantine)を入力します。
  3. 必要に応じて、プロジェクト、サービス、URL、発生時刻、影響範囲、ダウンタイム(分)を設定します。
  4. [保存] — status=open、area=security、detected_at=now() で新しいケースが作成され、タイムラインに created イベントが記録されます。

detection は source の一覧に表示されません。セキュリティ診断が自動生成する、システム専用の source だからです。

ステータス遷移(パイプライン)

詳細モーダルのパイプラインで、遷移先のステータスをクリックします。各段階で推奨される作業は次のとおりです。

段階 この段階ですること
open 受付状態に戻します(分析を始める前)
investigating 症状を確認し、影響範囲を見極め、サマリーを記述します
cause_identified 直接原因と、その背景にある根本原因を特定して記録します
resolved 復旧方法と再発防止策を記録します
closed 対処と防止策が適用されていることを確認し、ケースを終了します

サーバー側の遷移ルール:

協業ノート

詳細モーダルでノートを追加すると、タイムラインに kind=note のイベントが記録されます。ノート専用のテーブルはありません — ノートは infr_incident_event に統合されています。

削除

ケースを削除すると、その infr_incident_event の行も削除され、監査ログに記録されます。(昇格元となった診断スキャンは独立しており、削除されません。)

昇格したケースの自動解消

セキュリティ診断 がプローブ結果を取り込むと、DiagnosticsService::reconcileCases() がホストごとにケースを突き合わせます。

自動解消は、診断チェックが再び合格したときにのみ発動します。手動で作成したケース(manual/agency/quarantine)が自動的に解消されることはありません — 担当者がパイプラインに沿って遷移させる必要があります。


データソース

テーブル

テーブル 役割
infr_incident ケース本体(area='security' で絞り込み)。ステータス、深刻度、source、500レポートの各フィールド、発生/解決/終了の時刻、fingerprint、occurrence_count
infr_incident_event ケースのタイムライン(作成、ノート、ステータス変更、…)
infr_project 紐付け用のプロジェクト一覧
infr_service 紐付け用のサービス一覧

列挙値

STATUSES   = [open, investigating, cause_identified, resolved, closed]
SEVERITIES = [info, warn, crit]
SOURCES    = [manual, pulse, alert, agency, quarantine, detection]   # すべて
manual-selectable sources = [manual, agency, quarantine]
OPEN_STATUSES (dedup targets) = [open, investigating, cause_identified]
AREAS = [service, security]   # 共有テーブルの分割軸

レポートフィールド(500構造)

フィールド 意味
summary 症状/影響のサマリー
direct_cause 直接的な原因(例: MySQL Too many connections)
root_cause 背景/根本原因(例: スクリプトの接続リーク)
resolution インシデント中に実施した復旧措置
action_taken 今後に向けた再発防止策
downtime_min ダウンタイム(分)— downtime KPI の元データ
impact 影響を受けた範囲

API エンドポイント

メソッド · パス 用途
GET /security/resolution ボードの初回描画
GET /security/resolution/live ポーリング更新(ケース、KPI、タイムスタンプ)
POST /security/resolution/save ケースの作成/更新
POST /security/resolution/transition ステータス遷移(+任意のノート/レポート更新)
POST /security/resolution/note 協業ノートの追加
POST /security/resolution/delete ケースの削除

アクセス権限


トラブルシューティングとFAQ

Q. サービスのボードで見えているケースが、ここにありません。 どちらのボードも同じ infr_incident テーブルを共有していますが、area で分かれています。この画面が表示するのは area='security' だけです。サービスのインシデントは サービス ▸ 問題解決 で探してください。

Q. detection の source でケースを作成できません。 仕様どおりです。detection は セキュリティ診断 が fail+crit の検出結果から自動作成する、システム専用の source です。手動登録で選べるのは manual、agency、quarantine だけです。

Q. 自動昇格したケースが、ひとりでに解決済みになりました。 後続のスキャンで元の診断チェックが合格すると、reconcileCases() が未解決のケースを自動的に解消します。resolution には自動解消のテキストが入り、ステータス変更のイベントが追加されます。

Q. MTTR が空欄です。 MTTR は、occurred_at と resolved_at の両方を持つケースについてのみ算出されます。発生時刻がないケースや、まだ解決していないケースは除外されます。

Q. 過去の終了日時を設定できますか。 できます。終了ダイアログの終了日時フィールドに値を入力すると(発生時刻と同じインターフェースです)、そのまま保存されます。空のままにした場合、サーバーはまだ値がないときに限り now() を入れます。

Q. ケースを削除すると、診断スキャンも消えますか。 消えません。昇格したケースと、その元になった診断スキャンは独立しています。ケースを削除しても、紐付いたタイムラインイベントが消えるだけです。


関連項目

보안 문제 해결 보드
보안 문제 해결 보드