FIXER cloud.config Tech Blog
Azure App ServiceのVNet統合を使ってStorage Accountにセキュアにアクセスする
2020年07月31日 10時00分更新
こんにちは。cloud.config Divの神田です。
今回はApp ServiceでVNet統合を用いてStorage Accountへセキュアにアクセスさせます。
App ServiceとStorage Accountの通信について
Microsoft社のドキュメントにも記載されていますが、App ServiceとStorage Accountが同一リージョンにある場合、App ServiceはパブリックIPではなく、プラットフォーム側のプライベートIPを用いて通信します。
そのため、Storage Account側でIP制限をかける場合、App ServiceのパブリックIPを許可していても、アクセスが拒否されてしまいます。
この事象はApp ServiceにデプロイされたアプリケーションでのSASや接続文字列を使った接続だけでなく、Azureポータル上で設定できるApp Serviceのバックアップやログの格納でも発生します。
この事象を回避するには、App Service Environmentを用いてApp ServiceをVirtual Networkの中に入れる、またはApp ServiceとStorage Accountを別々のリージョンに立てるといった方法があります。
参考:Azure Web Apps / Azure Functions から同じリージョンの Azure Storage Account へ接続する時の注意点
今回の目標
上記の通り、App ServiceとStorage Accountを同一リージョンに立てつつ、Storage Account側でIP制限をかける場合にはASEを使うしかなかったのですが、最近VNet統合がプレビューから正式にGAされたので、今回はこのVNet統合を用いて実現させます。
参考:Integrate your app with an Azure virtual network
Blobコンテナにアクセスするウェブアプリの作成
下記ドキュメントにてBlobコンテナに画像をアップロードする機能、Blobコンテナの画像を取得しサムネイル表示する機能を持ったウェブアプリをApp Serviceにデプロイする手順が公開されているのでこちらに従いウェブアプリを作成します。
ただし、今回使用するVNet統合はApp Serivce PlanのStandard以上でのみサポートされているので、ドキュメントではFreeで作成していますが、今回はStandardで作成します。
参考:チュートリアル:Azure Storage を使用してクラウドに画像データをアップロードする
Storage AccountにIP制限をかけてみる
Azureポータル上でStorage Accountから[ファイアウォールと仮想ネットワーク]にアクセスし、[許可するアクセス元]を[すべてのネットワーク]から[選択されたネットワーク]に変更し、[アドレス範囲]にAppServiceの[プロパティ]に表示されるグローバルIPを入力し保存します。
その後、ウェブアプリにアクセスすると、App ServiceからStorage Accountへのアクセスが拒否されるので、画像のアップロード、サムネイル表示が失敗します。
VNet統合を構成する
Virtual Networkと Subnet を新たに作成します。
その後、App Serviceの[ネットワーク] > [VNet統合] を作成し、新たに作成したVirtual Network、Subnetを選択します。
Storage AccountでVirtual Networkからのアクセスを許可
再びStorage Accountの[ファイアウォールと仮想ネットワーク]にアクセスし、先ほど設定したAppServiceのグローバルIPを削除し、[仮想ネットワーク]に先ほど作成したVirtual Networkを追加します。
※Subnetのサービスエンドポイントもこのとき自動で設定される模様
ウェブアプリにアクセス
ウェブアプリにアクセスし、Blobコンテナへの画像アップロードと、Blobコンテナの画像のサムネイル表示ができることを確認します。
※VNet統合を構成してから、アクセス可能になるまで1時間ほどかかる場合があります。
最後に
以上でStorage AccountにIP制限をかけつつ、同一リージョンのApp Serviceからのアクセスを許可することが出来ました。
注意点ですが、AppServiceのバックアップはファイアウォールが設定されたStorage Accountに対してはサポートされていないので、VNet統合を構成しても失敗します。
この理由は、Azure内部でAppServiceがホストされている仮想マシンとは異なる仮想マシンがAppServiceのバックアップジョブを実行しているからです。
AppServiceのバックアップを構成する際はファイアウォールのかかっていないStorage Accountに保存するようにしましょう。
神田 仁/FIXER
cloud.config Division所属。Azureを用いたインフラ構築を行っています。構築のノウハウやTerraformを用いた効率化の方法などを紹介していけたらいいな。
[転載元]
Azure App ServiceのVNet統合を使ってStorage Accountにセキュアにアクセスする