Azure プライベートエンドポイントにインターネット経由でアクセス可能か調査した

2023年6月5日

質問

Azure PaaSサービスは

「ユーザ ⇒ インターネット ⇒ PaaS」

が通信経路になると認識していますが、

「ユーザ ⇒ インターネット ⇒ Azure FW (NAT) ⇒ プライベートエンドポイント ⇒ PaaS」

と構成することは可能でしょうか。

実現可能な場合、注意点などご教示いただけますでしょうか。

回答

Azure Firewall の DNAT の機能を用いて、ご要件を実現することが可能です。

以下のような DNAT ルールを構成すると、クライアントが Azure Firewall の

パブリック IP アドレスにアクセスすると、Azure Firewall はプライベート エンドポイントの

IP アドレスに DNAT しますので、ご要件を実現することが可能です。

< DNAT ルールの設定例 >

———————-

Source Type : IP アドレス

Source IP Addresses : クライアントのグローバル IP アドレス

Destination IP Addresses : 20.20.20.20 (Azure Firewall のパブリック IP アドレス)

Protocol : TCP

Destination Ports : 443 (PaaS で使用するポート番号)

Translated Type : IP アドレス

Translated Address : 10.0.0.4 (プライベート エンドポイントの IP アドレス)

Translated Port : 443 (PaaS で使用するポート番号)

———————-

注意点でございますが、PaaS の FQDN の名前解決を行うと、

Azure Firewall のパブリック IP アドレスに向くように

名前解決の構成を実装いただく必要がございます。

クライアントの hosts ファイルで PaaS の FQDN と Azure Firewall の

パブリック IP アドレスをマッピングすることで、ご記載いただいた

通信経路が実現可能でございます。

追加質問

①プライベートエンドポイント経由でアクセスしたいPaaSが複数あった場合

 Azure FWにグローバルIPアドレスを複数設定することで、

 複数のPaaSに対して、Azure FW経由で、プライベートエンドポイントへのアクセスが可能とう理解で合っておりますでしょうか。

 

 記載いただいたように、PaaSのポートは443かと思いますので、

 複数のPaaSにアクセスしたい場合、複数のグローバルIPアドレスが必要になるかと思いました。私の推測が正しい場合

 Azure FWに複数のグローバルIPアドレスが設定できるかもわかっておりませんので、その点も合わせて教えていただけると助かります。

②FQDNの名前解決について、hostsファイルへの記載することを記載いただきましたが、

 各クライアントのhostsファイルを変更するのは手間がかなりかかると思っていますが

 ほかに方法はないのでしょうか。(DNSを使った方法になるとは思いますが)

 PaaSサービスについてのFQDNには御社のドメインが使われているため  我々でDNSレベルでコントロールするようなことは難しいということでしょうか。

追加回答

=========

① について

=========

ご認識の通りです。複数の PaaS に対して、Azure Firewall

-> プライベート エンドポイント経由でアクセスされたい場合は、

プライベート エンドポイントの数だけパブリック IP アドレスが

必要でございます。

1 つの Azure Firewall に対して最大 250 のパブリック IP アドレスを

関連付けることが可能です。公開ドキュメントにも掲載されておりますので

ご紹介させていただきます。

– 複数のパブリック IP アドレス

https://learn.microsoft.com/ja-jp/azure/firewall/features#multiple-public-ip-addresses

抜粋

—–

複数のパブリック IP アドレス (最大 250) をファイアウォールに関連付けることができます。

—–

Azure Firewall にパブリック IP アドレスを追加する手順は

下記の公開ドキュメントをご参照下さい。

– パブリック IP 構成をファイアウォールに追加する

https://learn.microsoft.com/ja-jp/azure/virtual-network/ip-services/configure-public-ip-firewall#add-a-public-ip-configuration-to-a-firewall

=========

② について

=========

hosts 以外の方法でございますが、DNS を使用した方法でも実現可能です。

ただし、クライアントが参照する DNS サーバーで任意の DNS ゾーンを

作成できることが前提でございます。

(実現にあたり、"privatelink" から始まる DNS ゾーンの作成が必要でございます。)

PaaS でプライベート エンドポイントを有効にすると、PaaS の FQDN に対して

CNAME レコードが作成されます。

例えば、"hoge.azurewebsites.net" の Web Apps でプライベート エンドポイントを

有効にした場合、クライアントが “hoge.azurewebsites.net" の名前解決を行うと、

Azure 基盤側の DNS サーバーは “hoge.privatelink.azurewebsites.net" の

CNAME レコードを応答いたします。

お客様の DNS サーバーで “privatelink.azurewebsites.net" の DNS ゾーンを作成し、

ホスト名 “hoge" を Azure Firewall のパブリック IP アドレスに紐づける A レコードを

作成することで、クライアントが DNS サーバーに “hoge.azurewebsites.net" の

名前解決を行うと、Azure Firewall のパブリック IP アドレスを得ることができます。

分かりづらい部分があるかと思いますので、以下に名前解決のフローをご説明いたします。

< 名前解決のフロー >

——————-

1. クライアントが DNS サーバーに対して “hoge.azurewebsites.net" の

   A レコードの名前解決を行う

2. DNS サーバーは Azure 基盤側の DNS サーバー (azurewebsites.net) に対して

   “hoge.azurewebsites.net" の A レコードの名前解決を行う。

3. Azure 基盤側の DNS サーバーは “hoge.azurewebsites.net" の応答として、

   “hoge.privatelink.azurewebsites.net" の CNAME レコードを応答する

4.  DNS サーバーは “hoge.privatelink.azurewebsites.net" の A レコードの名前解決を行うが、

    DNS サーバー上に “privatelink.azurewebsites.net" の DNS ゾーンが構成されているため、

    この DNS ゾーンにホスト名 “hoge" の A レコードが無いか確認する。

5. DNS サーバー上の “privatelink.azurewebsites.net" の DNS ゾーンには、ホスト名 “hoge" が

   Azure Firewall のパブリック IP アドレスに紐づく A レコードがあるため、DNS サーバーは

   クライアントに対して、"hoge.azurewebsites.net" の A レコードとして Azure Firewall の

   パブリック IP アドレスを応答する

6. クライアントは Azure Firewall のパブリック IP アドレスに対して通信を行う

——————-

各 PaaS サービスで使用される “privatelink" から始まる DNS ゾーンにつきましては

以下の公開ドキュメントに掲載されております。ご利用の PaaS サービスに合わせて、

お客様の DNS サーバー上で “privatelink" から始まる DNS ゾーンと DNS レコードを

作成していただきますようお願いいたします。

– Azure サービス DNS ゾーンの構成

https://learn.microsoft.com/ja-jp/azure/private-link/private-endpoint-dns#azure-services-dns-zone-configuration

※「プライベート DNS ゾーンの名前」の列をご参照下さい。

なお、クライアントによって DNS 参照先が異なる場合、参照先の DNS サーバーごとに

“privatelink" から始まる DNS ゾーンと DNS レコードの作成が必要となりますので

ご留意いただきますようお願いいたします。