🎉 Azure Front Door から Application Gateway に Private Link を使って接続してみた
■ 概要
2025年2月より、Azure Front Door Premium はパブリックプレビューとして、Application Gateway と API Management の2つのサービスを、プライベートリンク対応のオリジンとして新たにサポートしました。
※ Container Apps は 2024年11月下旬 に既に発表されています。
Public Preview: New Origin Types for Azure Front Door Premium Private Link-Enabled Origins
本ブログでは、Front Door の配信元を Application Gateway として、Private Link 構成を構築してみます。
■ やってみました
(1)ストレージアカウントで 静的サイト を構成する
Webブラウザ上で動作確認を行うための検証用サイトを作成します。本ブログでは、ストレージアカウントの静的サイト機能を使用しますが、App Service などのリソースを利用しても問題ありません。
項目 | 設定値(例) |
---|---|
リソース グループ | rg-techblog-poc-ejp |
ストレージ アカウント名 | poctechblogweb1ejp |
リージョン | Japan East |
プライマリ サービス | Azure Blob Storage または Azure Data Lake Storage Gen v2 |
ストレージアカウントを作成後、「静的なWebサイト」を 有効化 します。保存を忘れずに!
あとはデータストレージ
> コンテナー
にアクセスして、検証用のHTMLファイルを $web コンテナ にアップロードします。
検証用のHTMLファイル( index.html とネームしてください)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>Azure 静的サイト</title>
</head>
<body>
<p>本サイトは、Azure ストレージの静的ウェブサイト機能でホスティングされています。</p>
</body>
</html>
静的なWebサイト の エンドポイント にアクセスすると、動作確認できます。
https://<ストレージアカウント名>.z11.web.core.windows.net/
curl -I https://poctechblogweb1ejp.z11.web.core.windows.net/
HTTP/1.1 200 OK
Content-Length: 260
Content-Type: text/html
・・・
(2)仮想ネットワーク と サブネット と パブリックIPアドレス を構成する
仮想ネットワーク上に Application Gateway と Private Endpoint を配置するため、専用サブネットを構成します。
項目 | 設定値(例) |
---|---|
リソース グループ | rg-techblog-poc-ejp |
リージョン | Japan East |
仮想ネットワーク名 | poc-techblog-vnet-ejp |
VNETアドレス空間 | 10.0.0.0/16 |
①サブネット名 | poc-techblog-subnet-appgw-ejp |
①サブネットアドレス空間 | 10.0.0.0/24 |
②サブネット名 | poc-techblog-subnet-pe-ejp |
②サブネットアドレス空間 | 10.0.1.0/28 |
次に、Application Gateway の フロントエンドIP に割り当てる パブリックIPアドレス(Standrad)を作成します。
項目 | 設定値(例) |
---|---|
リソース グループ | rg-techblog-poc-ejp |
リージョン | Japan East |
名前 | poc-techblog-pip-ejp |
IP バージョン | IPv4 |
SKU | Standrad |
可用性ゾーン | Zone-redundant |
レベル | Regional |
(3)Application Gatewayで 静的サイト を配信する
(1)で構成した 静的サイト を、Application Gateway 経由で配信します。
基本情報
項目 | 設定値(例) |
---|---|
リソース グループ | rg-techblog-poc-ejp |
ゲートウェイ名 | poc-techblog-appgw-ejp |
リージョン | Japan East |
レベル | Standard V2 |
仮想ネットワーク | poc-techblog-vnet-ejp |
サブネット | poc-techblog-subnet-appgw-ejp |
フロントエンド
項目 | 設定値(例) |
---|---|
フロントエンド IP の種類 | 両方 |
パブリック IPv4 アドレス | poc-techblog-pip-ejp |
プライベート IPv4 アドレス | 10.0.0.4 |
項目 | 設定値(例) |
---|---|
バックエンド プール名 | web1-bepool |
ターゲットを持たないバックエンド プールを追加します | いいえ |
バックエンド ターゲット | <ストレージアカウント名>.z11.web.core.windows.net |
ルーティング規則
項目 | 設定値(例) |
---|---|
ルール名 | web1-rule |
優先度 | 100(適当) |
リスナー
項目 | 設定値(例) |
---|---|
リスナー名 | web1-listener |
フロントエンド IP | パブリック IPv4 |
プロトコル/ポート | HTTP/80 |
リスナーの種類 | Basic |
フロントエンド IP | パブリック IPv4 |
プロトコル | HTTP |
バックエンド設定
項目 | 設定値(例) |
---|---|
バックエンド設定名 | web1-be |
バックエンド プロトコル/ポート | HTTPS/443 |
バックエンド サーバーの証明書は既知の CA によって発行されます | はい |
新しいホスト名でオーバーライドする | はい |
特定のドメイン名でオーバーライドする | はい |
ホスト名 | <ストレージアカウント名>.z11.web.core.windows.net |
バックエンド ターゲット
項目 | 設定値(例) |
---|---|
ターゲットの種類 | バックエンド プール |
バックエンド ターゲット | web1-bepool |
バックエンド設定 | web1-be |
リソース作成後、フロントIPとして割り当てたパブリックIPアドレスにアクセスすると、動作確認できます。
curl -I http://74.176.16.81/
HTTP/1.1 200 OK
Date: Tue, 11 Feb 2025 12:49:42 GMT
Content-Type: text/html
(4)Application Gatewayで Private Link を構成する
設定
> プライベートリンク
にアクセスして、Application Gateway の Private Link を構成します。
Private Link
項目 | 設定値(例) |
---|---|
名前 | poc-techblog-appgw-pl-ejp |
プライベート リンク仮想ネットワーク | poc-techblog-vnet-ejp |
プライベート リンクのサブネット | appGwPrivateFrontendIpIPv4 |
フロントエンド IP 構成 | appGwPrivateFrontendIpIPv4 |
プライベート IP アドレスの設定 | (1個追加) |
Application Gateway への通信経路は、定義できました。実際に Application Gateway へ通信させるためには、Private Endpoint を構築し、承認させる必要があります。
(5)の手順を進めていくと、Private Endpoint をAzure側が自動構築してくれます。
(5)Front Doorで Application Gateway 配信元 を構成する
Front Doorのリソースを作成します。個人的に絶対お勧めしませんが、本ブログでは 簡易作成 で構成します。
Front Door プロファイル
項目 | 設定値(例) |
---|---|
リソース グループ | rg-techblog-poc |
リソース グループの場所 | Japan East |
名前 | poc-techblog-afd |
レベル | Premium |
エンドポイント名 | poc-techblog-appgw-ejp |
配信元の種類 | Application Gateway |
プライベートリンク | 有効 |
ターゲットサブリソース | appGwPublicFrontendIpIPv4 |
要求メッセージ | Application Gateway Origin |
リソース作成後、ホストヘッダーやプロトコルの設定を更新する必要があります。
配信元の編集
項目 | 設定値(例) |
---|---|
配信元のホスト ヘッダー | poctechblogweb1ejp.z11.web.core.windows.net |
ルートの更新
項目 | 設定値(例) |
---|---|
リダイレクト | オフ |
転送プロトコル | HTTP のみ |
(6)Application Gateway の Private Endopoint を承認する
(5)で 配信元 を構成した後、Application Gatewayの プライベートリンク にアクセスすると Private Endpoint が自動構築されます。
保留中の状態になっているため、承認してください。
■ 動作確認
ブラウザやコンソール を使ってFront Doorのエンドポイントから静的サイトを確認できるか確認します。
curl https://poc-techblog-afd-endpoint-gmbrb8ambwbrb9dq.z03.azurefd.net
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>Azure 静的サイト</title>
</head>
<body>
<p>本サイトは、Azure ストレージの静的ウェブサイト機能でホスティングされています。</p>
</body>
</html>%
■ (任意) 1. Private Endpoint を「拒否」して壊してみた
本当に Private Link を使用しているかどうかは、Azure ポータルや CLI などを使用して設定を確認する以外に方法はありません。
実際に Private Endpoint を「承認」状態から「拒否」状態に変更してみます。
504 エラー(サービス利用不可)が発生し、接続できなくなりました。壊れました。
curl -I https://poc-techblog-afd-endpoint-gmbrb8ambwbrb9dq.z03.azurefd.net
HTTP/2 504
date: Wed, 12 Feb 2025 09:58:31 GMT
content-type: text/html
■ (任意) 2. Private Endpoint を「再構築」して復活したい
壊してしまったので、復活してみます。
Azure では、Private Endpoint を一度「拒否」すると再承認できないという制約があります。
では、Front Door の 配信元または配信元グループ を作り直し、Application Gateway の画面で承認することで、再度接続できるかと思いましたが Private Endpoint は再作成されませんでした。
もう少し検証が必要です・・・ 今回は諦めます。
Discussion