【Microsoft Azure】App ServiceからAzure SQL DBへの通信をプライベートエンドポイント経由で行う

こんばんは。今日は、Azureに関する記事です。Azure App Serviceにアプリをデプロイして、そのアプリのバックエンドでAzure SQL Databaseを使うシナリオは、よくあると思います。

今回は、このApp ServiceとSQL Database間の通信をプライベートエンドポイント経由で行えるように構成してみたいと思います。

プライベートエンドポイントとは?何が嬉しいの?

プライベートエンドポイントの概要は、以下から確認できます。

https://docs.microsoft.com/ja-jp/azure/private-link/private-link-overview

https://docs.microsoft.com/ja-jp/azure/private-link/private-endpoint-overview

嬉しいことはこちら。

https://docs.microsoft.com/ja-jp/azure/private-link/private-link-overview#key-benefits

要はインターネットを経由するパブリックIPを用いた通信ではなく、プライベートIPを用いてAzureバックボーンネットワークに閉じた通信ができてよりセキュアになる、ということですね。

今回実現する構成

今回実現するのは以下のような構成です。

  • SQL DatabaseのプライベートエンドポイントをSubnet Bに設置
  • Web AppsからSubnet Bのプライベートエンドポイントに接続できるようにするためにはWeb Appsからの通信がサブネットを経由するようにする必要あり。このためにサブネットAに対してVNET統合を行う。(確か、プライベートエンドポイントとVNET統合は同じサブネットに共存できなかったはずなので、サブネットを分けている)

SQL Databaseと接続するWebアプリをApp Serviceにデプロイする

必要なリソース作成含めて以下の記事を参照ください。

プライベートエンドポイント構成の前準備:仮想ネットワーク作成

さて、ここからがこの記事の本題です。

プライベートエンドポイント、及びVNET統合を構成するためには、構成先のサブネットが必要です。

今回は、新規のVNET1つと、その中にVNET統合用、プライベートエンドポイント用の合計2つのサブネットを作成しておきます。(2021年10月現在では、リソースと同じリージョンのサブネットにしかそれぞれ構成できないので、同じリージョンに作成します)

SQL Databaseのプライベートエンドポイントを構成

次にSQL Databaseでプライベートエンドポイントを構成していきます。

公式Docだとこのあたりが参考になるかと思います。

https://docs.microsoft.com/ja-jp/azure/private-link/tutorial-private-endpoint-sql-portal#create-an-azure-sql-server-and-private-endpoint

SQL Serverリソースのプライベートエンドポイントブレードから、追加へ進みます。

基本情報はご自由に、ですが、リソースは、以下のようにMicrosoft.Sql/serversを選択します。

次に構成先ネットワークの選択です。先ほど作成しておいたプライベートエンドポイント接続用サブネットを選択します。

プライベートDNS統合は、今回は規定値のまま「はい」とします。

プライベートエンドポイントの作成が完了したら、ファイアウォールの設定でパブリックアクセスを遮断しておきます。

これでSQL Database側の設定は完了です。ちなみに、この状態でアプリにアクセスしてみます。想定通り、プライベートエンドポイントにアクセスできず、データベース接続のエラーが出ていますね。

次にVNET統合を構成してプライベートエンドポイントに接続できるようにしていきます。

App ServiceでリージョンVNET統合を構成する

続けてApp ServiceでVNET統合を構成します。公式ドキュメントはこちら。

https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-integrate-with-vnet

App Serviceのネットワーク>VNET統合メニューからVNET統合用サブネットに対してVNET統合を構成します。

最終疎通確認

さて、それではちゃんとプライベートエンドポイントに接続できているか、確認していきます。

まず、アプリアクセス。今度はつながりました!(SampleUser1, 2というデータベースのデータが取得できています)

また、ちゃんとプライベートエンドポイントのプライベートIPアドレスに解決できているかも確認しておきます。今回のApp ServiceはLinuxなので、KuduのBashから以下コマンドで確認します。

#コマンド
getent hosts xxxx.database.windows.net

#結果
10.1.1.4 xxxx.privatelink.database.windows.net xxxx.database.windows.net

ちゃんとプライベートIPアドレスに解決されていることが分かります。ちなみに、上記までの構成を行う前の状態だと以下のようにパブリックIPに解決されます。

40.xx.xx.xx xxx.database.windows.net....

tcptracerouteでも同様の情報が確認できます。

tcptraceroute xxx.database.windows.net 1433
1  169.xx.xx.xx  0.053 ms  0.037 ms  0.028 ms
2  * * *
3  10.1.1.4 [open]  1.507 ms  1.151 ms  1.941 ms

*プライベートエンドポイント+VNET統合構成前

tcptraceroute xxx.database.windows.net 1433
1  172.xx.xx.xx  0.056 ms  0.035 ms  0.033 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  40.xx.xx.xx [open]  2.864 ms  1.530 ms  1.721 ms

以上、App ServiceからAzure SQL Databaseにプライベートエンドポイント経由で接続する方法の解説でした!本記事がお役に立ちましたら、下のいいねボタンをぽちっていただけますと励みになります・・!

それでは本日はおやすみなさい・・・

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US

Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。