AzurePaaS研究サイト

~理解しずらい情報をシンプルにお伝えします~

AppService/Functionsの受信IP(着信IP)と送信IPの違い・固定IPは設定できるのか

最終更新日.2021/ 9/ 6

 
 
AppService/Functions 上の通信を理解する上で、受信IP(着信IP)と送信IP の違いを知る必要があります。
 

受信IP(着信IP)と送信IP の違いを理解する

WebWorker(インスタンス)で実行されているアプリケーションを軸に、クライアント側からリクエストを受信するので「受信」、アプリケーション処理内から外部(データベース、ストレージアカウント、その他外部の REST API 呼び出しなど)にアクセスする際は「送信」というワードを使ってます。そのイメージができれば、以下の内容が覚えやすいと思います。

受信IP(着信IP)

手書きですが、ざっくりイメージ図を書きました。

f:id:nanacy7741:20210722100859p:plain

 

受信IP(着信IP)は、クライアントからリクエストを受信する際に使用されるIPのことを指します。
 
 
< 受信IP(着信IP)>(この辺りに表示されてます)

f:id:nanacy7741:20210720011424p:plain

f:id:nanacy7741:20210720011236p:plain

送信IP 

こちらも、ざっくりイメージ図を書きました。

f:id:nanacy7741:20210722101012p:plain

AppServiceからAppService外(DB, Storage, 外部サービス)にアクセスする際に使用されるIPのことを指します。
 

< 送信IP >(この辺りに表示されてます)

f:id:nanacy7741:20210720010820p:plain

 

AppService/FunctionsのIPアドレスの仕組みを理解

 
すべての AppService/Functions には一意のIPアドレスが付与されてると思っていたら、それは間違いです。
 
まず覚えておくべきこととしては、PaaS の性質上、複数ユーザのアプリケーションがひとつのIPアドレスを共有しています。
そのため、特定のアプリケーションにアクセスするためには、ドメインを用いたURLでアクセスする必要があります。割り当てられているIPアドレスで、アプリケーションにアクセスしてみると 404エラー になります。
 
また、ブラウザからアプリケーションへのアクセス時に、実際どのIPアドレスを使って通信しているかは状況によって異なり、何かのきっかけによってIPアドレスが変更されることがあるんです。
詳細は、後述します。  
 

 

おまけメモ

 

AppServiceとFunctionsの送信IPは固定できるのか

SQL Database や Storage Account を、特定の AppService/Functions からのみアクセスされるように制限したい、というセキュリティ対策をよく見かけます。
 
AppServiceプランの場合送信IPは原則固定ですが、送信IPの完全固定化はできません。ASE(AppServiceEnvironment)を使えば出来ますがただ固定IPのために使うとしたら割高過ぎます。そもそも固定IPでなくても、アクセス制御方法はあります。
代表的な例は、「仮想ネットワーク・Vnet統合を構築する」ですね。これをやると、SNAT ポート枯渇も発生しなくなるなど、いくつかメリットがあります。
 
とはいえ・・・送信IPでアクセス制限したい人は、AppServiceやFunctionsの送信IPは複数ユーザのアプリケーションが共有して使用してるということことを知らない気もします。やりたければやってもいいけど、送信IPは共有されてるので、IPによるアクセス制限はセキュリティ的に問題ありだと思います。
 
 
また、「何かのきっかけによって、AppService/Functions のIPアドレスが変更されることがある」については、以下の公開情報に記載されてます。
 
受信 IP はいつ変更されるか

docs.microsoft.com

 
送信 IP はいつ変更されるか

docs.microsoft.com

 

特定の場所からのアクセスを許可/拒否したい

ここでの本題は、上の所で既に書いたので、補足だけ以下に書きます。 IPアドレスなどによるアクセス制限はできなくはないですが、Functionsの従量課金プランのようにIPが変動するのが当たり前のものもあって、IPが変動な場合はIPアドレスによるアクセス制限は実質できません。
 

オンプレミスからアクセスしたときに、インターネットを経由したくない

ExpressRoute を使う。
 

WebApps にローカル IP アドレスを割り当てたい

内部 ASE を使う。
 
 
以上です。
 

ご意見・ご要望はこちらへ