Application Gateway 経由の Web Apps 接続時にソース IP にるアクセス制御を行う
はじめに
Application Gateway のバックエンドに Web Apps を配置した場合、Web Apps 側から見るとソース IP は Application Gateway の IP アドレスに見えます。これは、Application Gateway がプロキシとして通信を仲介しているためです。この状況では、Application Gateway に到達できるソースからは Web Apps にも到達できるということになります。
とはいえ、本来のリクエストのオリジンとなるソース IP(=クライアント IP) の情報をもとに Web Apps 側でアクセス制御を行いたい状況もあるでしょう。その場合には、http ヘッダーの X-Forwarded-For
を利用することで Web Apps 側での制御が可能になります。これは、高度なシナリオとして、ドキュメント[1] でも紹介されています。
Application Gateway では、要求をバックエンドに転送する前に、すべての要求に X-Forwarded-For ヘッダーが挿入されます[2]。この http ヘッダーを見ることで、Web Apps はクライアント IP を知ることができ、アクセス制御ができるというわけですね。
試してみる
Web Apps をバックエンドにもつ Application Gateway を構成します。こちらは前回の記事[4] をご参照ください。ただし、Web Apps の Private Endpoint は構成しないでおきます。
Web Apps 側でアクセス制御をしていない状態で、Application Gateway 経由でアクセスできることを確認します。
アクセス制御規則の作成
Web Apps の[ネットワーク]設定から、[公衆ネットワークアクセス]を編集します。
今回のルールの構成としては優先度の高い順に以下のイメージです。
-
X-Forwarded-For
で特定の IP (ここでは著者自宅 IP ) を拒否 - Application Gateway の存在するサブネットからのトラフィックを許可
- 該当しないものはすべて拒否
著者の自宅の IP からのみ、Application Gateway からのトラフィックをブロックしたうえで、Application Gateway からくるリクエストのみ許可するという設定です。Web Apps が外部から直接到達されることも防いでいます。
動作確認
ルールの構成後、キャッシュが消える程度待ってから、再度 Application Gateway のパブリック IP に http アクセスすると、想定通り 403 Error
となりました。
まとめ
- Application Gateway 経由の場合でも Web Apps 側でクライアント IP ベースで制御したい場合は、http ヘッダーを活用することで実現できることを確認しました。
- とはいえ、あくまで公衆ネットワークの設定であり、Private Endpoint とは別の設定となるため注意が必要です。
-
https://learn.microsoft.com/ja-jp/azure/app-service/app-service-ip-restrictions?tabs=azurecli#access-restriction-advanced-scenarios ↩︎
-
https://learn.microsoft.com/ja-jp/azure/application-gateway/rewrite-http-headers-url#remove-port-information-from-the-x-forwarded-for-header ↩︎
-
https://zenn.dev/microsoft/articles/20240113-appgw-webapp-pe ↩︎
-
https://zenn.dev/microsoft/articles/20240113-appgw-webapp-pe ↩︎
Discussion