今回は、Function App/App Service から Azure OpenAI へアクセスを仮想ネットワークのみにしたいというケースの話です。
Azure OpenAI へのアクセスを仮想ネットワークのみに限定することは可能ですが方法はいくつかあります。
そして Azure OpenAI のみに限らず世間では、 Azure での閉域網 = Private endpoint な傾向を感じています (←私の個人的な主観ですので統計データなどはありませぬ)。
サービスエンドポイントの知名度の低さなのだろうか。
サービスエンドポイントと private endopoint の違いを理解得ずとりあえず private endpoint を使うって話しになると、無駄に運用コストはかかるし設定はサービスエンドポイントに比べめんどくさくて良いことは何もないです。
ということで、今回のブログではサービスエンドポイントでの設定を書いていきます。
サービスエンドポイントについて
Azure OpenAI にサービスエンドポイントを構成するということを超ざっくり説明すると、Azure OpenAI へのアクセスを特定の仮想ネットワークのサブネットからしかアクセスできなくするということです。
我ながらさすがにざっくりすぎなので、ちゃんとした説明は公式ドキュメントを見ていただければと思っていますが、それよりも日本マイクロソフトのサポートチームのブログが一番わかりやすいと個人的に思っているのでリンクをはっておきます。
これをみて違いを理解し、それでも Private endpoint を使う理由がある場合のみに利用すればよいものと思っています。
Function App/App Service と Azure OpenAI 間でサービスエンドポイントを構成する
要点
今回の具体的なユースケース例は以下とします。
- Function App は HttpTriger (つまり Web API) で、認証したユーザーのみがアクセス可能
- Azure OpenAI は Function App からのアクセスのみに制限したい
これをサービスエンドポイントを構成する観点で書くとこうなります。
- Function App の outbound の通信 (つまり Azure OpenAI へのアクセス)を、仮想ネットワーク統合(VNet 統合 / VNet integration) 機能によって特定の VNet / subnet 経由に限定する。
- outbound の設定であり、Function App への inbound ではない点には注意。inbound は別の設定になる。
- Function App/App Servcie で VNet 統合を利用するには特定のプランである必要があります。こちらの公式ドキュメント のドキュメントをご確認ください。
- Azure OpenAI は特定の VNet の subnet からのアクセスのみに制限する (サービスエンドポイントとして構成する) 。
Function App で VNet 統合を構成する
ということで、Function App の Outbund の設定からしていきましょう。Azure ポータルで Function App のリソースを開き (Web App でも一緒) > "Networking" をクリックします。ブラウザのウインドウサイズをある程度ひろげておくと、以下の配置で見えます。
注意点は先述していますが、大事なでもう一度書いておきます。
- 特定以上のプランじゃないと VNet 統合は使えません。既存で Consumption plan を使っていた場合使えないので、VNet 統合を使いたい場合はどこかの App Service plan や Premium plan に相乗りなどを検討しましょう。
- 図でわかるように Outbound の制限だということです。Inbound の制限は別になることを理解して混乱しないようにしましょう。
で、肝心の設定ですが、Outbound traffic の中にある VNet integration をクリックして VNet/sub net を選択 (もしくは新規に作成) すればおしまいです。超簡単です。
Azure OpenAI の設定
先ほど指定した VNet / Sub net を指定するだけですが手順を書いていきます。
Azure portal で Azure OpenAI のリソースを開き "Networking" をクリック > "Selected Networks and Private Endpoints" をクリック > "+Add existing virtual network" をクリックします。
Function App の Outbound で指定した VNet と Subnet の指定をして "Add" ボタンをクリックします。
初めてだと、同じブレードでもう一度ボタンをクリックが必要になるはずなので、クリックします。
(私の環境のリソースが初めて作るのじゃないから表示されなかった...)
最後に "Save" ボタンをクリックします。これで設定完了。予想よりもクリックするボタンが多いことがあるので注意ってだけです。
これで、この Azure OpenAI のリソースは今回指定した Subnet からのアクセスからしか受け付けなくなりました。
まとめ
Service endpoint ですむケースには Service endpoint を使いましょう。