Azure Firewall の新しい構造化されたファイヤーフォールのログ(リソース固有)を試す。

駆け出しアーキテクトのやまぱんです。
この記事は [Microsoft Azure Tech Advent Calendar 2022](https://qiita.com/advent-calendar/2022/microsoft-azure-tech) の 18 日目の記事です

Azure Firewall の新しい構造化されたファイヤーフォールログ(リソース固有)を試してみました。
執筆時現在ではプレビュー機能となっています。

:::note info
2023/06/15(木) 追記：GA(General Available - 一般提供)したようです。
・Announcing Azure Firewall Structured Logs General Availability
https://techcommunity.microsoft.com/t5/azure-networking-blog/announcing-azure-firewall-structured-logs-general-availability/ba-p/3847154

・Azure 構造化ファイアウォール ログ
https://learn.microsoft.com/ja-JP/azure/firewall/firewall-structured-logs
:::

### 何が嬉しいか
従来の Azure Firewall の新しい構造化されたファイヤーフォールログ(リソース固有) では、見やすくするために Kusto クエリ(parse 処理)を使って整形する必要がありました。その時の記事はこちらです！

https://qiita.com/aktsmm/items/380eab220bd892581a19

一方、今回利用する構造化されたログとは、従来のファイヤーウォールログ(Azure Diagnostics)に比べて取れるデータに大きな違いはないものの Azure Firewall が生成するログデータが一定の形式に整形されていることを指します。これにより、データの分析や可視化が容易になり、セキュリティインシデントを発見したり、トラフィックの動向を把握したりすることが容易にできます。



### 診断設定をする
Docs はこちらです、基本的には下記に従って設定することができますが、従来のファイヤーウォールログ(Azure Diagnostics)に比べて設定が反映されるのに時間がかかりました。(私の環境では半日ぐらいで設定が反映されてログが Log Analytics ワークスペースで確認できました。)

https://learn.microsoft.com/ja-jp/azure/firewall/firewall-preview#structured-firewall-logs-preview

#### Azure PowerShell で有効にする
こちらはプレビュー状態ならではのお作法でGA(General Available＝一般提供)後は不要になるかと思います。

```:Azure PowerShell
Connect-AzAccount 
Select-AzSubscription -Subscription "subscription_id or subscription_name" 
Register-AzProviderFeature -FeatureName AFWEnableStructuredLogs -ProviderNamespace Microsoft.Network
Register-AzResourceProvider -ProviderNamespace Microsoft.Network
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/7a4515a6-9a6e-998c-16ec-930e32fcc903.png)

:::note info
私の環境ではコマンド一発では値が registered にならなかった(registeringで返ってきた)ので、なっていない場合はなるまで再度 **Register~~** のコマンドを実施します。
:::

#### Azure Firewall の診断設定を行う
今回は下記のように設定しました。
ターゲットテーブルが**Azure Diagnostics** ではなく、**リソース固有** になっているところがポイントです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/302157b7-d7e2-8d92-4042-0683f78545c6.png)

:::note info
古い診断設定がある場合は一度削除してからの作り直しをしてみてください。
私の環境ではすでに作っていた古い診断設定(**Azure Diagnostics**)があり、その診断設定を編集してターゲットテーブルを**リソース固有** に変更しましたがなぜかうまくいきませんでした。そのため一度診断設定を削除して再度**リソース固有**で診断設定を新規作成することでうまくいきました。
:::

### 構造化されたファイヤーフォールのログ(リソース固有)を使う
[前回のファイヤーウォールログ(Azure Diagnostics)](https://qiita.com/aktsmm/items/380eab220bd892581a19) ではparse 処理 していましたが、こちらの構造化されたファイヤーウォールログを使うことで不要になったのではないかと思います。
**発信元(SoutceIP)や宛先IP(DestinationIP)、Action が標準でカラムとしてあるので 少なくともこれらの情報を取る(カラムにして見やすくする)ために parse する必要はなくなりました。**


#### AzureFirewallNetworkRuleLog / AZFWNetworkRule テーブル
kusto クエリ
```:Kustoクエリ
AZFWNetworkRule
```
結果サンプル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/84841c5a-5200-53c7-7bc5-7866f569d576.png)



#### AzureFirewallNATRulelog / AZFWNatRule テーブル
kusto クエリ
```:Kustoクエリ
AZFWNatRule
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2d5d0252-e99a-b38d-04ce-7a88b62aebb1.png)



#### その他のテーブル
上記のものも含めて **AZFW～** のテーブルには下記のようなものがあります。
+ AZFWApplicationRule
+ AZFWApplicationRuleAggregation
+ AZFWDnsQuery
+ AZFWFatFlow
+ AZFWIdpsSignature
+ AZFWInternalFqdnResolutionFailure
+ AZFWNatRule
+ AZFWNatRuleAggregation
+ AZFWNetworkRule
+ AZFWNetworkRuleAggregation
+ AZFWThreatIntel

詳細は下記より対象のテーブルの説明をみてみて、ぜひ一度使ってみてください！
https://learn.microsoft.com/ja-jp/azure/azure-monitor/reference/tables/azfwapplicationrule

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/28216517-3fb4-5ecf-b038-42f32def2780.png)