アップデート一覧に戻る
New releaseSep 8, 2026

log-horizon v0.9.0

Microsoft Sentinel SIEM ログソース分析ツール

共有

Microsoft Sentinel SIEM ログソースアナライザー

PowerShell 7+ Module Version


これらのログから実際に何が得られているのか?」とか「Microsoft Sentinel に推奨されるログは何か?」といった質問に何度も答えてきました。答えは常に多くの要因に依存しますが、汎用的にすることはできます。そこで、このツールをここに作りました。

Log Horizon は、Microsoft Sentinel ワークスペース(およびオプションで Defender XDR)に接続し、取り込んでいるすべてのログテーブルを調べて、セキュリティ上の価値が得られているか、それとも単にコストを浪費しているだけかを判断します。テーブルを分類し、検出ルールに基づいてスコアリングし、具体的な推奨事項とコスト削減見積もりを提供します。

重要: これは汎用的なアプローチです。ログソースが環境にとって重要だと分かっている場合、そのコンテキストが常にこのツールの指示よりも優先されます。分類は出発点であり、絶対的なものではありません。

さらに読みたいですか? Log Horizon に関するブログ記事があります:

  1. ツールリリース: Log Horizon
  2. アップデート: Log Horizon v0.5.0
  3. 実用的なログベースラインの構築と、Log Horizon がそれをどう支援するか
  4. 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)に従う
対話型 TUISpectre.Console ダッシュボード。メニュー、色分けされたテーブル、ドリルダウン、保持期間ウィザード、ASCII アートを備える
エクスポートチーム共有用の JSON、Markdown、または静的 HTML レポート

免責事項

[!CAUTION] 免責事項

このツールは AI の支援を受けて開発・保守されています。 このソリューションを使用する際は注意を払い、本番環境で実行する前に、何を実行しているのかを常に理解してください。開発者は、脆弱性や問題について一切の責任を負いません。

このツールをダウンロード、インストール、または使用することにより、これらの条項を読み、理解し、同意したものとみなされます。

前提条件

必要なものバージョン
PowerShell7.0+
Az モジュールAz.Accounts
その他のモジュールPwshSpectreConsole 2.6.3+
オプションMicrosoft.Graph.Authentication(-IncludeDefenderXDR をサインインユーザーとして使用する場合)

エンドポイントは、現在の Connect-AzAccount セッションの Azure 環境に従うため、Azure Government および Azure China のワークスペースは追加パラメータなしで動作します。環境が利用できない場合は、パブリッククラウドの値が使用されます。

Azure にまだログインしていない場合、モジュールが自動的に Connect-AzAccount を起動します。すでにログインしている場合は、そのまま続行します。

アクセス許可: ワークスペースに対する Log Analytics Reader と Microsoft Sentinel Reader で分析をカバーできます。変換ディスカバリには、サブスクリプションまたはリソースグループに対する Microsoft.Insights/dataCollectionRules/read(Monitoring Reader)も必要です。これがない場合、実行は続行され、不足しているアクセス許可を示す警告が出力されます。-IncludeDefenderXDRCustomDetection.Read.All を持つ Microsoft Graph を使用します。これはサインインユーザーの場合、オプションの Microsoft.Graph.Authentication モジュールを意味します。

はじめに

かなり簡単です:```powershell

Grab the dependencies

Install-Module -Name Az.Accounts -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser

Clone and import

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 を選択すると、保持期間やタイプの一括更新ができます。
  • Log Tuning / Transforms > Evaluate specific table を開き、Manage retention/type for this table を選択すると、単一テーブルの変更ができます。

スクリプトや自動化には、専用の公開コマンドを使用してください:```powershell

Preview a single-table change (prints a Table / Plan / Interactive / Total / Status / Reason table, applies nothing)

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -TotalRetentionInDays 365 -WhatIf

Switch tables to Basic and set total retention

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'AzureDiagnostics','VMConnection' -TargetPlan Basic -TotalRetentionInDays 730

Use -1 for inherit/default semantics

RetentionInDays = inherit workspace default

TotalRetentionInDays = remove long-term retention

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

Force a fresh collection and refresh the cache

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -RefreshCache

Never read or write the cache

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NoCache

Accept cached data for up to a day

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

すべてのパラメータ

パラメータ必須既定値説明
-SubscriptionIdstringはい-Azure サブスクリプション ID
-ResourceGroupstringはい-Sentinel ワークスペースを含むリソースグループ
-WorkspaceNamestringはい-Log Analytics ワークスペース名
-WorkspaceIdstringいいえ-ワークスペース ID(省略時は自動解決)
-Outputstringいいえ-エクスポート形式: jsonmarkdown / md、または html(エイリアス -o
-OutputPathstringいいえ-エクスポート先のファイルまたはディレクトリパス。既存のディレクトリまたは末尾の区切り文字がある場合はタイムスタンプ付きファイル名が付けられ、拡張子のないファイル名には形式の拡張子が付き、存在しないディレクトリは作成されます
-Keywordsstring[]いいえ-ギャップ分析用のキーワード(例: 'AWS','CrowdStrike'、エイリアス -kw
-IncludeDefenderXDRswitchいいえ-Defender XDR カスタム検出分析を含める
-IncludeDetectionAnalyzerswitchいいえ-インシデントとオートメーションルールを使用したルールごとのノイズ検出分析を含める
-DetectionLookbackDaysintいいえ90インシデント/オートメーションベースの検出分析のクエリ期間(1〜365日)
-DaysBackintいいえ90使用状況データのクエリ期間(1〜365日)
-PricePerGBdecimalいいえ5.59Sentinel Analytics 層の取り込み価格(GB あたり)(エイリアス -ppgb
-BasicPricePerGBdecimalいいえ1.15Basic Logs の GB あたりの価格
-LakePricePerGBdecimalいいえ0.20Auxiliary / Data Lake 層の GB あたりの価格(取り込み + 処理)
-NonInteractiveswitchいいえ-TUI ダッシュボードをスキップして直接エクスポートする(-Output が省略された場合はパイプラインにデータを返す)
-CustomClassificationPathstringいいえ-分類を追加または上書きするカスタム JSON ファイルへのパス(エイリアス -clf
-NoCacheswitchいいえ-コレクションキャッシュの読み取りまたは書き込みを行わない
-RefreshCacheswitchいいえ-新しいデータを収集してキャッシュエントリを上書きする
-CacheMaxAgeMinutesintいいえ60再利用するキャッシュエントリの最大経過時間(1〜10080)
-CachePathstringいいえ$env:LOCALAPPDATA\LogHorizon\cacheキャッシュファイルのディレクトリ

内部の仕組み

フェーズは4つあります。

1. データ収集

モジュールは Azure に接続し、Log Analytics、Security Insights、Azure Monitor、Microsoft Graph API からデータを取得します。すべての呼び出しは再試行ラッパー(429、5xx、トランスポートエラー)を通過し、-NoCache が設定されていない限り、収集されたデータは次回の実行のためにローカルにキャッシュされます。

データソース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 XDRMicrosoft GraphXDR カスタム検出ルール(オプション。委任された CustomDetection.Read.All または Az Graph トークン)
インシデントSecurity Insights RESTインシデントの結果(状態/分類)、タイミング、ルール品質スコアリング用のルールリンクヒント
オートメーションルールSecurity Insights RESTルールレベルのインシデントクローズアクションと、自動クローズ帰属のためのタイトル一致条件
SentinelHealthLog Analytics KQLインシデント番号付きのオートメーションルール実行イベント。決定的な自動クローズ帰属用(オプション。ヘルスモニタリングが必要)

2. 分類

すべてのテーブルは2つのパスで分類されます。

最初にData/log-classifications.json の481エントリのナレッジベースに対する直接ルックアップが行われます。各エントリには、コネクタ名、プライマリ/セカンダリ分類、セキュリティカテゴリ、MITRE データソースマッピング、推奨価格層と保持期間、およびオプションのライフサイクルフラグ(置換テーブル付きの非推奨/レガシー、XDR ストリーミング可否、プラットフォーム)が含まれます。

一致しない場合、ヒューリスティックルールが次の順序で適用されます:

  • 名前に AlertIncidentThreatSigninLogonAuditRiskDetection などのセキュリティトークンが含まれる(PascalCase の単語先頭で一致)-> プライマリ
  • 名前がインフラテレメトリのように見える: FlowMetricDiagnosticPerfHeartbeatHealthInventoryUsage -> セカンダリ
  • アクティブな分析ルールがそれを参照している -> プライマリ
  • Microsoft プレフィックス(AADMicrosoftAzureDefenderPurviewEntraSentinelOfficeIntuneWindows ...)を持つ組み込みテーブル -> プライマリ。レビューとデータベースへの追加がフラグ付けされる
  • 一般的な *Log/*Logs 名 -> セカンダリ
  • 高ボリューム(>10 GB/月)で検出がない -> セカンダリ
  • 上記のいずれでもない -> 不明

3. コスト価値スコアリング

各テーブルはいくつかの次元でスコアリングされます:

  • コスト層: 無料 / 低(<1 GB)/ 中(1〜10 GB)/ 高(10〜50 GB)/ 非常に高(>50 GB)
  • 検出層: なし / 低(1〜2ルール)/ 中(3〜9ルール)/ 高(10+ルール)
  • 評価: 高価値 / 良好な価値 / カバレッジ不足 / 最適化 / 低価値 / 過少利用 / 無料層 / プラットフォーム
  • カバレッジ %: 少なくとも1つの分析ルールまたはハンティングクエリが参照するテーブルの割合。tablesWithRules / totalTables * 100 として計算されます。テーブルごとのカバレッジは、KQL を解析してテーブル名を検出した分析ルール + ハンティングクエリの合計です。
  • 暗黙的カバレッジ: KQL を持たないルール種別もテーブルを消費します。Data/implicit-consumers.json がそれらをマッピングします(Threat Intelligence マッチング -> ThreatIntelIndicators/ThreatIntelObjects、Fusion -> SecurityAlert/Anomalies、UEBA -> BehaviorAnalytics/UserPeerAnalytics/IdentityInfo、Microsoft インシデント作成 -> SecurityAlert)。これらの種別の有効なルールは実効カバレッジにカウントされ、各テーブルは CoverageSource として kqlxdrimplicitplatform、または none を報告します。Sentinel が自身のために書き込むプラットフォームテーブル(SecurityIncidentSentinelHealthWatchlistUsage ...)はカバレッジ不足としてフラグ付けされることはなく、Platform 評価が付けられます。
  • 有効な分析ルールと有効な Defender カスタム検出のみがカバレッジにカウントされます。

次に、モジュールは推奨事項(13種類)を生成します:

種類発動条件対処方法
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 付き)ノイズの多いルールを調整または無効化

推奨事項は一度ソートされ、高 > 中 > 低、次に推定節約額の順になります。すべての出力(JSON、Markdown、HTML、TUI)はその順序を維持します。

4. 検出アナライザー(ノイズスコアリング)

-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.jsonfield-frequency-stats.json は、公開されている Azure/Azure-Sentinel リポジトリ(Solutions/Detections/Hunting Queries/、およそ3,800個のYAMLルールファイル)からオフラインで構築されます。各クエリは、モジュールが実行時に使用するのと同じ Get-TablesFromKqlGet-FieldsFromKql を実行して、テーブルごとのフィールド頻度カウントを構築し、そこから3段階のフォールバックフィールドが導出されます。

  • ユニバーサルフィールド: 全テーブルの50%以上に出現するフィールド(例: TimeGenerated
  • カテゴリのデフォルト: 分類カテゴリ内のテーブルの40%以上に出現するフィールド
  • テーブルごとの統計: 少なくとも3つの参照ルールを持つテーブルに対する生のフィールド頻度カウント

マイニングされたフィールドは、キュレーションされた 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を作成してください。

このツールが気に入りましたか?


Buy Me a Coffee at ko-fi.com

カテゴリ