はじめてのAzure Firewall


# はじめに

Azure Firewallを使用してみて
躓いたポイント、気づきづらかったこと等を踏まえて情報をまとめました。
具体的な手順は一切含まず、概念的な説明を中心としています。

これからAzure Firewallを試す方のお役に立てたら嬉しいです。

# Azure Firewallとは

概要はこちらでまとめました

https://qiita.com/yuyanz/items/6ba384b780d8994b5462

# 使い方

Azure Firewallの適用範囲やUDRについて

### Azure Firewallの保護範囲

Azure Firewallはデプロイされたらどこを守ってくれるのでしょうか？

![Firewall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/2b525ca6-b257-458e-857a-9f3a3f17f410.png)


答えは「Subnet単位」になります。
『守る』という表現が適切かどうかは微妙ですが、AzureFirewallSubnetに来た通信を検査するようなイメージになります。

:::note warn
デプロイしただけでは何も守られていません。
:::

### ルーティングの設定（UDR）

ではどうしたらよいのか
ルートテーブルの設定例として『0.0.0.0/0⇒Azure Firewall』のようにルートを作成します。この設定により、すべての通信がAzure Firewallを経由するようになります。

![firewall-spoke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/56f623b1-aaf1-48d5-8bee-5caf9b67073d.png)

例えば「Spoke-1-Subnet」のVMに直接通信しようとしても、UDRに従ってVMに通信が到達する前にAzure Firewallへ通信が転送されます。

### AzureFirewallPolicyの設定

Azure Firewallはデプロイすると「Azure Firewall」と「Azure Firewall ポリシー」の２つのリソースが作成されます。※厳密にはpipとかもあるのですが、省略。

![AzureFirewallのportal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/a43e1636-df6a-4f88-ade9-0b6ac88c7e5d.png)

Azure Firewallはデフォルトで全ての通信を拒否していますので、
「Azure Firewall ポリシー」にて許可する通信を記載します。

ルール設定には下記があります。
![firewallpolicy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/aa557645-bddc-4c26-9b78-1515854475d3.png)

基本的には下記の２つどちらかに許可する通信を記載していきます。

- ネットワーク規則
- アプリケーション規則

# 費用関係

こちらは費用に関する部分を記載します。
SKUがStandard（標準）の場合、月額約13万円です。
さらにデプロイしてからはVMのように「停止」ができません。

https://azure.microsoft.com/ja-jp/pricing/details/azure-firewall/


### 検証時のコスト負担を軽減する方法(その１)

Firewall本体を削除してFirewallPolicyだけ保持しておくことが可能です。
つまり、検証時だけAzure Firewallを立てることができます。
検証目的であれば、使用しない時間は削除して節約しましょう。
FirewallPolicyは新規作成時に選択することが可能です。

:::note warn
Azure Firewallはデプロイ完了までに体感10～20分ほど時間がかかります。
※厳密に計測したわけではありません。
:::

### 検証時のコスト負担を軽減する方法（その２）

とあるかたに教えていただきました。
サービスを落とさずとも、PowerShellから停止可能です。
パラメータをご自身のリソース名に置き換えて使用してみてください！

◆ログイン

~~~ powershell
Connect-AzAccount
~~~

◆停止
~~~ powershell
# Stop an existing firewall

$azfw = Get-AzFirewall -Name "FW Name" -ResourceGroupName "RG Name"
$azfw.Deallocate()
Set-AzFirewall -AzureFirewall $azfw
~~~

◆起動(管理NIC有効でない場合）
~~~ powershell
# Start the firewall

$azfw = Get-AzFirewall -Name "FW Name" -ResourceGroupName "RG Name"
$vnet = Get-AzVirtualNetwork -ResourceGroupName "RG Name" -Name "VNet Name"
$publicip1 = Get-AzPublicIpAddress -Name "Public IP1 Name" -ResourceGroupName "RG Name"
$azfw.Allocate($vnet,@($publicip1))

Set-AzFirewall -AzureFirewall $azfw
~~~

◆確認方法
- Azure Firewallのリソース画面：IPが消えていたら停止
- Azure Firewallのリソース画面：IPが見えていたら起動
- プロビジョニング状態：Succeededになっていることを確認※
※更新中はUpdatingと表示される

公式ドキュメントは[こちら](https://learn.microsoft.com/ja-jp/azure/firewall/firewall-faq)
⇒「Azure Firewallの停止と起動の方法を教えてください」という欄に記載があります

:::note warn
こちらも起動に体感10～20分ほど時間がかかります。
※厳密に計測したわけではありません。
:::

### 可用性の選択による費用変動

結論としては、SKUの選択以外での費用変動はありません。

Azure Firewallの可用性ゾーンを選択する画面で「課金額変わるのか？」と思ってたどり着いた記事をご紹介

https://zenn.dev/zukako/articles/45eea6c726c1aa

記事時点ではAZ間の課金開始前だったようですので、AZ間課金がどうなるかを見てみましたが無償のようです。↓

https://azure.microsoft.com/ja-jp/updates?id=update-on-interavailability-zone-data-transfer-pricing

:::note
- Azure Firewallは可用性ゾーンの選択で費用が変動しない
- 稼働中のマシンの数は変わっても料金は固定
:::

# その他分かりづらかった点

### DNS設定

DNSの設定をしたかった時のことです。

https://learn.microsoft.com/ja-jp/azure/firewall/dns-settings?tabs=browser

>Azure Firewall の [設定] で、 [DNS 設定] を選択します。

こう記載されていたのでAzure Firewall側で設定するものだと思い込んでまあまあ探しました。

詳細を確認すると、以下の注意書きが記載されていました。

:::note warn
注意
Azure Firewall Manager を使用して管理される Azure Firewall インスタンスの場合、DNS 設定は関連する Azure Firewall ポリシー内に構成されます。
:::

DNS設定画面がない場合はAzure Firewallを作成する際 「Firewall Manager NIC 」を有効にしていた場合上記に該当します。
FirewallPolicy側の設定画面を探すとDNS設定が可能です。

:::note 
DNS設定が見当たらない場合はFirewallPolicyにあります。
:::

# 少し踏み込んだ話

Azure Firewallを使用して検証していることがあり、
UDRの設定、pip通信の制御についてもう少し詳しく整理した記事後日投稿予定です。

# 参考文献

↓公式デプロイ方法です。

https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-deploy-portal-policy

↓デプロイ手順について参考にしたブログです。

https://qiita.com/carol0226/items/c40de99f11fb1593f26b

↓ARMテンプレートを使った節約方法が紹介されているブログです。

https://qiita.com/carol0226/items/84b6f30d9376446a608a