2025年4月よりAzureを触りだしたので、思ったことをつらつらと。
Azureでリージョン跨ぎの仮想ネットワーク構成をするときに必ずハマるプライベートエンドポイント地獄
はじめに
Azure構成でセキュアなネットワークを組もうとしたときに、意外と見落とされがちなのが「サービスのリージョンがバラバラ問題」と「サービスエンドポイントが使えない問題」。
この記事では、実際に自分がハマった経験をもとに、App Service, Cosmos DB, Azure AI Search, Azure OpenAI, Functionsなどを含むリージョン跨ぎのVNet構成で陥りやすい落とし穴とその回避法をまとめます。
構成概要
利用サービス:
- App Service(日本リージョン)
- Azure Cosmos DB(海外リージョン)
- Azure AI Search(海外リージョン)
- Azure OpenAI(海外リージョン)
- Azure Functions(Flexプラン、海外リージョン)
要件:
- すべてのサービスを仮想ネットワーク経由でセキュアに接続
- App ServiceとFunctionsはVNet統合
- その他のサービスはPrivate Endpointで閉域接続
なぜプライベートエンドポイントが必須になるのか?
理由1:サービスエンドポイントは同一リージョンのみ
Azureのサービスエンドポイントはリージョンをまたぐと機能しないため、日本リージョンのApp Serviceから海外リージョンのCosmos DBなどへは接続不可になります。
理由2:Azureはサービスごとに対応リージョンが異なる
- Azure OpenAIやFunctionsのFlexプランは日本リージョンに未対応(2025年現在)
- Cosmos DBやAI Searchも機能対応が地域によってバラバラ
したがって、リージョン跨ぎが前提になるため、サービスエンドポイントではなく、Private Endpoint + Private DNSで接続する必要があるのです。
プライベートエンドポイント構成の要点
1. Private Endpoint を各サービスに対して作成
- Cosmos DB、AI Search、OpenAI → それぞれのリージョンでPrivate Endpoint作成
2. Private DNSゾーンの作成とVNetへのリンク
- 各サービスに対応するPrivate DNSゾーンを作成
- 日本リージョンVNetと海外リージョンVNetの両方にリンク
- 名前解決の不整合を防ぐため、手動でAレコード追加が必要な場合あり
3. App Service / FunctionsのVNet統合
- App Service:従来通りRegional VNet IntegrationでOK
- Functions:Flexプラン必須。従来の従量課金プランではVNet統合不可
SNATではなぜ代用できないのか?
SNAT(Source NAT)の特徴:
- インターネット経由のアクセス(出るときにAzureの外部IPに変換)
- 出口制御が難しい、IPが不定、セキュリティに弱い
問題点:
- リージョン跨ぎではSNATでも接続できないサービスがある(CosmosやOpenAIなど)
- セキュリティグループやFirewallで許可できないケースが発生
結論:
セキュリティ、安定性、リージョン跨ぎすべてを満たすには、Private Endpoint一択!
注意点まとめ
項目 | 内容 |
---|---|
サービスエンドポイント | リージョン跨ぎでは使えない |
プライベートDNS | 双方向にVNetリンク、手動登録も考慮 |
Azure Functions | FlexプランのみVNet統合対応、日本未対応 |
ネットワークセキュリティ | NSGやルートテーブルの設定に注意 |
コスト | DNSゾーン・PE・データ転送で増加あり |
補足:VNet外部からAzure OpenAIを使いたい場合は?
Azure OpenAI は Private Endpoint に対応しているとはいえ、クライアント側がVNet外にある場合は直接アクセスできないという制約があります。
このとき、Azure Functions を中継プロキシとして使う構成をとれば、以下のように完全対応可能です。
仕組み:
- 外部からのリクエストは HTTPS で Azure Functions に送る
- Functions は VNet統合されており、内部から Private Endpoint 経由で Azure OpenAI にリクエスト
- 応答を外部へ返却
メリット:
- 外部公開は Functions のみ → エンドポイントを一元管理できる
- Azure OpenAI への通信は VNet 内の Private Endpoint 経由 → セキュアで安定
- Functions を認証ゲートとして使えば、認可・監査も可能
イメージ構成:
[ 外部クライアント ]
|
(HTTPS)
|
[ Azure Functions (Flexプラン, VNet統合) ]
|
(Private Endpoint)
|
[ Azure OpenAI (海外リージョン) ]
「VNet外部 ↔ OpenAI」構成は Functions 経由でセキュア&完全対応!
結論:Azureでは“できるものは全部プライベートエンドポイントにしておけ”
Azureの世界では「すべてのサービスを同じリージョンにまとめられる」と思うのは幻想です。サービス対応リージョンの制約により、リージョン跨ぎ構成はむしろ前提。
その上でセキュアな接続を実現したいなら、Private Endpoint + DNS構成が唯一の解決策になります。
これからAzureで閉域接続構成を組もうとしてる人が、同じ地雷を踏まないことを祈って!