AzurePaaS研究サイト

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

ストレージアカウントを特定のAppService/Functionsからのみアクセスさせたい

ストレージアカウントへのアクセスを制限する方法

 
まず前提知識として、AppService/Functions とストレージアカウントが同リージョンに構成されている場合、プライベートIPで通信が行われます。
 
しかし、Azure プラットフォーム内部で都合の良いプライベートIPが割り振られて使われている関係もあって、プライベートIPは不定期に勝手に変更されることがあります。これは避けられないことです。
 
なので、プライベートIPアドレスを使ってストレージアカウント側にアクセス制御を設定しても、しばらくすると意味のない設定になり今まで通りどこからでもストレージアカウントにアクセス されてしまいます。
 

docs.microsoft.com

 
 
したがって以下に、
ストレージアカウントを特定の AppService からのみアクセスさせる方法を紹介します。
 
 
 
 

アクセス制限の実現方法 3つ紹介

1.パブリック送信IPでアクセス制限する

ストレージアカウントと AppService を別のリージョンに構成する必要があります。そうすると、プライベートIPではなくパブリックIPを使用した通信が行われます。
 
上記の場合、AppServiceの送信IPが使用されてストレージアカウントにアクセスされるので、ストレージアカウントのアクセス制御にて AppServiceの送信IPのみを許可するにすれば、今回のアクセス制御が実現できます。
 
<ざっくり手順> AppService > プロパティ > 送信IP を確認できる画面

f:id:nanacy7741:20210417024318p:plain

 
 
ストレージアカウント > ネットワーク > ファイアウォール の設定画面

f:id:nanacy7741:20210417034031p:plain

デメリット:AppService/Functions のパブリックな送信IPも変更される可能性はある

 
ユーザが特定の操作を行うと、パブリックな送信IPが変更されることがあります。
 
公式ドキュメントには、以下のように記載されています。
Azure Functions の IP アドレス > 送信 IP アドレスの変更
https://docs.microsoft.com/ja-jp/azure/azure-functions/ip-addresses#outbound-ip-address-changes
===== 抜粋 ここから =====
次の操作を行うと、関数アプリの一連の使用可能な送信 IP アドレスが変更される場合があります。
・着信 IP アドレスが変更される可能性のあるアクションを実行する。
・ App Service プランの価格レベルを変更する。 すべての価格レベルについて、アプリで使用可能なすべての送信 IP アドレスのリストが possibleOutboundIPAddresses プロパティに含まれています。 「IP アドレスを見つける」を参照してください。
===== 抜粋 ここまで =====
 

Functions の従量課金プランで IP アドレス制限ができるのか

 
結論としては、できるがオススメはしない、になります。
 
従量課金プランは、他のテナントと共有したインスタンスが使用されるため、アプリケーションの動作時にどのインスタンスが使用されるかは不定なのです。
 
そのため、ユーザが何もアクションを行わなくとも Functions の 送信 IP アドレスが変更される場合があります。回避方法としては、Functions の従量課金プランでは、リージョン全体の IP アドレス(データセンターの IP アドレス)が送信 IP アドレスの範囲となるため、対象リージョンで AppService 用に確保されている全ての IP アドレスだけをアクセス許可されるようにストレージアカウント側に設定する必要があるので大変です。(知られてない情報です)
 
以下ページのダウンロードから、テキストファイルの IP Range データを取得できます。
Download Azure IP Ranges and Service Tags – Public Cloud from Official Microsoft Download Center  
 
 
以上の理由で、非推奨となります。じゃあどうしたら良いか?
Functions を作る際、従量課金プランではなく App Service プランを選択しましょう。
そうすれば、先述したパブリック IP でのアクセス制限ができます。
 
 

2.ストレージアカウントにサービスエンドポイント経由でアクセスする(推奨)

 
ざっくり説明すると、仮想ネットワークを構築することになります。
 
すると、仮想ネットワークに接続しているリソース同士しか通信できない状態になります。
 
仮想ネットワーク・サービス エンドポイントの公式ドキュメント

docs.microsoft.com

 
仮想ネットワーク・サービスエンドポイント・Vnet 統合については説明すると長くなるので、私が作成した動画コンテンツにて、概要・基礎知識を説明 ~ 実践編までを載せてますのでチェックしてみてください。


3.ストレージアカウントにプライベートエンドポイント経由でアクセスする

 
チュートリアル:Azure プライベート エンドポイントを使用してストレージ アカウントに接続する > プライベート エンドポイントを備えたストレージ アカウントの作成

docs.microsoft.com

   
以上です。