Kusto クエリ言語を使用してデータのクエリを実行する
Microsoft Sentinel で Kusto Query Language (KQL) を使用すると、収集されたデータを検索およびフィルター処理することができます。
Kusto クエリ言語
KQL には、収集されたデータに対して対話型の分析を作成、保存、実行する機能があります。 Microsoft Sentinel では、KQL を使用して重要なデータを視覚化および分析できます。 KQL を使用すると、次のような演算子を含む複雑な分析クエリを作成できます。
- 計算列
- 結合関数
- 集計でグループ化
基本的なクエリの記述と実行
クエリは、データを処理し、データやメタデータを変更せずにその処理の結果を返す読み取り専用の要求です。 SQL クエリと同様に、KQL クエリには、データベース、テーブル、列などの階層に編成されたスキーマ エンティティが使用されます。 "スキーマ" は、論理カテゴリでグループ分けされたテーブルのコレクションです。 クエリは、セミコロン (;) で区切られた一連のクエリ ステートメントで構成されます。
クエリを作成するときは、テーブル名または検索コマンドのいずれかから始めます。 たとえば、次のクエリを使用すると、Event
テーブルからすべてのレコードが取得されます。
Event
パイプ (|) 文字を使用すると、コマンド間を区切ることができます。 最初のコマンドの出力は次のコマンドの入力になります。 1 つのクエリに任意の数のコマンドを追加できます。 次のクエリでは、Event
テーブルのすべてのレコードを取得し、その中から、すべてのプロパティを対象として error
という語句を検索します。
Event
| search error
表形式およびスカラー演算子を使用してクエリを作成できます。これは KQL によって複数の表形式の式ステートメントに結合され、クエリの結果が生成されます。
source1 | operator1 | operator2
次の例のソースは AzureActivity
です。 最初の演算子は where
です。論理式に基づいてレコードを除外します。 2 つ目の演算子も where
です。
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
既定では、Log Analytics のクエリの時間範囲は過去 24 時間に制限されています。 別の時間の範囲を設定するには、明示的な TimeGenerated
フィルターをクエリに追加するか、Time range
コントロールを使用します。 たとえば、次のクエリを使用すると、過去 1 時間のデータが返されます。
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
| where TimeGenerated > ago (1h)
クエリと、いくつかのよく使用される演算子を組み合わせることができます。
count
。 テーブルの行数が返されます。take
。 最大で指定のデータ行数まで返されます。project
。 列のサブセットが選択されます。sort
。 入力テーブルの行の順序を 1 つ以上の列で並べ替えます。top
。 指定された列で並べ替えられた最初の N 個のレコードを返します。extend
。 派生列が計算されます。summarize
。 行のグループが集計されます。render
。 結果がグラフィックで表現され、出力されます。
2 つのソース (テーブル) のレコードを組み合わせるには、join
演算子を使用できます。 union
演算子を使用すると、2 つ以上のテーブルが 1 つに結合されます。
詳細については、Microsoft の「Log Analytics のチュートリアル」を参照してください。ここでは、クエリ自体を操作するのではなく、Log Analytics の機能を使用してクエリを作成し、実行しています。
KQL については、Azure Data explorer チュートリアルも参照してください。
Note
Microsoft Sentinel Log Analytics は、Azure Data Explorer で使用されているすべての KQL 構文をサポートしているわけではありません。
GitHub 上の Microsoft Sentinel リポジトリ
GitHub 上の Microsoft Sentinel リポジトリを使用して、環境の保護と脅威の検出に役立つ特殊なクエリやブックを検索することもできます。 たとえば、Microsoft Sentinel GitHub リポジトリの次のクエリを使用すると、ユーザー アカウントへのアクセス許可の疑わしい委任が表示されます。
let timeframe = 7d;
AzureActivity
| where TimeGenerated >= ago(timeframe)
| where OperationName == "Create role assignment"
| where ActivityStatus == "Succeeded"
| project Caller, CallerIpAddress
| evaluate basket()
| extend AccountCustomEntity = Caller, IPCustomEntity = CallerIpAddress
このクエリを使用すると、管理者が他のユーザーに Azure リソースへのアクセスを許可する IP アドレスを分析できます。 有効な IP アドレスからの操作ではない場合、このクエリによって疑わしいアクティビティが通知されるので、それをさらに調査することができます。
いくつかの例を試したい場合は、Azure portal のデモ環境を使用してください。