こんにちは。cloud.config Divの神田です。
今回はAzure上のVirtual MachineからAzure Private Linkを使って
Azure SQL Databaseのフェールオーバーグループに接続します。
Azure Private Linkについて
Azure Private Linkとは、仮想ネットワーク内に立てることができないAzureのPaaSサービス(SQL Database, Storage Accountなど)へのアクセスを
プライベートエンドポイントを経由させることでトラフィックを外部にさらさずセキュアにアクセスできるようにするサービスです。
似たようなサービスにサービスエンドポイントがありますが、接続先がPaaSサービスのプライベートIPかパブリックIPか、
設定したサブネットにピアリングしている他の仮想ネットワークやオンプレ環境からもPaaSサービスにアクセスできるか否か、といった違いがあります。
参考 : Azure Private Link とは
https://docs.microsoft.com/ja-jp/azure/private-link/private-link-overview
参考 : Azure プライベート エンドポイントとは
https://docs.microsoft.com/ja-jp/azure/private-link/private-endpoint-ov…
今回の目標
今回は下記の画像の構成を作成し、パブリックIPを持つ踏み台のVM経由で
パブリックIPを持たないVMにRDPでアクセスしこちらからSQL ServerのフェールオーバーグループにAzure Private Linkを用いてアクセスします。
※今回作成するリソースはセカンダリのSQL Server、Databaseは西日本リージョン、それ以外は東日本リージョンにデプロイしています。
また、この記事ではVM、SQL Server、SQL Database、フェールオーバーグループの作成は省略します。

Azure Private Linkを使わずにアクセスしてみる
まずはパブリックIPを持たないVMからフェールオーバーグループにアクセスしてみます。
※VMとプライマリのSQL Databaseは共に東日本リージョンにデプロイされています。
※アクセスにはSQL Server Management Studioを使用しています。
アクセスしてみると"40914"のエラーコードが返されました。
このエラーについてはMicrosoftのドキュメントで紹介されており、AzureポータルでSQL Serverの[ファイアウォールと仮想ネットワーク]からアクセス元の仮想ネットワークを許可すれば接続可能になるとのことです。
参考 : エラー 40914
https://docs.microsoft.com/ja-jp/azure/azure-sql/database/vnet-service-endpoint-rule-overview#error-40914

ちなみにフェールオーバーを実行し接続先をセカンダリのSQL Database(西日本)に変えたところ別のエラーが返されました。
どうも異なるリージョンに接続する際にはパブリックIPがないVMにはパブリックIPが割り振られてアクセスするようです。
※ただしファイアウォールで明示的に許可しないと弾かれる

Azure Private Linkを設定する
まずは東日本のSQL ServerにAzure Private Linkを設定します。
[リソースの種類]で[Microsoft.Sql/servers]、[リソース]で接続先のSQL Server、[対象サブリソース]で[sqlServers]を選択します。

Azure Private LinkではプライベートDNSゾーンが必要なので今回はデフォルトのまま画面の指示に従い新規作成します。

つづいてフェールオーバーでプライマリからセカンダリに切り替わっても接続できるように
西日本のSQL ServerにもAzure Private Linkを設定します。
ただし、今回はプライベートDNSゾーンの設定の際に新規作成ではなく、
先に作成した東日本のSQL Serverで利用しているプライベートDNSに追加するように指定します。

ここまでの作業が完了すればVMからプライマリ、セカンダリのSQL Databaseへの接続が可能になります。

最後に
以上でAzure Private Linkを使ってSQLフェールオーバーグループに接続することができました。
SQL DatabaseなどのPaaSサービスへのトラフィックをプライベートのネットワークに閉じ込めることができるので、
よりセキュアにPaaSサービスを利用する場合には便利なサービスです。