LoginSignup
6
1

Azure Firewall のログ(Azure Diagnostics)を Log Analytics で見やすくする。

Last updated at Posted at 2022-12-08

駆け出しアーキテクトのやまぱんです。
今回 Azure Firewall のログ(AzureDiagnostics)を Kusto クエリと Log Analytics を使って見やすくしてみました。

今回のターゲットテーブルは Azure Diagnostics です。 リソース固有の方の ” 構造化されたファイアウォール ログ ” もありますが、執筆時現在でプレビュー機能となっています。
https://learn.microsoft.com/ja-jp/azure/firewall/firewall-preview#structured-firewall-logs-preview
こちらについては別の下記記事で記載していますのでご覧ください。

やりたいこと

Azure Firewall のログを見やすくする。
例えば、アプリケーションルールのログの場合 Log Analytics に転送して見てみるとこんな感じです。

msg_s の中に送信元や宛先、アクションなどが記載されていて、見れるっちゃ見れるんですが、個人的に見にくい。
だいたい Firewall のログみるならこのあたりの要素が大事なはず。

クエリ

kusto query
AzureDiagnostics
| where Category == "AzureFirewallApplicationRule" 
|where OperationName =="AzureFirewallApplicationRuleLog"

image.png

そこで今回は msg_s の中を parse 処理して見やすくしてみました。

ちなみに、Log Analytics ではなくストレージ アカウントに転送した場合は json ファイルを生で確認できます。もちろんみにくい。検索もしにくい。

json
{ "category": "AzureFirewallApplicationRule", "time": "2022-12-06T18:22:00.1514790Z", "resourceId": "/SUBSCRIPTIONS/E2F1DEC1-XXXXXXXXXXXXXXXXXXX/RESOURCEGROUPS/RG-NORMAL/PROVIDERS/MICROSOFT.NETWORK/AZUREFIREWALLS/FW-PREM", "operationName": "AzureFirewallApplicationRuleLog", "properties": {"msg":"HTTPS request from 10.0.0.6:52686 to winatp-gw-eus3.microsoft.com:443. Action: Deny. No rule matched. Proceeding with default action"}}

parse 処理について

下記みたいな要領で記載する。

parse (parse対象の文字列があるカラム) with "抜き出したい文字列の直前の文字列" (カラム名) "抜き出したい文字列の直前の文字列" (カラム名) ・・・・・

超ざっくり説明すると、例えば下記の記述であれば "request from" の文字列の "あと" から次に指定されされる (この場合は ” To :” ) "まで" の文字列を From カラムにする。

kusto query
| parse msg_s with  *"request from" From "to" To ". Action:" Action

例えば下記の文字列が ”msg_s with” の中にあった場合、上記の処理をすると From カラムは "10.0.0.6:52686" になります。

HTTPS request from 10.0.0.6:52686 to winatp-gw-eus3.microsoft.com:443

事前準備

Azure Firewall から Log Analytics へ連携をしておきます。

下記のページを参考にできます。
https://learn.microsoft.com/ja-jp/azure/firewall/firewall-diagnostics#enable-diagnostic-logging-through-the-azure-portal

私は今回 allLogsにしましたが、必要に応じて任意のルールを選択してください。
image.png

そうすることで選択した Log Analytics でログがたまってクエリを打つとデータが出るようになります。
すこしラグがありますが、私の環境では一時間もしないうちに連携が開始されていました。

困ったポイント

AzureFirewallApplicationRuleLog や、AzureFirewallNetworkRuleLog、AzureFirewallNATRulelog ,AzureFirewallIDSLog で今回試してみましたが、ログの種類によって msg_s 内の記述形式が微妙にことなるので微修正が必要でした。
そのためログの種類ごとに分けて対処してます。(もっとスマートな方法がある気もしています。)

Kusto クエリ

下記にサンプルを記載します。
|project の項目などは必要に応じて適宜追加してください。

AzureFirewallApplicationRuleLog

クエリサンプル

kusto query
AzureDiagnostics 
|where OperationName =="AzureFirewallApplicationRuleLog"
| parse msg_s with  *"request from" From "to" To ". Action:" Action
|project  TimeGenerated,OperationName,From,To,Action

結果サンプル
image.png
image.png

AzureFirewallNetworkRuleLog

クエリサンプル

kusto query
AzureDiagnostics
| where OperationName == "AzureFirewallNetworkRuleLog"
| parse msg_s with  *"request from" From "to" To ". Action:" Action 
|project  TimeGenerated,OperationName,From,To,Action

結果サンプル
image.png

AzureFirewallIDSLog

クエリサンプル

kusto query
AzureDiagnostics
| where OperationName == "AzureFirewallIDSLog"
| parse msg_s with  *"request from" From "to" To ". Action:" Action ". Signature:" AlertSignature ". IDS:" IDS ". Priority:" Priority ". Classification:" Classification
|project  TimeGenerated,OperationName,From,To,Action,AlertSignature,IDS,Priority,Classification

結果サンプル
image.png

AzureFirewallNATRulelog

クエリサンプル

kusto query
AzureDiagnostics
| where OperationName == "AzureFirewallNatRuleLog"
| parse msg_s with  *"request from" From "to" To "was DNAT'ed to" DNATto ". Policy:" Policy ". Rule:"Rule
|project  TimeGenerated,OperationName,From,To,DNATto,Policy

結果サンプル
image.png

これで何が嬉しいか

クエリの使い方の幅があがりましたね!
これによってまず見やすくなったし、アラートルールが設定しやすくなったと思います。

参考 Web

下記を参考に作成しました。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1