IPアドレスで絞り込みするKQL(関数)纏め
AzureのLog Analyticsワークスペースでログ検索する場合はKQLを利用します。
グローバルIPからのアクセスのみに絞り込みや特定のIPを除外したい場合などに使えるKQL関数について纏めてみました。
IPアドレスが指定範囲内にあるかどうか判別してログを絞り込みするなど、クエリ内でのKQL関数使用方法について確認しています。
今回は仮想マシン(Azure VM)のVM Connection(仮想マシンの分析情報)のログを例に纏めています。
IPアドレスを範囲内にあるか判別するKQL
VM Connection(仮想マシンの分析情報)のログを例に、グローバルIPから来たアクセスのみに絞り込みしてみます。
仮想マシンへのアクセス元IPはSourceIpに出力されます。
指定のレンジにipが含まれるか判別する場合はipv4_is_in_range()
指定のレンジにIPアドレスが含まれるかどうかを判別する場合は、ipv4_is_in_range()を使います。
VM ConnectionのSourceIpが特定のIPレンジにある場合の例です。
SourceIpが10.0.0.0/8のレンジにあるかどうかを判別します。
extendを利用してipv4_is_in_range_Check列を追加します。
ipv4_is_in_range()判別結果を追加した列に表示します。
範囲内にある場合はtrueが戻ります。
ipv4_is_in_range_Checkの例 | ||
|
||
指定した範囲(10.0.0.0/8)に無い場合のログに絞り込みたい場合は、ipv4_is_in_range_Checkの結果がfalseのログのみを抽出します。
指定範囲外のIPのみに絞り込み | ||
|
||
複数のレンジを指定してipが含まれるか判別する場合はipv4_is_in_any_range()
ipv4_is_in_range()の場合は範囲指定が1つしか出来ません。
複数の範囲を指定する場合はipv4_is_in_any_range()を利用します。
SourceIpが"10.0.0.0/8″, “172.16.0.0/12", “192.168.0.0/16″のレンジにあるかどうかを判別します。
extendを利用してipv4_is_in_any_range_Check列を追加します。
ipv4_is_in_any_range()判別結果を追加した列に表示します。
範囲内にある場合はtrueが戻ります。
ipv4_is_in_any_range_Checkの例 | ||
|
||
指定した範囲(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)に無い場合のログに絞り込みたい場合は、ipv4_is_in_any_range()の結果がfalseのログのみを抽出します。
アクセス元IPの絞り込みが出来ました。
指定範囲外のIPのみに絞り込み | ||
|
||
letを使用してKQL内で利用する一時的な変数を作成出来ます。
クエリ内で使用できます。
Local_ipと言う変数を定義しています。
同様の結果が得られる事が確認出来ます。
letを使った場合 | ||
|
||
ipを比較する場合はipv4_is_match()
IPを比較する場合はipv4_is_match()を利用します。
ipv4_is_in_range_Checkと同様の使い方が出来ます。
ipv4_is_match()の場合はプレフィックスを個別で指定する事が出来ます。
SourceIpが"10.0.0.0/8″のレンジにあるかどうかを判別します。
extendを利用してipv4_is_match_Check列を追加します。
ipv4_is_match()判別結果を追加した列に表示します。
範囲内にある場合はtrueが戻ります。
ipv4_is_match()の例 | ||
|
||
|
||
プライベート ネットワークのIPかどうかを判別する場合はipv4_is_private()
プライベート ネットワークIPのレンジ(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)に含まれるか判別する場合は、ipv4_is_private()を使います。
ipv4_is_privateはIP範囲指定せずに利用できます。
extendを利用してipv4_is_private_Check列を追加します。
ipv4_is_private判別結果を追加した列に表示します。
範囲内にある場合はtrueが戻ります。
ipv4_is_privateの例 | ||
|
||
プライベート ネットワークIP(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)以外のアクセスのみに絞り込みたい場合は、ipv4_is_private()の結果がfalseのログのみを抽出します。
絞り込み出来ている事が確認出来ました。
プライベートネットワークIP以外のアクセスログのみに絞り込み | ||
|
||
最後に
今回はIPが範囲内にあるかどうかを判別する場合に使えるKQL関数について纏めてみました。
IPアドレスが指定範囲内にあるかどうか判別結果を利用する事でログの絞り込みが出来る事が確認出来ました。
今後も色々試してみたいと思います。
初めてのKQLと言う内容で基本的な内容についてはこちらに纏めています。
併せて見て頂けると有難いです。