概要
これまでの「オンプレ編」では、Azure の仮想マシン(IaaS)を使って、社員番号から名前を検索できるシンプルな社内システムを構築してきました。Active Directory、SQL Server、ADFS などを組み合わせ、オンプレミスの構成を仮想的に再現しています。
※全体構成の詳細は、【第0回】Azureで社内システム再現(オンプレ編)|構成図と動作の流れ をご参照ください。
クラウド編では、これまでの構成をベースにしつつ、Azure のマネージドサービス(PaaS)を中心とした構成へ段階的に移行していきます。
※クラウド移行全体の設計方針については、【第10.5回】Azureで社内システム再現(クラウド編)|オンプレ構成をどうクラウドに移行するか? にまとめています。
システム構成(今回の対象範囲)
今回のテーマは、Azure Web App から Azure SQL Database への接続を、パブリック経由ではなくプライベート接続で構成することです。
まず、下図は「クラウド編」の全体構成を示したものです。
このうち、赤枠で示している Azure Web App → Azure SQL の部分が今回の対象です。
この通信を閉域(プライベート)接続にすることで、インターネットを経由しない安全な社内システムを構築します。
次に、下図がその閉域構成の詳細図です。
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を作成します。
今回は以下のような設定で作成しました。
続いて、この VNet に対して2つのサブネットを作成します。
それぞれの役割とアドレス範囲は以下のとおりです
サブネット名 | 用途 | アドレス範囲 |
---|---|---|
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
)を指定します。
Azure SQL に Private Endpoint を構成する
Azure SQL Database へのアクセスを仮想ネットワーク経由のみに制限するため、Private Endpoint(PE)を構成します。
パブリックアクセスが無効であることを確認
まず、SQL Database のファイアウォール設定で、パブリックネットワークアクセスが無効になっていることを確認します。
これにより、インターネット経由での接続が遮断され、Private Endpoint のみを通じてアクセスできる状態になります。
Private Endpoint の作成開始
「ネットワーク」メニュー → 「プライベート アクセス」→「+ プライベート エンドポイント」をクリックし、新しいエンドポイントを作成します。
リソース名とリージョンの設定
Private Endpoint のリソース名とリージョンを入力します。
ここでは pe-sql-employeedb
という名前にしました。
サブネットの選択
先ほど作成した SQL 用サブネット(subnet-sql-pe
)を指定します。
このサブネットに、Private Endpoint 用のプライベートIPが割り当てられます。
Private DNS 統合の設定
Private Endpoint 作成時に、**「プライベート DNS ゾーンとの統合」**を有効にしておくことで、
SQL のFQDN(例:xxxx.database.windows.net
)が自動的にプライベートIPに名前解決されるようになります。
補足
- この統合によって、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
であることがわかります。
② Web App の開発ツール(SSH)から nslookup
を実行
App Service の「開発ツール」→「SSH」にアクセスし、
nslookup
コマンドを使って SQL の FQDN を引いてみます。
このとき、10.0.2.4
で名前解決されていることが確認できました。
これは、Private DNS ゾーンとの統合が正しく機能している証拠です。
③ DNS ゾーンにもレコードが自動登録されている
Azure Portal 上の Private DNS ゾーンを確認すると、
SQL の FQDN と Private IP が関連付けられた Aレコードが登録されていることが確認できます。
このように、SQL Database のドメイン名がプライベートIPに正しく名前解決されていることを確認できました。
これにより、Azure Web App から Azure SQL Database への 閉域接続(Private Access) が成立していることが確認できました。