【Azure】ネットワーク閉域化のあれこれ
はじめに
Azureのネットワークを考える際、主にセキュリティ上の理由から特定のネットワークからのみにアクセスを制限する(閉域化する)設計とすることが多いと思います。ネットワーク閉域化の有名なサービスとしてプライベートエンドポイントがありますが、同じような名前のサービスにサービスエンドポイントがあったり、プライベートリンクがあったりと、とにかくややこしい印象です。これら各サービスの違いについては、既に先人達によって語りつくされている感がありますが、自分の中の整理として記事にまとめておきたいと思います。
サービスエンドポイント
当初よく分からなかったのがこのサービスエンドポイントになります。
MS Learnの公式サイトでは、以下のような説明がされています。
仮想ネットワーク (VNet) サービス エンドポイントでは、Azure のバックボーン ネットワーク上で最適化されたルートを介して、Azure サービスに安全に直接接続できます。 エンドポイントを使用することで、重要な Azure サービス リソースへのアクセスを仮想ネットワークのみに限定することができます。
https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-network-service-endpoints-overview
ここでの説明の通り、制限する対象はAzureのサービス単位となります。また、設定は仮想ネットワークのサブネットに対して行います。具体的な設定は下記になります。
サービスエンドポイント設定
:::
サービスエンドポイントに[Microsoft.Storage]を設定します。
サービスエンドポイントに設定が追加されます。
その後、ストレージアカウント側でも、接続元のネットワークを指定し制限します。
:::
サービスエンドポイントの設定を有効にすると、サブネットから特定のサービス(今回であればストレージアカウント)へのアクセス時、ネクストホップがサービスエンドポイントになります。アクセス制御というよりはネットワークルーティングに近い設定となります。
その為、サービスエンドポイントの設定を実施しただけでは、アクセス制限としては意味はなく、アクセス先のサービスにおいても、アクセス元を制限する設定を行う必要があります。
プライベートエンドポイント
プライベートエンドポイントは、仮想ネットワークのプライベートIPアドレスを使用するネットワークインターフェースです。ネットワーク閉域化といえば真っ先に上がるサービスかと思います。プライベートエンドポイントはPaaS側のネットワーク設定から行えます。
具体的な設定箇所は以下となります。
プライベートエンドポイント設定
:::
「+プライベートエンドポイント」を選択します。
プライベートエンドポイント名やNIC名、リージョン等を選択します。
対象のリソースを選択します。今回は「ファイル共有」としたため「file」を選択します。
仮想ネットワークとサブネットを選択します。
DNS設定は既定の「プライベートDNSゾーンと統合する」に「はい」を選択します。
仮想マシンから接続テストを行うため、ファイル共有の接続スクリプトをコピーします。
仮想マシン上のPowerShellからスクリプトペーストして実行すれば、プライベートエンドポイント経由でファイル共有にアクセスできます。
:::
プライベート エンドポイントは、仮想ネットワークのプライベート IP アドレスを使用するネットワーク インターフェイスです。 ユーザーはこのネットワーク インターフェイスにより、Azure Private Link を利用するサービスに非公開で安全に接続します。 プライベート エンドポイントを有効にして、サービスを仮想ネットワークに取り込みます。
https://learn.microsoft.com/ja-jp/azure/private-link/private-endpoint-overview
プライベートリンク
プライベートリンクは、Paasとプライベートエンドポイントを処理する特別なリソースです。
本来、プライベートエンドポイントを作成する前に、プライベートリンクを作成しておき、プライベートエンドポイントを作成時に、プライベートリンクとサブネットの紐付けを行います。
ただし、Azure Portalからプライベートエンドポイントを作成する場合は、プライベートリンクは自動で作成される為、作業者はあまり意識する必要がありません。故にプライベートリンクというリソースは私の中では割ともやっとした存在です。
プライベートエンドポイントの概要ページには「プライベートリンクリソース」として接続先のPaaSの表示があります。
Azure Private Link を使用すると、お使いの仮想ネットワーク内のプライベート エンドポイント経由で Azure PaaS サービス (Azure Storage、SQL Database など) と Azure でホストされている顧客所有の、またはパートナー サービスにアクセスできます。
https://learn.microsoft.com/ja-jp/azure/private-link/private-link-overview
プライベートリンクサービス
プライベートリンクサービスは、ネットワークアクセスをAzure Load Blancerの背後で実行されているサービスに経由するもので、プライベートリンクとは別のサービスになります。
Azure Private Link サービスは、Azure Private Link を使用する独自のサービスに対する参照です。 Azure Standard Load Balancer の背後で実行されている自分のサービスで Private Link アクセスを有効にすると、自分のサービスのコンシューマーがそのサービスに対して独自の VNet からプライベートにアクセスできるようになります。
https://learn.microsoft.com/ja-jp/azure/private-link/private-link-service-overview
プライベートDNSゾーン
プライベートエンドポイント作成時に、「プライベートDNSゾーンと統合する」に「はい」を選択すると「プライベートDNSゾーン」のリソースが作成されます。これにより、プライベートIPアドレスのAレコードが登録され、AzureDNSを利用したプライベートIPアドレスの名前解決が可能になります。
仮想マシンからの名前解決の結果、プライベートIPアドレスが返されている事が分かります。
VNet統合
VNet統合は、App Service(Functionを含む)を仮想ネットワークに統合する機能で、VNetへの通信をプライベートIPアドレスで可能にするものです。
設定は、App Serviceの[設定]-[ネットワーク]より行います。具体的な設定は下記になります。
VNet統合設定
:::
[仮想ネットワーク統合]-[未構成]をクリックします。
[仮想ネットワーク統合の追加]をクリックします。
[仮想ネットワーク]と[サブネット]を設定し、[接続]をクリックします。
:::
仮想ネットワーク統合が有効になっている場合、アプリは仮想ネットワークを介して送信呼び出しを行います。 アプリのプロパティ ポータルに一覧表示される送信アドレスは、引き続きそのアプリによって使用されるアドレスです。 ただし、送信呼び出しが、統合仮想ネットワークまたはピアリングされた仮想ネットワーク内の仮想マシンまたはプライベート エンドポイントに対して行われる場合、送信アドレスは統合サブネットのアドレスになります。
https://learn.microsoft.com/ja-jp/azure/app-service/overview-vnet-integration
おまけ
ネットワーク閉域化の文脈でよく使われるバックボーンネットワークとは何でしょうか。
それは世界中のAzureリージョン内のデータセンター間を接続するマイクロソフトのグローバルネットワーク(WAN)です。このネットワークは非常に高速であると同時にパブリックなインターネット回線を経由しません。
その為、Azureサービス間の通信であれば、一見インターネットを利用しているように見える通信でもインターネットを経由しないわけです。(私もAzureを利用したての頃は誤解してました。。)
では、Microsoft サービスの使用時はすべてのトラフィックがこのようにルーティングされるのでしょうか。 はい。Microsoft Azure 内のデータセンター間、または Virtual Machines、Microsoft 365、Xbox、SQL DB、Storage、仮想ネットワークなどの Microsoft サービス間のあらゆるトラフィックはこのグローバル トラフィック内でルーティングされ、決してパブリック インターネットを経由しません。 このルーティングにより、最適なパフォーマンスと整合性が保証されます。
最後に
今回記事をまとめるにあたって、ああ、そういえばこうだったなと思いだす事も多く、あいまいだった記憶が整理された気がします。(整理しきれたかどうかは微妙ですが。)
こういったこともアウトプットする大きなメリットですね。
[参考]
https://jpaztech.github.io/blog/network/pe-difference-se/
https://qiita.com/aktsmm/items/746d355b9b8e6fcc92a6
https://www.youtube.com/watch?v=tv0HBOrsz1o&t=18s
Discussion