Azure SQL Database への通信方法
はじめに
公式ドキュメント
これから Azure を触ろうとしている方や、まだ慣れていない方向けに、Azure SQL Database への通信方法について解説したいと思います。
はじめに、私が参考とした公式ドキュメントを載せておきます。
- Azure SQL Database and Azure Synapse Analytics network access controls
- Virtual Network service endpoints
- What is Azure Private Endpoint?
ただ、Microsoft の公式ドキュメントは分かりにくい部分も多いですよね。改めて私の方で解説をしたいと思います。
通信方法は3パターン
結論から言いますと、Azure SQL Database への通信方法は大きく分けて3パターンしかありません。
- パブリックエンドポイントと接続する方法
- VirtualNetwork のサービスエンドポイントと接続する方法(パブリック接続も可能)
- VirtualNetwork のプライベートエンドポイントと接続する方法(プライベート接続のみ)
この3つの通信方法を VirtualMachine と SQL Database を使って表現するとこんな感じでしょうか。
3つの通信方法を図にしてみた
では、それぞれの接続方法を解説していきたいと思います。
1. パブリックエンドポイントと接続する方法
図で言うと①です。このパブリックエンドポイントと接続する方法が一番シンプルで分かりやすい通信方法です。
設定方法
以下のファイヤーウォールを設定するだけです。
VirtualMachine から接続させたい場合は2つの方法がります。
- "Allow Azure services and resources to access this server" を "Yes" とする方法です。これにより、Azure 内の全てのサービスから接続ができるようになります。
- "Allow Azure services and resources to access this server" を "No" と指定した上で、 VirtualMachine のパブリックIPアドレス範囲を登録します。これにより、指定した VirtuMachine からのみ接続させることができます。
外部のインターネットから接続させたい時は、同じようにパブリックIPアドレスを登録してあげれば良いだけです。
メリットとデメリット
メリットは設定方法が簡単ということです。
デメリットは Azure SQL Database と VirtulMachine の通信がインターネットを経由してしまうことです。セキュリティ面で少し不安ですね。
2. VirtualNetwork のサービスエンドポイントと接続する方法(パブリック接続も可能)
最初の図で言うと②です。AWS に慣れている方はこのサービスエンドポイントによる通信方法について、理解しやすいかもしれません。サービスエンドポイントとは、AWS で言うところの VPC エンドポイントです。
設定方法
具体的な設定手順は以下です。
- サブネットにサービスエンドポイントを作る。
- Azure SQL Database 側でサブネットを登録する。
- ネットワークセキュリティグループを設定する。
VirtualMachine と Azure SQL Database が同じサブネットであれば、3のネットワークセキュリティグループの設定は必要ありません。異なるサブネットから接続させる場合はサブネット間の通信を許可するようにセキュリティグループの設定が必要になります。
サービスエンドポイントを作る方法
対象のサブネットでサービスエンドポイントを選択するだけです。
Azure SQL Database 側でのサブネット登録方法
"Firewalls and virtual networks" の設定画面で VirtualNetwork を追加することができます。
上記の図にも記載しましたが、"Allow Azure services and resources to access this server" は "No" とすることを推奨します。なぜなら、ここが "Yes" だと、サブネットの登録をしなくても Azure 内からであれば、どこからでも接続できてしまうからです。
外部のインターネットから接続させたい時はパブリックIPアドレスを登録してあげれば良いだけです。
メリットとデメリット
メリットはネットワーク制御が自由に行えることです。ファイヤーウォールとセキュリティグループの設定次第ですが、Azure 内のみのアクセスに制限することもできますし、必要であれば外部からの接続も許可することができます。
また、サービスエンドポイントを使った通信は Azure のバックボーン通信となりますので高速で安全です。
デメリットはないように感じます。
3. VirtualNetwork のプライベートエンドポイントと接続する方法(プライベート接続のみ)
プライベートエンドポイント接続は最近できた機能です。最初の図でいうと③の接続になりますが、本当はもっと複雑な構成になります。
プライベートエンドポイント接続の仕組み
こちらが、プライベートエンドポイントとその関連サービスに焦点を当てた図です。
Azure SQL Database の fqdn はプライベートDNSによって、"10.1.2.4" といったサブネット内のIPアドレスに変換されます。そのため、プライベートエンドポイントを作成する際には自動的に Nic が作成されます。(※この Nic は自動で作成されるもので手動で作成したものは使用できません。)
プライベートエンドポイントにおける、DNS解決の内部の仕組みは下記の2つの公式ドキュメントが参考になります。
- Azure SQL Database and Azure Synapse Analytics connectivity architecture
- Using Private Endpoints for Azure Web App
設定方法
仕組みは難しいのですが、コンソールで設定するのは簡単です。
まずは、プライベートリンクを作成するボタンを選択します。
リソースグループとリージョンを指定します。
対象の Azure SQL Server を指定します。Target sub-resource は sqlServer です。
とりあえず、プライベートDNSは作成しましょう。
以上の設定だけでプライベートエンドポイントを作成することができます。プライベートDNSも作成されますので、上記の図のような構成になります。
メリットとデメリット
メリットはセキュアなネットワーク構成を構築できることと、Azure バックボーンを通るため高速通信であることです。デメリットは特にないと思います。
最後に
この3種類の通信方法を理解するまでに、結構な時間を要してしまいました。ただ、一度理解できれば、他の全てのサービスについても同様の考え方で見ることができるので、応用が効くと思います。
個人的な感想としては、迷ったら "サービスエンドポイント" を使うのがベターかなと思いました。
今回は以上です。