ごった煮

色々な事を書いてます

App Service と VNET のお話

この投稿は、Azure Advent Calendar 2020 の 16日目の記事になります。

今回のお話は、タイトルの通り App Service と VNET 関連のお話です。

WAF でアプリケーションを保護したい!

App Service は、言わずもがな Web アプリケーションをデプロイして、動かすための箱です。 基本的にインターネットを介してアプリケーションにアクセスすると思いますが、インターネットには、悪い人たちがたくさんいるわけです。

そのような悪い人達からシステムを守るためにアクセス制限したいというのが世の常です。 よくあるパターンだと、

  • アクセス元 IP の制限
  • イントラ or 特定のネットワークからのみ繋がるようにする

みたいなことが挙げられます。 ですがこの場合、不特定多数にアクセスされる前提のシステムだと構築が難しくなります。

そこで、WAF をアプリケーションの前段に置いて WAF で、ある程度悪意のあるリクエストを防ぐというアプローチが考えられます。 App Service の前段には、Application Gateway を WAF として配置することが出来ます。

下記のような、Application Gateway を経由して App Service へアクセスする構成です。

f:id:papemk2:20201216155308p:plain
WAF01

ですがこの場合、WAF 以外からのアクセスを制限しておかないと、WAF を経由せずに App Service と通信することが可能です。

現在は、VNET Service Endpoint を使用して、特定の VNET のサブネットからの通信のみを許可する設定が可能です。

f:id:papemk2:20201216172622p:plain
WAF02

以前は、このような構成を取りたい場合、非常に高い App Service Environment を使用してインフラを構成する必要がありましたが、多くの場面でこの構成は、オーバースペックでした。 それが、現在では、VNET と通常の App Service も連携できるようになっているので、

SQL Database を安全に管理したい!

SQL Database は、言わずもがなマネージドな SQL Server です。

DB は、システムの要であり、一番に保護しないといけない対象です。 ですが SQL Database もまた、インターネット経由でアクセスするサービスなわけです。 最初に書いた通り、インターネットには、悪い人がいっぱいいます。 あなたの DB も日夜狙われているわけです。

SQL Database には、元々

  • IP 制限
  • Azure 内からの通信だけ許可

といったアクセス制限によりセキュリティを向上させる方法がありました。

ローカルからの作業時は、許可されている IP からのみ、Azure からは、Azure 内のリソースを許可してアクセスという方法が、長い間 App Service + SQL Database でアプリケーションを運用する際のよくある構成でした。

では、例えば Azure 内の仮想マシンから悪意ある第三者がアクセスしようとしたらどうなるでしょうか。

Azure 内からの通信だけ許可を有効にしていると、何事もなく繋がります。 これだと少し不安が残ります。

それならば Azure 内でも特定のリソースからしかアクセスできないようにしたいというのが人の常です。

そこで使用できるのが、Private Endpoint を用いたアクセスです。

Private Link を使用すると、Azure 内の特定の VNET に属したサブネットからのみアクセスといった制限を設けることが出来ます。

App Service の Regional VNET Integration を有効にすると、アプリは、リージョンにある VNET 内のリソースに対してアクセスすることが出来るようになります。

Private Link を使用して SQL Database に Private Endpoint を設定すると、VNET を経由して接続するための NICSQL Database に設定されます。 その Private IP に対して、Private DNS Zone で名前解決をすると、VNET Integration を有効にした App Service のアプリから、VNET を経由して SQL Database へ接続できるようになります。

f:id:papemk2:20201216185315p:plain

この構成に、先ほどの Application Gateway の構成を追加して下図のような構成にすると、アプリを WAF で保護しつつ、SQL Database を VNET からのアクセスのみに制限するといった構成が取れます。

f:id:papemk2:20201216185747p:plain
Private02

ローカルから SQL Database に繋ぎたい場合などは、VNET に VPN Gateway や、Express Route を使用して、VNET へのアクセスを確保することで接続することが出来ます。

まとめ

Private Endpoint を使用すると、インターネットを辿ることなく各リソースにアクセスが出来るようになります。 対応サービスも順次増えていっているので、よく使うものは、この方法での接続に切り替えていく方が良いかなと思います。

今までは、App Service でインターネットからのアクセスを遮断するといった構成は、難しかったですが、VNET Integration が出てきた辺りから流れが変わったように思われます。 セキュリティの意味でも、今後は、App Service でも VNET を活用して構成していくと良いかなと思います。