
Microsoft Sentinel SIEM ログソース分析ツール
「これらのログから実際に何が得られているのか?」とか「Microsoft Sentinel に推奨されるログは何か?」といった質問に何度も答えてきました。答えは常に多くの要因に依存しますが、汎用的にすることはできます。そこで、このツールをここに作りました。
Log Horizon は、Microsoft Sentinel ワークスペース(およびオプションで Defender XDR)に接続し、取り込んでいるすべてのログテーブルを調べて、セキュリティ上の価値が得られているか、それとも単にコストを浪費しているだけかを判断します。テーブルを分類し、検出ルールに基づいてスコアリングし、具体的な推奨事項とコスト削減見積もりを提供します。
重要: これは汎用的なアプローチです。ログソースが環境にとって重要だと分かっている場合、そのコンテキストが常にこのツールの指示よりも優先されます。分類は出発点であり、絶対的なものではありません。
さらに読みたいですか? Log Horizon に関するブログ記事があります:
| 機能 | 説明 |
|---|---|
| 分類エンジン | 240 以上のコネクタ、22 カテゴリをカバーする 481 エントリのナレッジベース。ライフサイクルステータス(非推奨/レガシーと置き換えテーブル)と、未知のテーブルに対する自動ヒューリスティックフォールバックを備える |
| コスト価値スコアリング | テーブルごとのコスト層と検出層のマトリクスによる複合評価(高価値から低価値まで)。観測されたプラン(Analytics、Basic、Data Lake)ごとに価格設定 |
| 推奨事項 | 13 種類の優先順位付けされたアクションタイプ: Data Lake または Basic 候補、ゼロ検出テーブル、XDR ストリーミングの無駄、取り込み時フィルタリング、分割候補、プラン使用状況、非推奨ソース、保持期間不足、XDR チェッカーと検出アナライザーの結果。それぞれにコスト削減見積もりを添付 |
| 検出マッピング | 分析ルール、ハンティングクエリ、XDR 検出を各テーブルにマッピングし、カバレッジのギャップを特定 |
| 相関タグ | ルール説明内の #DONT_CORR# / #INC_CORR# タグを検出し、Defender の相関から除外されたルールにフラグを立てる |
| 保持期間コンプライアンス | 実際の保持期間を、業界標準とセキュリティのベストプラクティスに基づく推奨最小値と比較 |
| SOC 最適化 | Security Insights API から Microsoft 自身の SOC 改善推奨事項を取得 |
| キーワードギャップ分析 | ベンダー/製品キーワードに基づいて、取り込むべきなのに取り込んでいないテーブルにフラグを立てる |
| 変換ディスカバリ | ワークスペースを対象とする Data Collection Rules(DCR)を検出し(宛先でフィルタリングされたサブスクリプションリスト、ワークスペース変換 DCR、ワークスペース関連付け)、インラインおよびマルチステージ変換を解析し、すべての操作(フィルタ、プロジェクション、列削除、エンリッチメント、集計)にラベルを付ける |
| 分割テーブル検出 | _SPLT_CL 分割テーブルを特定し、分類エンジン内の親テーブルにリンク |
| 分割 KQL ジェネレーター | 厳選されたナレッジベース、ライブルール分析、コミュニティのフィールド頻度統計から、ポータル対応の分割 KQL を生成 -- Sentinel の分割ルールエディタにそのまま貼り付けられる条件のみの形式。フィールドリストはテーブルのライブスキーマと交差検証され、存在しないものは破棄されたとして報告される |
| 検出アナライザー | インシデント結果(自動クローズ率、誤検知率、インシデント量のパーセンタイル)を使用して、分析ルールの潜在的なノイズ性をスコアリング |
| XDR チェッカー | XDR に焦点を当てたアドバイザリレイヤーを追加: XDR 関連テレメトリのストリーミングカバレッジチェックと 1 年間の Data Lake 保持期間ガイダンス |
| カスタム分類 | 独自の JSON を提供して、組み込みの分類データベースに追加または上書き |
| コレクションキャッシュ | 収集されたワークスペースデータはローカルにキャッシュされ(デフォルト 60 分)、再実行や再エクスポートが数秒で完了。-NoCache でオプトアウト可能 |
| ソブリンクラウド | ARM、Log Analytics、Graph のエンドポイントは、サインイン中の Azure 環境(パブリック、US Government、China)に従う |
| 対話型 TUI | Spectre.Console ダッシュボード。メニュー、色分けされたテーブル、ドリルダウン、保持期間ウィザード、ASCII アートを備える |
| エクスポート | チーム共有用の JSON、Markdown、または静的 HTML レポート |
[!CAUTION] 免責事項
このツールは AI の支援を受けて開発・保守されています。 このソリューションを使用する際は注意を払い、本番環境で実行する前に、何を実行しているのかを常に理解してください。開発者は、脆弱性や問題について一切の責任を負いません。
このツールをダウンロード、インストール、または使用することにより、これらの条項を読み、理解し、同意したものとみなされます。
| 必要なもの | バージョン |
|---|---|
| PowerShell |
エンドポイントは、現在の Connect-AzAccount セッションの Azure 環境に従うため、Azure Government および Azure China のワークスペースは追加パラメータなしで動作します。環境が利用できない場合は、パブリッククラウドの値が使用されます。
Azure にまだログインしていない場合、モジュールが自動的に Connect-AzAccount を起動します。すでにログインしている場合は、そのまま続行します。
アクセス許可: ワークスペースに対する Log Analytics Reader と Microsoft Sentinel Reader で分析をカバーできます。変換ディスカバリには、サブスクリプションまたはリソースグループに対する Microsoft.Insights/dataCollectionRules/read(Monitoring Reader)も必要です。これがない場合、実行は続行され、不足しているアクセス許可を示す警告が出力されます。-IncludeDefenderXDR は CustomDetection.Read.All を持つ Microsoft Graph を使用します。これはサインインユーザーの場合、オプションの Microsoft.Graph.Authentication モジュールを意味します。
かなり簡単です:```powershell
Install-Module -Name Az.Accounts -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser
git clone https://github.com/lnfernux/log-horizon Import-Module ./log-horizon/LogHorizon.psd1
## 使用方法
### 基本操作
まずAzureに接続し、正しいアカウントとサブスクリプションを選択していることを確認します:```powershell
Connect-AzAccount
次に、ツールを呼び出すことができます:```powershell Invoke-LogHorizon -SubscriptionId '00000000-0000-0000-0000-000000000000' -ResourceGroup 'rg-sentinel' -WorkspaceName 'my-sentinel-ws'
<img width="860" height="842" alt="{F4FFA929-B24F-490C-BD3D-F75E214BCD93}" src="https://assets.kitploit.com/production/public/readmes/13110/ff9d1da85043d02a216df72913ecf63520310b8d820b1bd1278b8e4aca718494.png" />
また、他の出力をさらに掘り下げるためのメニューもあります:
<img width="395" height="223" alt="{83CE9E6E-F373-49CD-BE05-182DB69F36BE}" src="https://assets.kitploit.com/production/public/readmes/13110/0606a575b10640bd13ebb87b930f74b2438167b5578cb843b412b4fcf273fc26.png" />
### キーワードのギャップ + Defender XDR
特定のベンダーに関連するテーブルが不足しているかどうかを知りたいですか? いくつかのキーワードを入力してください。XDR分析も必要な場合は、`-IncludeDefenderXDR` を追加してください。```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR
インシデントと自動化ルールに基づくルール品質・ノイズ分析を有効にします:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90
### レポートをエクスポートする```powershell
# JSON
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output json -OutputPath ./report.json
# Markdown
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output markdown -OutputPath ./report.md
# Static HTML (self-contained, no JS, works offline)
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./report.html
# Auto-generate timestamped filename by pointing at a directory
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./reports/
インタラクティブTUIから直接、テーブルの保持期間とテーブルタイプを更新できるようになりました:
Invoke-LogHorizon を通常どおり開き、メインメニューから Manage table retention and type を選択すると、保持期間やタイプの一括更新ができます。スクリプトや自動化には、専用の公開コマンドを使用してください:```powershell
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -TotalRetentionInDays 365 -WhatIf
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'AzureDiagnostics','VMConnection' -TargetPlan Basic -TotalRetentionInDays 730
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -RetentionInDays -1 -TotalRetentionInDays -1
### 非対話モード / CIモード
対話型TUIをスキップして、直接ファイルにエクスポートします。パイプラインやスケジュール実行に便利です。```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/
-Output を省略すると、分析オブジェクトがパイプラインに返されるため、独自のロジックにパイプ処理できます。
データ収集フェーズ(使用状況、ルール、インシデント、テーブル、DCR)はデフォルトでキャッシュされるため、同じワークスペースに対して再実行する場合(たとえば、2番目の形式をエクスポートする場合やTUIを再度開く場合)は、数分ではなく数秒で完了します。キャッシュは $env:LOCALAPPDATA\LogHorizon\cache の下に置かれ(-CachePath で上書き可能)、サブスクリプション、リソースグループ、ワークスペース、-DaysBack、-DetectionLookbackDays、-IncludeDefenderXDR、-IncludeDetectionAnalyzer、3つの価格パラメータ、モジュールバージョンの組み合わせごとに1つのファイルが作成されます。-CacheMaxAgeMinutes(デフォルト60)より古いエントリは無視され、保存のたびに期限切れのエントリが削除されるため、フォルダに他のパラメータセットや古いバージョンのファイルが蓄積されることはありません。トークンがキャッシュに書き込まれることは決してなく、認証は毎回の呼び出しで実行されるため、保持ウィザードは常に有効な資格情報を保持します。
キャッシュファイルはプレーンテキストのClixmlです。-IncludeDetectionAnalyzer を使用すると、ワークスペースからのインシデントのタイトル、番号、ステータス、分類が含まれます。インシデントの所有者、ルールの作成者、割り当てられた所有者のIDは収集されません。共有マシンでは -NoCache を使用するか、-CachePath を必要なアクセス制御を持つ場所に指定してください。```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -RefreshCache
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NoCache
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -CacheMaxAgeMinutes 1440
### ログチューニングと分割KQL
対話型TUIには**ログチューニング / 変換**メニューが含まれており、ライブのチューニング提案(デプロイ済みルールやハンティングクエリからのフィールド使用状況)、ナレッジベースの分割KQL、およびテーブルごとの評価機能を備えています。すべてのKQLブロックは条件のみで構成され、Sentinelの分割ルールエディタにそのまま貼り付け可能で、ソースの帰属(ナレッジベース、ルール分析、または組み合わせ)が付与されます。
### カスタム価格設定
デフォルトの価格は西ヨーロッパのSimplified PAYG(米ドル)です: Analytics 5.59 $/GB、Basic 1.15 $/GB、Data Lake 0.20 $/GB(取り込み0.07 + 処理0.13)。各テーブルは`Usage`テーブルで観測されたプランに基づいて価格設定され、無料ステータスは`Usage.IsBillable`から取得されます。容量は課金GB(1000 MB)を使用します。コミットメント層が異なる場合は:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61 -BasicPricePerGB 1.15 -LakePricePerGB 0.20
フェーズは4つあります。
モジュールは Azure に接続し、Log Analytics、Security Insights、Azure Monitor、Microsoft Graph API からデータを取得します。すべての呼び出しは再試行ラッパー(429、5xx、トランスポートエラー)を通過し、-NoCache が設定されていない限り、収集されたデータは次回の実行のためにローカルにキャッシュされます。
すべてのテーブルは2つのパスで分類されます。
最初に、Data/log-classifications.json の481エントリのナレッジベースに対する直接ルックアップが行われます。各エントリには、コネクタ名、プライマリ/セカンダリ分類、セキュリティカテゴリ、MITRE データソースマッピング、推奨価格層と保持期間、およびオプションのライフサイクルフラグ(置換テーブル付きの非推奨/レガシー、XDR ストリーミング可否、プラットフォーム)が含まれます。
一致しない場合、ヒューリスティックルールが次の順序で適用されます:
Alert、Incident、Threat、Signin、Logon、Audit、Risk、Detection などのセキュリティトークンが含まれる(PascalCase の単語先頭で一致)-> プライマリFlow、Metric、Diagnostic、Perf、Heartbeat、Health、Inventory、Usage -> 各テーブルはいくつかの次元でスコアリングされます:
tablesWithRules / totalTables * 100 として計算されます。テーブルごとのカバレッジは、KQL を解析してテーブル名を検出した分析ルール + ハンティングクエリの合計です。Data/implicit-consumers.json がそれらをマッピングします(Threat Intelligence マッチング -> ThreatIntelIndicators/ThreatIntelObjects、Fusion -> SecurityAlert/Anomalies、UEBA -> BehaviorAnalytics/UserPeerAnalytics/IdentityInfo、Microsoft インシデント作成 -> SecurityAlert)。これらの種別の有効なルールは実効カバレッジにカウントされ、各テーブルは CoverageSource として kql、、、、または を報告します。Sentinel が自身のために書き込むプラットフォームテーブル(、、、 ...)はカバレッジ不足としてフラグ付けされることはなく、 評価が付けられます。次に、モジュールは推奨事項(13種類)を生成します:
推奨事項は一度ソートされ、高 > 中 > 低、次に推定節約額の順になります。すべての出力(JSON、Markdown、HTML、TUI)はその順序を維持します。
-IncludeDetectionAnalyzer を渡すと、モジュールは最近のインシデントとオートメーションルールを取得し、すべての有効な分析ルールを潜在的なノイズについてスコアリングします。
ルールごとのメトリクス(インシデントデータから計算):
| メトリクス | 計算方法 |
|---|---|
| インシデント合計 | ルールにリンクされたインシデント数 |
| 自動クローズ比率 | オートメーションルールによってクローズされたインシデント ÷ 合計インシデント。主なソース: SentinelHealth テーブル(有効なクローズインシデントまたはプレイブックルールによるオートメーションルール実行。インシデント番号で一致)。フォールバック: オートメーションルール条件マッチング(分析ルール ID、タイトル、重大度条件。Sentinel と同様に AND で結合)。条件がステータス/戦術/エンティティのみのルールは、すべてのインシデントに適用されると見なされます。 |
| 誤検知比率 | 誤検知として分類されたインシデント ÷ 合計インシデント |
ノイズスコアの計算式:
各メトリクスは、少なくとも1つのインシデントを持つすべてのルールにわたるパーセンタイルランクに変換されます。複合スコアは加重ブレンドです:``` Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)
- **ボリューム百分位(35%)**: あるルールが他のルールと比較してどれだけ多くのインシデントを生成するか。
- **AutoClose百分位(40%)**: 自動化ルールによってインシデントが自動クローズされる頻度(自動クローズは低価値アラートの最も強いシグナルであるため、最も高い重みを持つ)。
- **FalsePositive百分位(25%)**: アナリストが結果を誤検知として分類する頻度。
**スコアしきい値**:
| スコア | ラベル | 意味 |
|---|---|---|
| ≥ 70 | ノイジー | ルールは調整または無効化が必要な可能性が高い |
| ≥ 50 | ウォッチ | ルールはノイズの初期兆候を示している |
| < 50 | 健全 | ルールは正常範囲内 |
| N/A | - | ルールに関連するインシデントがない、またはインシデントを持つルールが3つ未満のため、ランク付けの対象がない |
インシデントは分析ルールID(ルール名、次にタイトルにフォールバック)でバケット化されるため、表示名を共有する2つのルールは別々にスコアリングされます。
スコアが70以上で、かつインシデントが少なくとも5件あるルールは、**優先度の高い推奨事項**としてRecommendationsビューに自動的に表示されます。
### 5. 対話型ダッシュボード
メインメニューでは以下のビューが提供されます:
- **ダッシュボード**: 概要統計、コスト上位10テーブル(非推奨およびレガシーソースにはバッジが付く)、カバレッジバー、保持コンプライアンスの概要、相関除外のコールアウト
- **推奨事項の表示**: 推定月間削減額付きの優先順位付けされたアクション。10件を超える場合は展開して全リストを表示可能
- **検出評価の表示**: コスト価値マトリックスの概要、テーブルごとのルールおよびハンティングクエリのカバレッジ、プライマリ/セカンダリのドリルダウン、相関除外されたルールの一覧
- **検出アナライザーの表示**: クローズ品質インジケーター付きの百分位ベースのノイジールールランキング(`-IncludeDetectionAnalyzer`を使用した場合)、検索可能なルールブラウザー
- **SOC最適化の表示**: Microsoft独自の改善提案とドリルダウン
- **保持評価の表示**: 推奨最小値未満のテーブルについて、現在の保持と推奨保持、プランタイプ、不足分、およびXDRアドバイザリ行を表示
- **データ変換の表示**: DCR変換インベントリと、変換タイプの分類およびテーブルごとの完全なKQL
- **ログチューニング/変換**: ライブチューニング提案、ナレッジベース分割KQL、および単一テーブルの保持/タイプ変更を備えたテーブルごとの評価ツール
- **全テーブルの表示**: 分類、プラン、コスト、ルール、保持(色分け)、評価を含む完全なリスト。テーブルを選択すると詳細パネルが表示される(カバレッジソース、プランサポート、保持、ステータス、その推奨事項)
- **テーブルの保持とタイプの管理**: プレビューと適用を備えた一括保持およびプランウィザード
- **辞書**: ツールが使用するすべての用語(分類、コストおよび検出ティア、評価、カバレッジソース、13種類の推奨事項、検出アナライザーのメトリクスとスコアラベル、テーブルプラン、ライフサイクルステータス、XDR状態、変換タイプ)を、このREADMEと同じ定義で、`Data/dictionary.json`から提供
- **レポートのエクスポート**: 形式を選択し、次にパス(タイムスタンプ付きファイルのディレクトリ、またはファイル名。Enterで現在のディレクトリを維持)を選択して、メニューから直接JSON、Markdown、またはHTMLを書き出す
- **XDR分析**は、`-IncludeDefenderXDR`を使用した場合にダッシュボードに表示されます
---
## 分類データベース
`Data/log-classifications.json`にあります。**481エントリ**、**243コネクタ**、**22カテゴリ**。
### 各エントリの内容
| フィールド | 保持する内容 |
|---|---|
| `tableName` | Log Analyticsテーブル名(`SecurityEvent`、`SigninLogs`など) |
| `connector` | このテーブルを生成するデータコネクタ |
| `classification` | `primary`(セキュリティ価値)または`secondary`(補助テレメトリ) |
| `category` | セキュリティカテゴリ: Identity & Access、Network Securityなど |
| `description` | テーブル内の内容の平易な英語での概要 |
| `keywords` | キーワードギャップ分析のマッチング用の用語 |
| `mitreSources` | MITRE ATT&CKデータソースのマッピング |
| `recommendedTier` | `analytics`(ホットティア)または`datalake`(補助候補) |
| `recommendedRetentionDays` | 推奨される最小合計保持日数(規制ガイダンス) |
| `isFree` | Microsoftがこのテーブルを無料で取り込むかどうか(ランタイムは最初に`Usage.IsBillable`を使用) |
| `status` | 任意。`deprecated`(コネクタが廃止または取り込みが停止)または`legacy`(文書化された後継がある古い収集パス) |
| `replacedBy` | 任意。移行先のテーブル名。`status`が設定されている場合は常に存在(空の場合あり) |
| `xdrStreamable` | 任意。Defenderテーブルのみ。Defender XDRコネクタがストリーミングする21テーブルでは`true`。ポータルのみおよびTVMテーブルでは`false` |
| `platform` | 任意。Sentinel自体が消費するテーブル(`SecurityIncident`、`Usage`、`Watchlist`など)で、分析ルールを必要としない場合は`true` |
`status`を持つテーブルはTUIとレポートにバッジが表示され、まだ取り込みを行っているものは置き換え先を指定した`DeprecatedSource`推奨事項を発生させます。`xdrStreamable: false`のテーブルは、XDRチェッカーによってXDRストリーミング候補として扱われることはありません。
### プライマリとセカンダリのセキュリティデータ
**プライマリ**(278エントリ): 実際に検出を構築しているテーブル。サインインログ、セキュリティアラート、脅威インテリジェンス、監査トレイル、脆弱性検出、ファイアウォールヒット、EDRテレメトリ。
**セカンダリ**(203エントリ): 補助的なもの。パフォーマンスメトリクス、インフラストラクチャ診断、ネットワークフロー量、インベントリスナップショット、構成ベースライン、ヘルスチェック。
### カテゴリの概要
| カテゴリ | 件数 | 例 |
|---|---|---|
| Identity & Access | 51 | `SigninLogs`、`MicrosoftServicePrincipalSignInLogs`、`OktaSSO` |
| Network Security | 49 | `AZFWNetworkRule`、`NSPAccessLogs`、`DarktraceModelAlerts_CL` |
| Cloud Control Plane | 37 | `AzureActivity`、`AZKVAuditLogs`、`GoogleWorkspaceReports` |
| Network Flow | 36 | `NTANetAnalytics`、`CommonSecurityLog`、`AZFWFatFlow` |
| Endpoint Detection | 33 | `DeviceProcessEvents`、`CrowdStrikeAuditEvents`、`SentinelOneAlertsV2_CL` |
| Application Logs | 32 | `AppServiceHTTPLogs`、`AppServiceAuditLogs`、`DynatraceAttacksV2_CL` |
| Email Security | 29 | `EmailEvents`、`CampaignInfo`、`Ttp_Url_CL` |
| Security Alerts | 29 | `SecurityAlert`、`SentinelBehaviorInfo`、`DisruptionAndResponseEvents` |
| Vulnerability Mgmt | 23 | `DeviceTvmSoftwareVulnerabilities`、`Rapid7InsightVMCloudVulnerabilities` |
| Cloud Security | 20 | `EnrichedMicrosoft365AuditLogs`、`OAuthAppInfo`、`PowerAppsActivity` |
| Endpoint Telemetry | 18 | `DeviceInfo`、`Windows365NetworkLogs`、`SentinelOneAgents_CL` |
| Posture Management | 17 | `ExposureGraphNodes`、`SecurityNestedRecommendation`、`ZTSMetadata` |
| Data Security | 16 | `PurviewDataSensitivityLogs`、`DataSecurityEvents`、`PowerPlatformDlpActivity` |
| Data Platform | 16 | `SQLSecurityAuditEvents`、`CDBControlPlaneRequests`、`SnowflakeLogin_CL` |
| Platform Health | 14 | `SentinelHealth`、`Usage`、`SecurityCaseEvent` |
| Container & K8s | 13 | `AKSAudit`、`CloudProcessEvents`、`GKEAudit` |
| Infrastructure Diag | 13 | `AzureMetrics`、`AGWPerformanceLogs`、`ContainerAppSystemLogs` |
| Threat Intelligence | 10 | `ThreatIntelIndicators`、`ThreatIntelObjects`、`CybleVisionAlerts_CL` |
| Configuration Mgmt | 8 | `ConfigurationData`、`AVNMRuleCollectionChange` |
| SAP Security | 7 | `ABAPAuditLog`、`SAPBTPAuditLog_CL`、`Onapsis_Defend_CL` |
| Storage Access | 6 | `StorageBlobLogs`、`CloudStorageAggregatedEvents`、`AWSS3ServerAccess` |
| IoT/OT Security | 4 | `RadiflowEvent`、`DragosAlerts_CL`、`Phosphorus_CL` |
### テーブルプランサポート
`Data/basic-plan-tables.json`と`Data/auxiliary-plan-tables.json`には、[Azure Monitorテーブル機能マトリックス](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/tables-features)がBasicおよびAuxiliary(Data Lake)プランをサポートするとしてマークしている組み込みテーブルがリストされています。保持ウィザードはBasicリストを使用してプラン切り替えを検証し、`DataLake`推奨事項はそれをサポートするテーブルに対してのみレイクティアを提案し、それがサポートされる最低ティアである場合はBasicプラン提案にフォールバックします。DCRベースのカスタムテーブルは両方のプランをサポートします。Classicカスタムテーブルはどちらもサポートしません。両方のファイルは、各リリースでそのマトリックスから再生成されます。
### カスタム分類
独自の分類ファイルを提供して、組み込みデータベースにないテーブルのエントリを**追加**したり、デフォルトが環境に一致しない場合に既存のエントリを**上書き**したりできます。同じ`tableName`が両方に存在する場合、カスタムエントリは組み込みエントリよりも優先されます。```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
-CustomClassificationPath './my-classifications.json'
The custom file uses the same schema as Data/log-classifications.json, an array of objects:```json
[
{
"tableName": "MyCustomApp_CL",
"connector": "Custom Logs (DCR)",
"classification": "primary",
"category": "Application Logs",
"description": "Security-relevant audit events from an internal application",
"keywords": ["custom", "internal", "audit"],
"mitreSources": [],
"recommendedTier": "analytics",
"isFree": false
},
{
"tableName": "AzureMetrics",
"connector": "Azure Monitor",
"classification": "primary",
"category": "Infrastructure Diag",
"description": "Override: promoted to primary because we detect on Azure resource metrics in this environment",
"keywords": ["metrics", "azure", "infrastructure", "monitoring"],
"mitreSources": [],
"recommendedTier": "analytics",
"isFree": false
}
]
`Data/custom-classifications-example.json` に、すぐに使えるテンプレートがあります。
### 分類の構築方法
プライマリ/セカンダリのグレーディングは、部分的に作者が行い、その後、Microsoft のデータコネクタとテーブル定義を、人間によるグレーディングのベースラインを備えた AI に投入して行われました。分類基準には、Microsoft のベストプラクティスと業界標準が使用されています。お使いの環境に合わない点がある場合は、ツールよりもご自身のコンテキストを信頼してください。AI は間違いを犯す可能性があり、コンテキストが重要です。
分類基準は以下の情報源から引用されています:
**ACSC (オーストラリア信号総局、オーストラリアサイバーセキュリティセンター)**
- [ACSC: イベントログと脅威検出のベストプラクティス (2024年8月)](https://www.cyber.gov.au/sites/default/files/2024-08/best-practices-for-event-logging-and-threat-detection.pdf)
- [ACSC: SIEM 取り込みの優先ログ - 実務者向けガイダンス (2025年5月)](https://www.cyber.gov.au/business-government/detecting-responding-to-threats/event-logging/implementing-siem-soar-platforms/priority-logs-for-siem-ingestion-practitioner-guidance)
**CISA (サイバーセキュリティ・インフラストラクチャセキュリティ庁)**
- [CISA: M-21-31 実装ガイダンス: 連邦政府の調査および修復機能の向上](https://www.cisa.gov/sites/default/files/2023-02/TLP%20CLEAR%20-%20Guidance%20for%20Implementing%20M-21-31_Improving%20the%20Federal%20Governments%20Investigative%20and%20Remediation%20Capabilities_.pdf)
- [CISA: Microsoft 拡張クラウドログ実装プレイブック (2025)](https://www.cisa.gov/sites/default/files/2025-01/microsoft-expanded-cloud-logs-implementation-playbook-508c.pdf)
**Microsoft**
- [Microsoft Sentinel データコネクタリファレンス](https://learn.microsoft.com/en-us/azure/sentinel/data-connectors-reference)
- [Microsoft Sentinel テーブル & コネクタリファレンス](https://learn.microsoft.com/en-us/azure/sentinel/sentinel-tables-connectors-reference)
- [Azure-Sentinel GitHub リポジトリ](https://github.com/Azure/Azure-Sentinel) (コミュニティ分析ルール、コネクタ定義、ソリューションテンプレート)
- [Microsoft Sentinel の課金](https://learn.microsoft.com/azure/sentinel/billing)
- [Microsoft Sentinel データ層管理](https://learn.microsoft.com/azure/sentinel/manage-data-overview)
**MITRE**
- [MITRE ATT&CK データソース](https://attack.mitre.org/datasources/)
**NIST (米国国立標準技術研究所)**
- [NIST SP 800-92: コンピュータセキュリティログ管理ガイド](https://csrc.nist.gov/pubs/sp/800/92/final)
**NSA (米国国家安全保障局)**
- NSA サイバーイベント転送ガイダンス
**NCSC-UK (英国国家サイバーセキュリティセンター)**
- NCSC-UK の「正確には何をログに記録すべきか?」
**Google Cloud**
- [Google Cloud 監査ログの概要](https://docs.cloud.google.com/logging/docs/audit)
- [Google Cloud 監査ログのベストプラクティス](https://docs.cloud.google.com/logging/docs/audit/best-practices)
その他の情報源も、作者の「専門知識」(そのように分類できる場合) とともに使用されました。
---
## プロジェクト構成```
LogHorizon.psd1 Module manifest (v0.9.0)
LogHorizon.psm1 Module loader
Public/
Invoke-LogHorizon.ps1 Entry point, the main orchestrator
Set-LogHorizonTableRetention.ps1 Scriptable table retention and plan changes
Private/
Connect-Sentinel.ps1 Azure auth + workspace resolution
Get-TableUsage.ps1 KQL query for ingestion volumes
Get-AnalyticsRules.ps1 Analytics rules + table/field extraction + correlation tags
Get-HuntingQueries.ps1 Hunting queries + table extraction
Get-DataConnectors.ps1 Data connector inventory
Get-DataTransforms.ps1 DCR transform discovery, split KQL generation
Get-DefenderXDR.ps1 Defender XDR analysis (optional)
Get-Incidents.ps1 Incident fetch + SentinelHealth auto-close attribution
Get-AutomationRules.ps1 Automation rule inventory + close-logic attribution
Get-SocOptimization.ps1 SOC improvement recommendations
Get-TableRetention.ps1 Per-table retention, archive, and plan type
Get-CollectionCache.ps1 Collection cache (key, path, read, write)
Get-LogHorizonEndpoint.ps1 ARM / Log Analytics / Graph endpoints for the signed-in Azure environment
Get-LogHorizonDictionary.ps1 Loads the term dictionary shown by the Dictionary menu
Invoke-AzRestWithRetry.ps1 REST wrapper: retry on 429/5xx/transport errors, async operation polling
Invoke-Classification.ps1 Static DB + heuristic classification + _SPLT_CL detection + custom file validation
Invoke-Analysis.ps1 Cost-value matrix + recommendations + Detection Analyzer + XDR Checker + split suggestions
Set-TableRetention.ps1 Retention change set, preview, Tables API apply engine, plan support lookups
Write-Report.ps1 Spectre.Console TUI rendering
Export-Report.ps1 JSON / Markdown / static HTML export with shared section renderer
Data/
log-classifications.json 481-entry classification knowledge base
basic-plan-tables.json Built-in tables that support the Basic plan (from the Azure Monitor feature matrix)
auxiliary-plan-tables.json Built-in tables that support the Auxiliary / Data Lake plan
implicit-consumers.json Non-KQL rule kinds to tables, plus platform tables
dictionary.json Term definitions for the Dictionary menu (kept 1:1 with this README, enforced by tests)
high-value-fields.json Split KQL knowledge base: 165 tables with curated fields and split hints
field-frequency-stats.json Community field frequency stats mined from the Azure-Sentinel rule corpus
custom-classifications-example.json Example custom classification override file
ReportTemplate.html Static HTML report template (pure-CSS tabs, zero JS, CSP meta)
Tests/
LogHorizon.Tests.ps1 437 Pester v5 unit tests
分割されたKQLナレッジベースである high-value-fields.json と field-frequency-stats.json は、公開されている Azure/Azure-Sentinel リポジトリ(Solutions/、Detections/、Hunting Queries/、およそ3,800個のYAMLルールファイル)からオフラインで構築されます。各クエリは、モジュールが実行時に使用するのと同じ Get-TablesFromKql と Get-FieldsFromKql を実行して、テーブルごとのフィールド頻度カウントを構築し、そこから3段階のフォールバックフィールドが導出されます。
TimeGenerated)マイニングされたフィールドは、キュレーションされた high-value-fields.json にマージされます(キュレーションされたエントリは保持され、少なくとも3つのルールと3つの意味のあるフィールドを持つ新たに発見されたテーブルが追加されます)。
実行時、Get-SplitKql はフォールバック階層を使用します: キュレーションされたKBエントリ -> ライブのルール/ハンティングフィールド分析 -> コミュニティのテーブルごとの統計 -> カテゴリのデフォルト -> ユニバーサルフィールド。フィールドの頻度は完璧な方法ではありませんが、知っておくと役立ちます。
437件のPester v5テスト。Azureへの接続は不要です。VS Codeの統合ターミナルではなく、通常のPowerShellセッションから実行してください。```powershell Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed
## ライセンス
GPL-3.0。 [LICENSE](https://github.com/lnfernux/log-horizon/blob/main/LICENSE) を参照してください。
## バージョン履歴
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 0.9.0 | 2026-09-06 | コードとデータの完全なレビューに基づく是正リリース。正確性: `Usage.Plan` と `Usage.IsBillable` に基づくプラン認識型の価格設定(Basic および Data Lake レート、課金 GB(1000 MB))、Detection Analyzer の自動クローズ帰属を有効なクローズ/プレイブックルール(`triggeringLogic.isEnabled`)に限定、`2025-09-01` を使用したインシデント取得(`$top=1000`)、非 KQL ルール種別とプラットフォームテーブルに対する暗黙的カバレッジ(`implicit-consumers.json`)、対話型リテンションのベースライン確認、単一のレコメンデーションソート。変換: サブスクリプションスコープでの DCR 検出を宛先ワークスペースでフィルタリングし、ワークスペース変換 DCR と関連付けも含む。権限が不足している場合は可視ステータスと警告を表示。ワークスペースおよびマルチステージ変換の解析、ライブテーブルスキーマと交差させた分割 KQL。堅牢性: コレクションキャッシュをデフォルトで有効化(`-NoCache`、`-RefreshCache`、`-CacheMaxAgeMinutes`、`-CachePath`)、スピナー前に認証を実行し警告は後で出力、TUI および Markdown 出力のエスケープ、ディレクトリを作成して書き込みパスを返すエクスポートパス解決、HTML 内の CSP メタ、トランスポートエラーおよび Location スタイルの非同期完了に対する REST リトライ、REST 経由のワークスペース解決(`Az.Resources` は削除)、カスタム分類の検証、PascalCase 認識型ヒューリスティックと Microsoft ファーストパーティフォールバック、正規表現タイムアウト。エンドポイントはサインイン中の Azure 環境(Government、China)に従い、API バージョンは SecurityInsights `2025-09-01`、OperationalInsights `2025-07-01`、レコメンデーション `2025-10-01-preview` に移行。データ: 分類データベースを 345 → 481 エントリに拡張し、`status`/`replacedBy`/`xdrStreamable`/`platform` キーを追加。80 以上のファーストパーティテーブルと 35 の後継テーブル、コネクタラベルの修正、`isFree` の修正。`basic-plan-tables.json` を再生成し、Azure Monitor テーブル機能マトリックスから新しい `auxiliary-plan-tables.json` を追加。`DeprecatedSource` レコメンデーション、Basic フォールバック付きのプラン認識型 Data Lake レコメンデーション、XDR Checker がストリーム可能性を尊重、TUI とエクスポートでのライフサイクルバッジ。レビューパス: キャッシュキーが価格設定とモジュールバージョンをカバー、カスタム分類のブール値と階層をキャストではなく解析、重大度認識型の自動クローズ帰属、分割 KQL 述語をライブスキーマに対してチェック、XDR フェッチステータスをサイレントな `$null` ではなく表示、拡張子のない出力パスはファイルとして扱う、インシデント所有者 ID は収集しない。TUI にツールが使用するすべての用語を収録した辞書メニューを追加。`Data/dictionary.json` でバックアップされ、テストでコードに固定。Automation ルールと Defender カスタム検出オブジェクトは消費フィールドに投影されるため、作成者 ID(createdBy、lastModifiedBy、割り当てられた所有者)がキャッシュやエクスポートに到達することはありません。GPL-3.0 ライセンス。437 テスト |
| 0.8.0 | 2026-05-26 | 新しいバルク TUI フローと単一テーブル更新エントリポイントを備えた対話型テーブルリテンション管理を追加。公開コマンド `Set-LogHorizonTableRetention` も追加。検証、Azure 非同期操作ポーリング、2 段階フォールバック(結合 PATCH、その後プランのみ+リテンションのみ)を備えた Tables API PATCH 適用エンジンを追加し、堅牢なリテンション更新を実現。検証、ペイロード形状、フォールバック、公開コマンドマッピングに対する Pester テストを追加。また、Sentinel に分析データがまだ残っている場合にデータレイクテーブルをデータレイク階層に変更するようユーザーに推奨するエッジケース/バグも修正 |
| 0.7.1 | 2026-05-15 | 設定済みテーブルプランを置き換えずに `Usage.Plan` からのプラン認識を追加。分析は観測されたプラン履歴を追跡し、マルチプラン使用と設定値と観測値の不一致にフラグを立て、ダッシュボード、テーブルドリルダウン、View All Tables、リテンション評価、エクスポートにプランデータを表示。Detection Analyzer の自動クローズ帰属を修正し、タイミングヒューリスティックが有効な Automation ルールが存在しない場合にのみ適用されるようにした。203 テスト合格 |
| 0.7.0 | 2026-04-16 | Detection Assessment にコスト価値マトリックス概要テーブル(Primary/Secondary × 7 評価カテゴリ、色分け付き)を追加。プライマリ/セカンダリテーブル用のドリルダウンサブメニュー(コスト/検出階層列付き)を追加。Detection Analyzer に GB 加重ボリュームカバレッジバー(検出/ハンティング/結合 GB を総取り込み量のパーセンテージとして、既存のテーブル数バーと併せて表示)を追加。Detection Analyzer のアダプティブ表示改善(動的バー幅、ルール名の切り詰め、コンソール幅に基づく条件付き列非表示)。193 テスト合格 |
| 0.6.3 | 2026-04-11 | PSGallery 向けのマイナーアップデート |
| 0.6.2 | 2026-04-11 | Log Tuning / Transforms メニュー: ライブデータチューニング分析(デプロイ済みルール/ハンティングクエリからのテーブルごとのフィールド使用状況、フィルター/プロジェクト/結合 KQL 生成、削減見積もり)、Tables API からのスキーマ列抽出、`Get-SplitKql` フォールバック階層(コミュニティ統計 → カテゴリデフォルト → ユニバーサルフィールド)、フィールド使用状況マトリックスを備えた包括的テーブル評価、KB+ライブチューニングエクスポートセクションの統合、Azure-Sentinel GitHub ルールコーパス用の `Build-FieldKnowledgeBase.ps1` マイニングスクリプト。Detection Analyzer: SentinelHealth ベースの自動クローズ帰属(プライマリ)とオペレーター認識型ルールマッチングフォールバック、Boolean 条件ラッパー解析、Resolved ステータス検出、ARM リソース ID の GUID 末尾マッチング。カバレッジは全テーブル(無料階層を含む)でテーブル数ベースに変更。スコアリング免責事項を TUI とエクスポートに追加。174 テスト |
| 0.6.1 | 2026-04-10 | バグ修正: `$kqlKeywords` フィルタリングをファイルスコープで共有(`Get-TablesFromKql` で未定義だった)、すべてのヘルパー関数に `[CmdletBinding()]` を追加、Defender 統合チェックを簡素化、ゴースト `-RuleCount` テストパラメータを削除。堅牢性: `Get-HuntingQueries` のページネーション、429/5xx に対する指数バックオフ付き `Invoke-AzRestWithRetry` リトライラッパー、`PricePerGB` 検証、主要関数での `Write-Verbose`。ドキュメント: バージョンバッジ、DB 数、前提条件をマニフェストと整合 |
| 0.6.0 | 2026-04-10 | 21 の `KnownXDRTables` による動的 XDR ストリーミング検出(ハードコードされた 18 から変更)、テーブルごとの `XDRState`(`NotStreaming`/`Analytics`/`Basic`/`Auxiliary`)、Auxiliary をデータレイク階層として認識、ストリーミングされていない XDR テーブルを `NotStreamedCount` 付きの Information/Low レコメンデーションとして表示、リテンションアナライザーがストリーミングされていない XDR テーブルを「XDR only (30d)」として表示、概要の階層内訳(analytics/basic/data lake+ストリーミングなし)、Export-Report の Auxiliary→「data lake」ラベル、分類 DB を 345 エントリに更新(`DeviceNetworkInfo` 追加、`DeviceInfo`→secondary/datalake、`DeviceImageLoadEvents` と `IdentityQueryEvents`→datalake 階層)、15 の新しい Pester テスト(合計 121) |
| 0.5.0 | 2026-04-03 | 純 CSS タブによる静的 HTML エクスポート(JS ゼロ、CDN なし、完全自己完結)、統合 MD/HTML セクションレンダラー、完全な JSON データキャプチャ(dataTransforms、correlationExcluded/Included、streamingTables)、CI/パイプライン用の `-NonInteractive` スイッチ、`md` 形式エイリアス、日時スタンプ付き自動ファイル名、DCR 変換での完全な KQL 表示(切り詰めなし)、Markdown テーブルでの複数行 KQL 処理、HTML トークン置換での正規表現 `$`-後方参照破損の修正、PowerShell エイリアス競合を避けるための内部ヘルパー名変更(`h`→`hEnc`、`md`→`mdEsc`)、33 の新しい Pester テスト(合計 106) |
| 0.4.1 | 2026-04-03 | セキュリティと安定性の修正 - トークンメモリのサニタイズ、出力パス検証と XSS 保護、REST API ページネーション制限、モジュールローダーエラーマスキングの修正、PSScriptAnalyzer 警告の解決 |
| 0.4.0 | 2026-04-02 | 変換検出(DCR リスト+変換タイプ分類)、分割テーブル検出(`_SPLT_CL`)、15 テーブル知識ベース(`high-value-fields.json`)+ルール分析フォールバックを備えた分割 KQL ヘルパー、ポータル対応の条件のみの KQL 出力、展開可能なレコメンデーションリスト、分割 KQL 提案 TUI メニュー |
| 0.3.0 | 2026-04-02 | ログリテンションコンプライアンス分析(CISA M-21-31、NIST SP 800-92、NCSC-UK、ASD ACSC、NSA)、相関タグ検出(`#DONT_CORR#`/`#INC_CORR#`)、リテンション評価メニュービュー、All Tables のリテンション列、分類スキーマの `recommendedRetentionDays` |
| 0.2.2 | 2026-04-02 | SOC 最適化テーブルが狭いコンソールで Detail 列を非表示 |
| 0.2.1 | 2026-04-02 | カスタム分類サポート(`-CustomClassificationPath`)、API 提案/ドリルダウン付きの拡張 SOC 最適化レコメンデーション、アクティブのみのデフォルトビュー、UTF-8 エンコーディング警告の抑制 |
| 0.2.0 | - | 分類エンジン、コスト価値スコアリング、Spectre.Console TUI、JSON/Markdown エクスポートを備えた最初の公開リリース |
| 0.1.0 | - | 開発用内部バージョン |
## 既知の問題
### PwshSpectreConsole UTF-8 エンコーディング警告
ターミナルで UTF-8 出力を有効にするには、PowerShell の `$PROFILE` ファイルの先頭に次の行を追加し、ターミナルを再起動してください。```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
このモジュールはインポート時にこれを自動的に設定しますが、セッションによっては警告が表示される場合があります。これは外観上の問題であり、機能には影響しません。
問題がある場合や貢献したい場合は、PRを作成してください。
| 7.0+ |
| Az モジュール | Az.Accounts |
| その他のモジュール | PwshSpectreConsole 2.6.3+ |
| オプション | Microsoft.Graph.Authentication(-IncludeDefenderXDR をサインインユーザーとして使用する場合) |
| パラメータ | 型 | 必須 | 既定値 | 説明 |
|---|
-SubscriptionId | string | はい | - | Azure サブスクリプション ID |
-ResourceGroup | string | はい | - | Sentinel ワークスペースを含むリソースグループ |
-WorkspaceName | string | はい | - | Log Analytics ワークスペース名 |
-WorkspaceId | string | いいえ | - | ワークスペース ID(省略時は自動解決) |
-Output | string | いいえ | - | エクスポート形式: json、markdown / md、または html(エイリアス -o) |
-OutputPath | string | いいえ | - | エクスポート先のファイルまたはディレクトリパス。既存のディレクトリまたは末尾の区切り文字がある場合はタイムスタンプ付きファイル名が付けられ、拡張子のないファイル名には形式の拡張子が付き、存在しないディレクトリは作成されます |
-Keywords | string[] | いいえ | - | ギャップ分析用のキーワード(例: 'AWS','CrowdStrike'、エイリアス -kw) |
-IncludeDefenderXDR | switch | いいえ | - | Defender XDR カスタム検出分析を含める |
-IncludeDetectionAnalyzer | switch | いいえ | - | インシデントとオートメーションルールを使用したルールごとのノイズ検出分析を含める |
-DetectionLookbackDays | int | いいえ | 90 | インシデント/オートメーションベースの検出分析のクエリ期間(1〜365日) |
-DaysBack | int | いいえ | 90 | 使用状況データのクエリ期間(1〜365日) |
-PricePerGB | decimal | いいえ | 5.59 | Sentinel Analytics 層の取り込み価格(GB あたり)(エイリアス -ppgb) |
-BasicPricePerGB | decimal | いいえ | 1.15 | Basic Logs の GB あたりの価格 |
-LakePricePerGB | decimal | いいえ | 0.20 | Auxiliary / Data Lake 層の GB あたりの価格(取り込み + 処理) |
-NonInteractive | switch | いいえ | - | TUI ダッシュボードをスキップして直接エクスポートする(-Output が省略された場合はパイプラインにデータを返す) |
-CustomClassificationPath | string | いいえ | - | 分類を追加または上書きするカスタム JSON ファイルへのパス(エイリアス -clf) |
-NoCache | switch | いいえ | - | コレクションキャッシュの読み取りまたは書き込みを行わない |
-RefreshCache | switch | いいえ | - | 新しいデータを収集してキャッシュエントリを上書きする |
-CacheMaxAgeMinutes | int | いいえ | 60 | 再利用するキャッシュエントリの最大経過時間(1〜10080) |
-CachePath | string | いいえ | $env:LOCALAPPDATA\LogHorizon\cache | キャッシュファイルのディレクトリ |
| データソース | API | 取得するもの |
|---|
| テーブル使用状況 | Usage テーブル(KQL) | クエリ期間におけるテーブルごとの取り込み量、プラン、課金対象フラグ |
| 分析ルール | Security Insights REST | アクティブな検出ルール + ヒットするテーブル + 相関タグ、および非 KQL ルール種別の暗黙的なテーブルコンシューマー |
| ハンティングクエリ | Log Analytics 保存済み検索 REST | 保存済みハンティングクエリ + 参照されるテーブル |
| データコネクタ | Security Insights REST | インストール済みコネクタのインベントリ |
| SOC 最適化 | Security Insights REST(プレビュー) | Microsoft の組み込み SOC 推奨事項 |
| テーブル保持期間 | Log Analytics Tables REST | テーブルごとの保持期間、アーカイブ、プラン(Analytics/Basic/Auxiliary)、継承された既定フラグ、スキーマ列 |
| データ収集ルール | Azure Monitor REST | ワークスペースを対象とする DCR(サブスクリプションリスト、ワークスペース変換 DCR、関連付け)とその変換 |
| Defender XDR | Microsoft Graph | XDR カスタム検出ルール(オプション。委任された CustomDetection.Read.All または Az Graph トークン) |
| インシデント | Security Insights REST | インシデントの結果(状態/分類)、タイミング、ルール品質スコアリング用のルールリンクヒント |
| オートメーションルール | Security Insights REST | ルールレベルのインシデントクローズアクションと、自動クローズ帰属のためのタイトル一致条件 |
| SentinelHealth | Log Analytics KQL | インシデント番号付きのオートメーションルール実行イベント。決定的な自動クローズ帰属用(オプション。ヘルスモニタリングが必要) |
AAD、Microsoft、Azure、Defender、Purview、Entra、Sentinel、Office、Intune、Windows ...)を持つ組み込みテーブル -> プライマリ。レビューとデータベースへの追加がフラグ付けされる*Log/*Logs 名 -> セカンダリxdrimplicitplatformnoneSecurityIncidentSentinelHealthWatchlistUsagePlatform| 種類 | 発動条件 | 対処方法 |
|---|
| Data Lake | セカンダリ + 高コスト + 検出が少ない、かつテーブルが Auxiliary プランをサポートしている(Basic のみがサポートされている場合は Basic プランの提案にフォールバック) | Auxiliary/Data Lake 層に移行。節約額は現在のコストから同じボリュームのレイク(または Basic)レートを差し引いたもの |
| 低価値 | 高コスト + 検出ゼロ | ルールを追加、フィルタリング、またはデータレイクに移行 |
| XDR 最適化 | XDR ストリーミング + Sentinel ルール 0 + XDR ルールが存在 | ストリーミングを停止し、代わりに統合 XDR ポータルを使用 |
| カバレッジ不足 | プライマリ + 検出ゼロ(プラットフォームテーブル以外) | データから価値を得るために分析ルールを作成 |
| 取り込み時フィルタ | プライマリ + >20 GB + <=3 検出 | 取り込み時変換を適用してボリュームを削減 |
| 分割候補 | プライマリ + 高ボリューム + 検出あり + 既存の変換なし | 高価値の行が Analytics に残り、残りが Data Lake に送られるようにテーブルを分割 |
| プラン使用状況 | Usage 行が複数のプランを示す、または設定されたプランが Usage で観測されたものと異なる | プラン移行が想定どおりだったか確認 |
| 非推奨ソース | データベースで非推奨またはレガシーとマークされたテーブルがまだ取り込まれている | 検出を置換テーブルに移行し、古いコネクタを廃止。情報提供のみ: 取り込みが消えるのではなく移動するため、節約額は主張されない |
| 保持期間不足 | ワークスペースまたはテーブルの保持期間が90日ベースライン未満 | 規制ガイダンスを満たすために合計/アーカイブ保持期間を延長 |
| 保持期間改善 | 有料の非プラットフォームテーブルが90日を満たすが、カテゴリ推奨を下回る | より長い合計保持期間を検討 |
| インタラクティブがベースライン未満 | インタラクティブ(ホット)保持期間が90日未満の Analytics テーブル | 短いホットウィンドウが意図的でない限り、インタラクティブ保持期間を Sentinel に含まれる90日に引き上げ |
| XDR チェッカー | 既知の Defender XDR テーブルがストリーミングされていない、カバレッジなしでストリーミングされている、Data Lake に転送されていない、または1年アドバイザリ未満 | XDR テレメトリのストリーミングと保持期間を確認 |
| 検出アナライザー | ルールスコア >= 70 でインシデントが少なくとも5件(-IncludeDetectionAnalyzer 付き) | ノイズの多いルールを調整または無効化 |