こんばんは。今日は、Azureに関する記事です。Azure App Serviceにアプリをデプロイして、そのアプリのバックエンドでAzure SQL Databaseを使うシナリオは、よくあると思います。
今回は、このApp ServiceとSQL Database間の通信をプライベートエンドポイント経由で行えるように構成してみたいと思います。
Contents
プライベートエンドポイントとは?何が嬉しいの?
プライベートエンドポイントの概要は、以下から確認できます。
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だとこのあたりが参考になるかと思います。
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にプライベートエンドポイント経由で接続する方法の解説でした!本記事がお役に立ちましたら、下のいいねボタンをぽちっていただけますと励みになります・・!
それでは本日はおやすみなさい・・・
おしまい
コメントを残す