目次
はじめに
Azure FirewallのPremium機能の1つである「TLSインスペクション」を使うために
必要なリソースと各設定の備忘録です。
前回KeyVaultを作成したので、その続きとなります。
前回の記事はこちら:https://dev.altenir.co.jp/archives/322
本記事でやること
①Azure Firewall用サブネットの作成
②Azure Firewallの作成
③Azure Firewallポリシーの作成
④TLSインスペクション設定
⑤TLSインスペクション結果確認
⑥診断設定追加
Azure Firewallとは
Azureが提供しているファイヤーウォールです。
Azureクラウド環境をセキュリティで保護するための機能となります。
3つのSKUが用意されており、ニーズに合った機能レベルを選択できます。
Azure Firewall とは | Microsoft Learn
環境構築
本構築において、Microsoftの以下ページを参考にしています。
チュートリアル: Azure portal を使用して Azure Firewall とポリシーをデプロイして構成する | Microsoft Learn
Azure portal での Azure Firewall Premium | Microsoft Learn
①Azure Firewall用サブネットの作成
Azure Firewallを作成するにあたり、専用サブネットが必要となります。
Azure Firewall用のサブネットは2種類ありますが、各用途についてはざっくり以下の認識です。
・AzureFirewallSubnet
→AzureFirewall自体がデプロイされるサブネット
・AzureFirewallManagementSubnet
→管理NICを使う場合に使用されるサブネット
(以前は「強制トンネリング」と呼ばれていた機能のことみたいです。)
参考:Azure Firewall 管理 NIC | Microsoft Learn
今回はデプロイに必要な「AzureFirewallSubnet」を用意します。
Azureのポータル画面から、「仮想ネットワーク」を開きます。
サブネットの追加画面で「サブネットの目的」【AzureFirewall】、「開始アドレス」【任意のアドレス範囲(今回は10.0.1.0)】を入力し、[追加]をクリックします。
※名前とサブネットサイズは「AzureFirewallSubnet」の固定値となります。

仮想ネットワークに「AzureFirewallSubnet」が追加されていることを確認します。
②Azure Firewallの作成
Azureのポータル画面から「Azure Firewall」を開き、Azure Firewall一覧画面から[作成]をクリックします。
[基本]タブでは「サブスクリプション」「リソースグループ」「ファイヤーウォールSKU」などを指定します。
「リージョン」【東日本】、「可用性ゾーン」【なし】、TLSインスペクション実装のため「ファイヤーウォールSKU」は【Premium】を指定します。
また、「ファイヤーウォールポリシー」は後ほど設定するため、作成時は既定値のままで問題ありません。
「仮想ネットワーク」においては、今回既存のものを使用するため、使用する仮想ネットワークを選択しています。
「パブリックIPアドレス」は新規作成されるものを使用します。


[確認および作成]タブで「検証に成功しました」と表示されることを確認し、[作成]をクリックします。
デプロイが完了し、Azure Firewallが作成されました。 
②ルートテーブルの作成
VM用サブネットに紐づける、ルートテーブルを作成します。
Azureのポータル画面から「ルートテーブル」を開き、ルートテーブル一覧画面から[作成]をクリックします。
「リージョン」【東日本】「名前」【Firewall-route】を入力し、[確認と作成]をクリックします。 
デプロイが完了したら[リソースに移動]をクリックし、作成したルートテーブルのページへ移動します。 
左メニューから[サブネット]をクリックし、ルートテーブルをVM用サブネットに紐づけます。

続いて、左メニューから[ルート]をクリックし、Azure Firewallを通過するルートを追加します。
「ルート名」【fw-dg】、「宛先の種類」【IPアドレス】、
宛先IPアドレス/CIDR範囲【0.0.0.0/0】、ネクストホップの種類【仮想アプライアンス】、
「ネクストホップアドレス」【作成したAzure FirewallのプライベートIPアドレス(今回の場合は10.0.1.4)】を入力し、[追加]をクリックします。

③Azure Firewallポリシー規則の作成
Azure Firewall画面から[Policy]に表示されているポリシー名をクリックします。
・アプリケーションルール
[www.google.com]へのアウトバウンドアクセスを許可するアプリケーションルールを作成します。
左メニューから[アプリケーション規則]開き、[規則コレクションの追加]をクリックします。
以下設定を項目に合わせて入力し、[追加]をクリックします。
・規則名コレクション名:【App-Coll01】優先度:【200】
ルール名:【Allow-Google】
[AzureFirewallSubnet(10.0.1.0/26) のアドレス]から、[www.google.co.jp] 宛の http,https パケットを許可
・ネットワークルール
ポート 53 (DNS) で対象のIP アドレスへのアウトバウンド アクセスを許可するルールを作成します。
左メニューから[ネットワーク規則]開き、[規則コレクションの追加]をクリックします。
以下設定を項目に合わせて入力し、[追加]をクリックします。
・規則名コレクション名:【Net-Coll01】優先度:【200】
ルール名:【Allow-DNS】
[AzureFirewallSubnet(10.0.1.0/26) のアドレス]から、[DNSサーバー(10.0.0.4)] 宛のUDP(ポート53) パケットを許可
・DNATルール
Azure Firewallを介して、 仮想マシンにリモート デスクトップ接続できるルールを作成します。
左メニューから[DNAT規則]開き、[規則コレクションの追加]をクリックします。
以下設定を項目に合わせて入力し、[追加]をクリックします。
・規則コレクション名:【RDP】優先度:【200】
ルール名:【rdp-nat】
任意のアドレスから、Azure Firewall(172.207.253.167)を介して[仮想マシン(10.0.0.4)]へのRDP(ポート3389)パケットを許可 

④TLSインスペクション設定
ファイヤーフォールポリシー画面から、左メニューより[TLS検査]を開き、[有効]をクリックします。
TLSインスペクション有効化にあたり、KeyVaultに格納している中間証明書を設定します。
続いて、③で追加した「アプリケーションルール」でTLS検査を【有効化】します。
左メニューから[アプリケーション規則]を開き、対象のアプリケーションルールで[編集]をクリックします。
アプリケーションルールの編集画面で「TLS検査」にチェックを入れ[保存]します。

⑤TLSインスペクション結果確認
Azure Firewall規則のソース範囲内にあるドメイン参加済み仮想マシンにログインし、
ブラウザから[www.google.co.jp]を開きます。
TLSインスペクションが正常に動作している場合、「接続がセキュリティで保護されています」と表示されます。
証明書を表示すると証明書のパスで「Azure Firewall Manager CA」を介していることが確認できます。
⑥診断設定追加
Log Analyticsワークスペースでログを確認するために、
Azure Firewallに対して診断設定を追加します。
Azure Firewallの画面で、左メニューから[診断設定]を開き[診断設定を追加する]をクリックします。
今回、診断設定は【すべてのログ】を【Log Analyticsワークスペース】へ送信するように設定しています。
※「TLSインスペクション」のログだけを確認したい場合は【AzureFirewallApplicationRule】だけでも問題ないかと思いますが念のため。
ここで1つ注意すべき点が「ターゲットテーブル」です。
【Azure Diagnostics】方式はカテゴリごとでログが検索できず不便なので、【リソース固有】方式を選択することをオススメします。
参考:Azure Firewall の監視 | Microsoft Learn
診断設定追加後、Log AnalyticsワークスペースからKQL クエリを実行してすることで
TLSインスペクション対象となった通信を確認できます。
AzureDiagnostics
| where ResourceType == "AZUREFIREWALLS"
| where Category == "AzureFirewallApplicationRule"
| where msg_s contains "Url:"
| sort by TimeGenerated desc
参考:Azure Firewall Premium 用にエンタープライズ CA 証明書をデプロイおよび構成する | Microsoft Learn
まとめ
Azure Firewallで「TLSインスペクション」を実装しました。
設定自体はそこまで複雑ではなかったのですが、仕組みを理解するのに少し手間取った気がします。
Azure Firewallは手軽にセキュリティ面を強化できる反面、料金が嵩むリソースなので
そのあたりも気にしつつ、上手く使っていけるとベストかなと思います。


