AzureFirewallを利用してインターネット向けに通信する際に、複数のパブリックIPアドレスを付与できますが、パブリックIPアドレスプレフィックスを利用して複数の場ブリックIPを付与することもできるので、その方法を試してみました。
設定手順
AzureFirewall は作成済みである前提です。
今回 AzureFirewall の SKU は [Standard] を利用しています。
また可用性ゾーンは「なし」としています。
※下記でも記載していますが、
既存で作成されているAzureFirewallにパブリックIPアドレスプレフィックスを追加する際に、
特定の可用性ゾーンのみを選択している場合にはエラーとなり、追加することができません。
その場合にはAzureFirewall側を再作成する必要がありますので、注意が必要です。
パブリックIPアドレスプレフィックスの作成
・Azureポータルから「パブリックIPアドレスプレフィックス」のページを開き、
「作成」を押してリソースの新規作成画面に移動します。
・サブスクリプションやリソースグループ、リソース名を入力して作成します。

「プレフィックスサイズ」については 2,4,8,16 の4つの選択肢がありますが、
今回は 4 を選択して作成します。

これで「パブリックIPアドレスプレフィックス」というリソースは作成が完了しました。
ですが、この時点ではパブリックIPアドレス自体は有効化されていない(アドレスレンジは保持はされているが他のリソースでは使うことができない)ので、
作成した「パブリックIPアドレスプレフィックス」にパブリックIPアドレスを追加していきます。
・作成したリソースのページで「IPアドレスの追加」をクリックし、

・パブリックIPアドレスの作成のポップアップが出てくるので「名前」を入力してOKをクリックします。

これを「プレフィックスサイズ」で指定した数だけ繰り返し作成します。
※今回だと計4回繰り返しました。
これで、「パブリックIPアドレスプレフィックス」というリソースで保持しているパブリックIPアドレスが他のリソースでも利用できるようになります。
AzureFirewallへの追加
作成した「パブリックIPアドレスプレフィックス」のパブリックIPアドレスをAzureFirewallに追加します。
・「パブリックIP構成」から「パブリックIP構成の追加」をクリックしてパブリックIPを追加します。

更新には約5分くらいかかります。
これで「パブリックIPアドレスプレフィックス」のパブリックIPアドレス追加は以上です。
【要注意】既存のAzureFirewallへの追加は可用性ゾーンが一致していないとエラーとなる
「パブリックIPアドレスプレフィックス」のパブリックIPアドレスを AzureFirewall へ実際に追加してみて気づいたことですが、
既存のAzureFirewallへの追加は特定の可用性ゾーンのみが選択されている場合にはエラーとなります。
最初に作成した AzureFirewall では可用性ゾーン「1」のみを選択して作成しており、
その AzureFirewall に対して「パブリックIPアドレスプレフィックス」のパブリックIPアドレスを選択すると以下のようなメッセージが出てきました。

「パブリックIPアドレスプレフィックス」側ではゾーンの指定はできないので、
こうなってしまうと AzureFirewall を再作成するしか「パブリックIPアドレスプレフィックス」のパブリックIPアドレスを選択する方法はないと思います。
この部分は AzureFirewall を作成するときに注意が必要です。
可用性ゾーンを「なし」もしくは「すべてのゾーン」を選択した場合には追加が可能
AzureFirewall作成時に可用性ゾーンを「なし」として作成した場合、もしくは「すべてのゾーン」として作成した場合には追加が可能でした。
・AzureFirewall作成時に可用性ゾーン
「なし」を選択する

・AzureFirewall作成時に可用性ゾーン
「すべてのゾーン」を選択する

・「パブリックIPアドレスプレフィックス」のパブリックIPアドレスを選択することが可能


送信元IPは本当にランダムで選択されてしまうのか?
Microsoft公式のドキュメントによると、パブリックIPアドレスプレフィックスなどパブリックIPを複数利用した場合には送信元のIPはランダムで選択されると記載されていますが、本当にランダムで選択されるのかを試してみました。

今回利用した AzureFirewall には上記で追加したIPを含めて計5つのパブリックIPアドレスが付いています。

そのうえで、送信元となる仮想マシンを2台ほどたてて、その仮想マシンからAzureFirewallを通過させてインターネット越しにIISのサーバにアクセスしてみました。
2日間かけて、仮想マシンの再起動など実施しながらアクセスをしてみましたが、
結果としてはすべて同じIPに変換されました。
今回の場合は、すべて末尾 217 のAzureFirewallを作成時に指定したパブリックIPアドレスでした。



ただ、気になる点としては、パブリックIPアドレスのリソースのメトリックを見ると、
上記で利用されているパブリックIPではないものが利用されているように見えます。
・末尾 [31] のパブリックIPのメトリック
![末尾 [31] のパブリックIPのメトリック](https://bonjiri-blog.com/wp-content/uploads/tried-using-public-ip-address-prefix-024-800x388.png)
・末尾 [217] のパブリックIPのメトリック
![末尾 [217] のパブリックIPのメトリック](https://bonjiri-blog.com/wp-content/uploads/tried-using-public-ip-address-prefix-025-800x388.png)
この部分の謎は残りますし、
実際に通信を流してもIPアドレスがランダムに選択される挙動を確認することはできませんでした。
しかし、公式のドキュメントに記載がある以上、実際にはランダムに選択される可能性は十分にあるかと思いますので、
実際に AzureFirewall を利用する際にはその点は注意しておく必要がありそうです。
さいごに
パブリックIPアドレスプレフィックスについて、最初はそれ自体がパブリックIPアドレスとは別のリソースなのかと思っていました。
しかし、利用してみるとパブリックIPをまとめて取得するためのリソースであり、
そのリソースの中にパブリックIPアドレスというリソースを紐づけるといったような関係性であることが分かり、改めてリソース間の関係性を理解することができました。
まだまだ知らないことが多いので一つ一つ学びを得ていこうと思います^^