【第14回】Azureで社内システム再現（クラウド編）｜VM から Web App にプライベートアクセスしてみた

## 概要

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

※全体構成の詳細は、[【第0回】Azureで社内システム再現（オンプレ編）｜構成図と動作の流れ](https://qiita.com/your-link-here) をご参照ください。

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

※クラウド移行全体の設計方針については、[【第10.5回】Azureで社内システム再現（クラウド編）｜オンプレ構成をどうクラウドに移行するか？](https://qiita.com/saba_infra/items/4ff691131593e947d6cf) にまとめています。

---

## システム構成（今回の対象範囲）

今回のテーマは、**Azure Web App 自体にも Private Endpoint を構成し、仮想ネットワーク内の仮想マシン（VM）からプライベート経由でアクセスできるようにすること**です。

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

![cloud_webapp_vnet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/9d0a2789-254a-44b2-9bec-4f4e15a6acf0.png)

このうち、**赤枠で示している Azure Web App → Azure SQL の閉域接続**は、前回（第13回）までに構成済みです。

---

次に、下図がその**閉域構成の詳細図**です。
![cloudのVnet統合_14 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/4aac79f6-ab80-40b1-babc-6427685d5d72.png)


Azure Web App にも Private Endpoint を構成し、  
同一の仮想ネットワークに所属するテスト用VMのブラウザから、 Web アプリにプライベートアクセスできる構成を構築します。

これにより、Webアプリ側の通信も含めて**すべてが仮想ネットワーク内で完結する閉域構成**となり、よりセキュアな社内システムを実現できます。

---

今回は以下の作業を行います。

- Azure Web App 用の Private Endpoint を作成  
- Private DNS ゾーンにレコードが登録されていることを確認    
- VM から Web App の FQDN にアクセスし、プライベート接続で Web ページが表示されることを確認

## Web App 用サブネットの作成

今回の構成では、Azure Web App に対して Private Endpoint（PE）を構成し、  
仮想ネットワーク内の仮想マシン（VM）から Web アプリにプライベートアクセスできるようにします。

そのため、以下の2つのサブネットを新たに作成しました：

- Web App の Private Endpoint 用サブネット（subnet-webapp-pe）  
- 動作確認用の仮想マシンを配置するサブネット（client-sn）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/9db87aed-9306-4523-a211-15c279fb841c.png)

## Azure Web App に Private Endpoint を構成する

続いて、Azure Web App に対して Private Endpoint を作成します。  
この設定により、App Service 自体がプライベートIPを持つようになり、  
仮想ネットワーク内の VM からのアクセスが可能になります。

作成時には、以下の設定を行いました：

- サブネット：先ほど作成した `subnet-webapp-pe` を指定  
- Private DNS 統合：有効（自動で `privatelink.azurewebsites.net` にレコードが登録されます）

![スクリーンショット 2025-04-05 14.18.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/740ba78b-cb8c-4138-90f5-233c07244f5b.png)

> 補足：  
> Private DNS ゾーンとの統合を有効にすることで、App Service のFQDN（`xxxxx.azurewebsites.net`）が  
> プライベートIPに名前解決されるようになります。

---
## 名前解決の確認とパブリックアクセスの無効化

### Private DNS ゾーンに正しく登録されているか確認

Web App 用の Private Endpoint を作成すると、`privatelink.azurewebsites.net` に自動で DNS レコードが登録されます。  
ここでは、FQDN とプライベートIP（今回の例では `10.0.6.4`）が正しく対応しているかを確認します。

![スクリーンショット 2025-04-05 14.32.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/bd3209aa-3c8a-4095-854a-e427f533d994.png)

> ※今回は Web App にカスタムドメイン（`www.azuretest0905.com`）を設定しています。  
> この設定方法については、次回の記事で詳しく紹介します。

---

### 仮想マシンから `nslookup` で名前解決を確認

続いて、同じ仮想ネットワークに配置した動作確認用の仮想マシン（VM）から `nslookup` を実行し、  
Web App の FQDN（`www.azuretest0905.com`）がプライベートIPに名前解決されることを確認します。

![スクリーンショット 2025-04-05 14.32.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/e15460a5-d270-415c-87b4-0fc9eb08b897.png)

このように、正しく `10.0.6.4` が返ってくれば、Private DNS 統合が正常に機能していることがわかります。

---

### Web App のパブリックアクセスを無効化

名前解決が確認できたら、**Web App へのパブリックアクセスを無効化**します。  
これにより、インターネット経由でのアクセスを遮断し、**完全に閉じた通信経路（仮想ネットワーク内）**のみを許可する構成となります。

Web App の「ネットワーク」設定から、**パブリックアクセスを「無効」**に変更します。

![スクリーンショット 2025-04-05 14.32.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/8cf82ce7-1482-45fa-8c50-37c605353918.png)

これで、Web App に対して仮想ネットワーク内の通信（Private Endpoint 経由）のみが有効となり、よりセキュアな閉域構成が完成しました。

---
## Web アプリへのアクセス確認（閉域接続の検証）

最後に、仮想ネットワーク内に配置した仮想マシン（VM）上のブラウザから、  
Azure Web App のカスタムドメイン（`www.azuretest0905.com`）にアクセスし、Web ページが正しく表示されることを確認しました。

![スクリーンショット 2025-04-05 14.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/b87a13a5-a107-4eb3-bb42-531fbff9533f.png)

パブリックアクセスを無効にした状態でも、  
Private Endpoint 経由で Web App に到達できていることが確認でき、閉域構成が正常に機能していることがわかります。また検索機能も正常に動作していることが確認できました。

---

さらに、自宅PCなど仮想ネットワーク外の端末から同じ URL（`www.azuretest0905.com`）にアクセスしたところ、  
以下のようにアクセスが拒否される画面が表示されました。

![スクリーンショット 2025-04-08 11.07.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/114a3ec3-4aef-4d2e-8134-504f6cb2fa3f.png)

これにより、**インターネット経由でのアクセスが遮断され、仮想ネットワーク内からのみアクセスが可能な閉域構成が実現できている**ことが確認できました。

---