Zenn
☁️

🎉 Azure Front Door から Application Gateway に Private Link を使って接続してみた

2025/02/12に公開

■ 概要

2025年2月より、Azure Front Door Premium はパブリックプレビューとして、Application GatewayAPI 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 とネームしてください)
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

設定 > プライベートリンク にアクセスして、Application Gateway の 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

ログインするとコメントできます