Application Gateway のバックエンドの Web Apps を Private Endpoint で保護する
はじめに
Azure Application Gateway (AppGw) の L7 のロードバランサーであり、バックエンドに Azure App Service の Web Apps を配置することが可能です。Web Apps は PaaS サービスなので、ネットワークを気にせず利用する場合、AppGw -> Web Apps の通信はインターネット側を通る構成となります。
閉域化の要件がある場合は、こちらのドキュメント[1] に記載のように、AppGw -> Web Apps の通信も Private Endpoint 経由とするのが良いでしょう。本記事ではその構成を試してみます。
試してみる
Web Apps のデプロイ
Web Apps をデプロイします。デプロイ後、展開されるURLにアクセスして、起動していることを確認します。この時点ではパブリックアクセス可能な状態です。
Application Gateway のバックエンドプールに Web Apps を配置して構成
パブリックな Application Gatway をデプロイします。作成時もしくは作成後にバックエンドプールの設定を開き、App Service としてターゲットを追加します。
以下のようなカスタムプローブを用意します。
バックエンド設定で以下のように構成します。
検証用なので、Web Apps の HTTP 強制をオフにします。
Application Gateway のパブリック IP 経由で Web Apps にアクセスできることを確認します。
Private Endpoint の設定
Web Apps に対して Private Endpoint の設定を入れていきます。これにより、Private Endpoint に到達性のある範囲(ここでは VNET 内)からしか呼び出せなくなります。設定自体は Web Apps の[ネットワーク]から行っていきます。
パブリックアクセスも拒否します。
ネットワークの設定としては公衆ネットワークアクセスが無効、Private Endpoint が 1 つ構成された状態になります。
この状態で、Application Gateway のパブリック IP を叩くと、まだ Private Endpoint のための DNS 設定が反映されていないためパブリック回しで Web Apps にアクセスしようとして 403 Error
となります。Application Gateway が DNS参照 の結果をキャッシュしているため、再起動によるリフレッシュが必要です。
以下のコマンドで起動・停止が実行可能です。
az network application-gateway stop --resource-group myRG --name myAppGw
az network application-gateway start --resource-group myRG --name myAppGw
その後再度 Application Gateway 経由でアクセスすると、問題なく初期画面が表示されました。
まとめ
- Application Gateway のバックエンドに Web Apps を置く構成について、Private Endpoint 経由にする構成を試しました。
- 多少のハマりポイントは DNS のキャッシュ更新くらいですが、Application Gateway の構成自体ややこしいので、どなたかの役に立てば幸いです。
Discussion