AppService 送信されるトラフィックは、AppService が持っている複数の送信 IP アドレスが使用されます。例えば、対向先のシステムで IP アドレス制限をしたい場合、これらの送信 IP アドレスを全て許可すれば良いのですが、他人の AppService からも許可してしまうことになります。そこで、静的なパブリック IP アドレスを付与した NAT ゲートウェイを追加して、送信 IP アドレスを一つに固定してみました。
検証用 VNET 統合 AppService を用意
bash
prefix=mnrappnat
region=japaneast
az group create \
--name ${prefix}-rg \
--location $region
az network vnet create \
--name ${prefix}-vnet \
--resource-group ${prefix}-rg \
--address-prefixes 10.0.0.0/24
az network nsg create \
--resource-group ${prefix}-rg \
--name ${prefix}-nsg
az network vnet subnet create \
--resource-group ${prefix}-rg \
--vnet-name ${prefix}-vnet \
--name app-subnet \
--address-prefix 10.0.0.0/26 \
--network-security-group ${prefix}-nsg
az appservice plan create \
--name ${prefix}-plan \
--resource-group ${prefix}-rg \
--is-linux \
--sku B1
az webapp create \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--plan ${prefix}-plan \
--runtime "PHP|8.2" \
--https-only true
az webapp config set \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--always-on true \
--ftps-state Disabled
az webapp vnet-integration add \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--vnet ${prefix}-vnet \
--subnet app-subnet
AppService の SSH から送信 IP アドレスを確認
下記、赤枠の送信 IP アドレスが使用されています。
NAT ゲートウェイを追加
bash
az network public-ip create \
--resource-group ${prefix}-rg \
--name ${prefix}-pip \
--sku Standard
az network nat gateway create \
--resource-group ${prefix}-rg \
--name ${prefix}-ngw \
--public-ip-addresses ${prefix}-pip
az network vnet subnet update \
--name app-subnet \
--resource-group ${prefix}-rg \
--vnet-name ${prefix}-vnet \
--nat-gateway ${prefix}-ngw
AppService のトラフィック全てを VNET に向ける
bash
az webapp config set \
--resource-group ${prefix}-rg \
--name ${prefix}-app \
--vnet-route-all-enabled
下記の「送信インターネットトラフィック」にチェックを入れるのと同じです。
再度、AppService の SSH から送信 IP アドレスを確認
下記の静的 IP アドレスが使われるようになりました。
参考