📑

【第13回】Azureで社内システム再現(クラウド編)|App Service と SQL の閉域接続を構築(VNet統合+PE)

に公開

概要

これまでの「オンプレ編」では、Azure の仮想マシン(IaaS)を使って、社員番号から名前を検索できるシンプルな社内システムを構築してきました。Active Directory、SQL Server、ADFS などを組み合わせ、オンプレミスの構成を仮想的に再現しています。

※全体構成の詳細は、【第0回】Azureで社内システム再現(オンプレ編)|構成図と動作の流れ をご参照ください。

クラウド編では、これまでの構成をベースにしつつ、Azure のマネージドサービス(PaaS)を中心とした構成へ段階的に移行していきます。

※クラウド移行全体の設計方針については、【第10.5回】Azureで社内システム再現(クラウド編)|オンプレ構成をどうクラウドに移行するか? にまとめています。


システム構成(今回の対象範囲)

今回のテーマは、Azure Web App から Azure SQL Database への接続を、パブリック経由ではなくプライベート接続で構成することです。

まず、下図は「クラウド編」の全体構成を示したものです。

cloud_webapp_vnet.png

このうち、赤枠で示している Azure Web App → Azure SQL の部分が今回の対象です。
この通信を閉域(プライベート)接続にすることで、インターネットを経由しない安全な社内システムを構築します。


次に、下図がその閉域構成の詳細図です。

スクリーンショット 2025-04-16 16.57.04.png

Azure Web App 側は「VNet 統合」により仮想ネットワークに参加し、
Azure SQL 側は「Private Endpoint(PE)」を構成してプライベートIPを持たせます。
これにより、Azure Web App から Azure SQL Database への通信は、インターネットを経由せず、仮想ネットワーク内のプライベートな経路を通じて行われるようになります。

具体的には、以下の作業を実施します。

  • 仮想ネットワーク(VNet)とサブネットの作成

  • Azure Web App の VNet 統合(Outbound 通信用)

  • SQL 用の Private Endpoint を作成


仮想ネットワークとサブネットの作成

まずは、Azure Web App および Azure SQL Database と同じリージョン(Southeast Asia)にVNetを作成します。
今回は以下のような設定で作成しました。

スクリーンショット 2025-04-02 12.34.06.png


続いて、この VNet に対して2つのサブネットを作成します。
スクリーンショット 2025-04-02 12.36.10.png
それぞれの役割とアドレス範囲は以下のとおりです

サブネット名 用途 アドレス範囲
subnet-webapp Azure Web App の VNet 統合用 10.0.1.0/27
subnet-sql-pe SQL Database の Private Endpoint 用 10.0.2.0/27

Azure Web App を仮想ネットワークに統合する

続いて、Azure Web App 側で VNet 統合(Regional VNet Integration)を行います。
これは Web App から仮想ネットワーク内のリソース(今回は Azure SQL)にプライベート経由でアクセスするために必要な設定です。

Web App の「ネットワーク」メニューから、**「VNet 統合」**を選択し、先ほど作成した仮想ネットワークとサブネット(subnet-webapp)を指定します。

スクリーンショット 2025-04-02 12.37.17.png


Azure SQL に Private Endpoint を構成する

Azure SQL Database へのアクセスを仮想ネットワーク経由のみに制限するため、Private Endpoint(PE)を構成します。


パブリックアクセスが無効であることを確認

まず、SQL Database のファイアウォール設定で、パブリックネットワークアクセスが無効になっていることを確認します。
これにより、インターネット経由での接続が遮断され、Private Endpoint のみを通じてアクセスできる状態になります。

スクリーンショット 2025-04-02 12.39.23.png


Private Endpoint の作成開始

「ネットワーク」メニュー → 「プライベート アクセス」→「+ プライベート エンドポイント」をクリックし、新しいエンドポイントを作成します。

スクリーンショット 2025-04-02 12.39.38.png


リソース名とリージョンの設定

Private Endpoint のリソース名とリージョンを入力します。
ここでは pe-sql-employeedb という名前にしました。

スクリーンショット 2025-04-02 12.40.24.png


サブネットの選択

先ほど作成した SQL 用サブネット(subnet-sql-pe)を指定します。
このサブネットに、Private Endpoint 用のプライベートIPが割り当てられます。

スクリーンショット 2025-04-02 12.40.42.png


Private DNS 統合の設定

Private Endpoint 作成時に、**「プライベート DNS ゾーンとの統合」**を有効にしておくことで、
SQL のFQDN(例:xxxx.database.windows.net)が自動的にプライベートIPに名前解決されるようになります。

スクリーンショット 2025-04-02 12.40.50.png

補足

  • この統合によって、App Service などから SQL にアクセスするときに、特別な DNS 設定をせずとも自動的にプライベートIPで解決されるようになります。
  • 逆に言えば、DNS 統合を行わないと、FQDN がグローバルIPを向いたままになり、通信に失敗します

名前解決の確認

最後に、Azure Web App から Azure SQL Database の FQDN(完全修飾ドメイン名)
Private Endpoint の IP に名前解決されているかを確認します。


① SQL の Private IP を確認

作成した SQL 用の Private Endpoint を確認すると、
割り当てられたプライベートIPが 10.0.2.4 であることがわかります。

スクリーンショット 2025-04-16 17.23.06.png


② Web App の開発ツール(SSH)から nslookup を実行

App Service の「開発ツール」→「SSH」にアクセスし、
nslookup コマンドを使って SQL の FQDN を引いてみます。

このとき、10.0.2.4 で名前解決されていることが確認できました。
これは、Private DNS ゾーンとの統合が正しく機能している証拠です。

スクリーンショット 2025-04-02 12.44.38.png


③ DNS ゾーンにもレコードが自動登録されている

Azure Portal 上の Private DNS ゾーンを確認すると、
SQL の FQDN と Private IP が関連付けられた Aレコードが登録されていることが確認できます。

スクリーンショット 2025-04-16 17.25.28.png


このように、SQL Database のドメイン名がプライベートIPに正しく名前解決されていることを確認できました。
これにより、Azure Web App から Azure SQL Database への 閉域接続(Private Access) が成立していることが確認できました。

Discussion