みなさんこんにちは。
以前のブログ記事でGPTがAzureで提供されていることのメリットについて言及しましたが、Azure OpenAI Serviceは様々なAzureリソースと組み合わせて利用することが可能です。 Azure OpenAI ServiceをきっかけにAzureに触れはじめた方もいらっしゃるかもしれません。 もしかすると、普段インフラを見ている方がAzure OpenAI ServiceをきっかけにAIやアプリケーションに関連するAzureリソースに興味を持ち始めたというケースもあるかもしれません。 そういった方にも楽しんで頂けるよう、なるべく簡単な例を用いつつAzureでできることをご紹介していければと思います。
今回のテーマは「閉域化」です。
以前のブログ記事でAzure OpenAI Serviceについてご紹介した際「エンドポイント」についてご説明しました。 Azure OpenAI Serviceのリソースを作成することによりエンドポイントが自動的に作成されますが、このエンドポイントはデフォルトでインターネットを含めてすべてのネットワークからアクセスできるようになっています。 Azure OpenAI Serviceを利用したシステムを実装するにあたり、「通信をAzure内部に閉じたい」というご要望が出てくるケースもあるでしょう。
本ブログ記事ではこのような場合に「プライベートエンドポイント」を利用する方法についてご紹介します。 なお、今回はAzure OpenAI Serviceを対象としていますが、他のAzureリソースを扱う際にも考え方を応用できるのではないかと思います。
なお、本ブログ記事ではAzure OpenAI Serviceリソース作成やモデルのデプロイが完了していることを前提にご説明しております。
Azure OpenAI Serviceに関する操作やAPIの利用については以前のブログ記事でご紹介していますので、先にこちらをご一読頂くことをおすすめいたします。
Azure OpenAI Serviceのプライベートエンドポイント
Azureには「プライベートエンドポイント」というリソースがあります。 プライベートエンドポイントを利用すると、Azureの仮想ネットワーク上にエンドポイントを置くことができます。 つまり、プライベートIPアドレスによってAzureのリソースを利用することができるようになります。 プライベートエンドポイントと仮想ネットワークのリージョン / サブスクリプションを同じにするなどの条件がありますので、Microsoft Learnもご参照ください。
Azure OpenAI Serviceにおいてもプライベートエンドポイントを利用することが可能です。
Azure OpenAI Serviceのプライベートエンドポイントを作成する
今回は一連の操作をAzure Portalで行っています。
プライベートエンドポイントは先の図の通り仮想ネットワークのサブネットを利用しますので、先に仮想ネットワークとサブネットを以下の通り用意しました。 今回使用するサブネット「subnet1-aoai」は10.1.1.0/24になっています。 必要に応じてネットワークセキュリティグループ(NSG)などの設定も整えておきます。
今回はプライベートエンドポイントのみ使用できるようにしたいため、Azure OpenAI Serviceのエンドポイントへのアクセスは無効化します。 「ネットワーク」の「Firewalls and virtual networks」タブで「許可するアクセス元」を「無効」にして「Save」をクリックします。
次にプライベートエンドポイントを作成します。 「プライベートエンドポイント接続」タブで「+プライベートエンドポイント」をクリックします。
プライベートエンドポイントのリソースを作成する画面に遷移します。
「仮想ネットワーク」タブで先程用意した仮想ネットワークとサブネットを指定します。
ウィザードに従ってプライベートエンドポイントの作成を行ったのち、存在するリソースを確認すると以下のようになっています。 プライベートエンドポイント作成に伴って、ネットワークインターフェースとプライベートDNSゾーンも作成されています。
ネットワークインターフェースには仮想ネットワークのサブネットに属するIPアドレスが割り当たっています。
またプライベートDNSゾーンを確認すると、Aレコードが登録されておりAzure OpenAI Serviceが仮想ネットワーク上のIPアドレス(プライベートIPアドレス)へ解決されるようになっていることが分かります。
先の図はネットワークインターフェースやプライベートDNSゾーンを省略したものでしたが、これらも含めたイメージ図が以下です。
インターネット経由で利用できなくなったことを確認する
Azure OpenAI Serviceのエンドポイントにインターネット経由でリクエストを送信して動作を確認します。
今回はAPIへのリクエスト送信のためWindowsのWSLを使用します。(このWindowsが存在する環境はAzureに対してVPNやExpressRouteでの接続を行っていないため、インターネット経由でエンドポイントにアクセスします。) 環境変数の設定やAPIリクエスト / レスポンスについては以前のブログ記事にてご紹介していますので、詳細はそちらをご確認ください。
curlコマンドの実行結果を見てみると、403エラーとパブリックアクセスが無効になっている旨のメッセージが確認できます。
「サービスエンドポイント」に関する補足
仮想ネットワークからAzure OpenAI Serviceへのアクセスに関して、プライベートエンドポイントを利用せずに特定の仮想ネットワークからのアクセスを許可するということも可能です。(こちらの画面では仮想ネットワークを指定するだけではなく特定のIPアドレスレンジからのアクセスを許可することも可能です。 詳細についてはこちらをご参照ください。)
しかしながら、こちらの方法はAzure OpenAI Service のエンドポイントをプライベートIPアドレスに解決して利用するものではありません。 上図に説明が表示されていますがこちらは「サービスエンドポイント」を利用する方法です。 動作確認のため一時的にサブネット「subnet-tmp」を作成してAzure OpenAI Serviceのネットワーク設定に追加した後、仮想ネットワークがどのように変化しているかを見てみましょう。
仮想ネットワークの「サービスエンドポイント」を確認すると、「Microsoft.CognitiveServices」のサービスエンドポイントがサブネット「subnet-tmp」に追加されていることが分かります。(Azure OpenAI ServiceはAzure AI Servicesに属するサービスであり、Azure AI Servicesは以前「Azure Cognitive Services」という名称で提供されていました。)
IPアドレスの空き状況を確認してみると、Azure OpenAI Serviceのプライベートエンドポイントを作成したサブネット「subnet1-aoai」は「使用可能なIP」が1つ減っていますが、「subnet-tmp」は減っていないことが分かります。 (Azureの仮想ネットワークでは各サブネットで5つのIPアドレスが予約されています。 今回はサブネットの「サイズ」を「/24」としているため各サブネットに256個のIPアドレスが存在しますが、ユーザーが利用できるIPアドレスは256-5=251個です。 詳細はこちらをご参照ください。)
このようにサービスエンドポイント方法を利用する方法もございますが、Microsoft Learnに記載されているようなセキュリティ強化などの観点から、今回はプライベートエンドポイントを利用する方法をご紹介いたしました。
まとめ
本ブログ記事ではAzure OpenAI Serviceのエンドポイントに対するアクセス(パブリックIPアドレスによるアクセス)を無効にし、プライベートエンドポイントを作成する方法についてご紹介しました。
Azure OpenAI Serviceを対象としたブログ記事ではありますが、プライベートエンドポイント、ネットワークインターフェース、プライベートDNSゾーンといったAzureリソースの関係性を整理するのにもお役立て頂けましたら幸いです。
また別のブログ記事でAzure内部からAzure OpenAI ServiceのAPIへリクエストを送信する様子などもご紹介できればと思います。
SB C&SはAzureを取り扱われているパートナー企業様へ様々なご支援のメニューを用意しております。 メニューの詳細やAzureに関するご相談等につきましては以下の「Azure相談センター」をご確認ください。
Azure相談センター
https://licensecounter.jp/azure/
※ 本ブログは弊社にて把握、確認された内容を基に作成したものであり、サービス・製品の動作や仕様について担保・保証するものではありません。サービス・製品の動作、仕様等に関しては、予告なく変更される場合があります。
Azureに関するブログ記事一覧はこちら
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 第1技術部 4課
中原 佳澄