Azure Private Linkを使ってSQLフェールオーバーグループに接続する
2020-08-14
azblob://2022/11/11/eyecatch/2020-08-14-private-link-sql-failover-group-000.jpg

こんにちは。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ゾーンが必要なので今回はデフォルトのまま画面の指示に従い新規作成します。

プライベートDNSゾーンの作成(プライマリ)

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

プライベートDNSゾーンの設定(セカンダリ)

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

接続に成功した

最後に

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