🧙‍♂️

Azure OpenAI Serviceのオンプレミスからの閉塞利用

2023/05/23に公開

急にAzure OpenAI Service(以下Azure OpenAI)を使うことになったのでの導入を手伝いました。
オンプレから使うケースをあまり見かけなかったのでメモ書き程度に。

Azure OpenAIの制約

  • Azure OpenAIの対応リージョンは現時点でEast USSouth Central USWest Europe
  • Azure OpenAIにプライベートエンドポイントを作成すれば日本のリージョンと接続可能

制約のうえでAzure OpenAIに求めること

  • プライベートエンドポイントを作成して日本のリージョンから閉塞で接続したい
  • 日本のリージョンにあるAzure Firewallを経由させたい
  • ExpressRouteで接続されたオンプレミスにあるPCから接続したい
  • オンプレミスのDNSを兼ねているAD DSで名前解決させたい

構成

Azure OpenAIはEast USにデプロイしました。
名前通りvnet-jpeastはJapan East、vnet-eastusはEast USにあります。
vnet内のサブネット構成は図では省略しています。

  • 通信フロー
  1. オンプレミスのPCからDNSサーバ(AD DS)でAzure OpenAIのFQDNを名前解決
  2. Express RouteとUDR経由でAzure Firewallに向かせる
  3. Azure Firewallを通過後プライベートエンドポイントへ
  4. プライベートエンドポイントからAzure OpenAIへ

やったこと

  1. Azure OpenAIをデプロイするリージョンへのVnet,Subnetの作成
    今回はAzure OpenAIをEast USにデプロイしましたが、それ以外の用途で使用する予定はなかったためVnet間のピアリングは設定しません。
  2. Azure OpenAIのデプロイ
    たくさん紹介されているため割愛します。
  3. Azure OpenAI用プライベートエンドポイントの作成
    vnet-jpeastのいずれかのサブネットからIPアドレスを払い出し、vnet-eastusに作成したサブネットと紐づけることでプライベートエンドポイントを作成します。
  4. vnet-jpeastのルートテーブルで、プライベートエンドポイント宛の通信をAzure FirewallにルーティングするUDRを設定
    Azure Firewallを経由させるようにUDRで制御します。デフォルトルートでFWに向かせる想定であれば不要。
  5. DNSサーバ(ドメインコントローラ)にAレコードを作成
    2のデプロイ時に<リソース名>.oepnai.azure.comというFQDNが発行されるので、このFQDNと3のプライベートエンドポイントのIPアドレスをAレコードで紐づけます。
    openai.azure.comゾーンを作成し、ホスト名が<リソース名>のAレコードを登録します。

注意点など

プライベートエンドポイント経由だとNSGフローログがサポートされない

Azure OpenAIというよりプライベートエンドポイントの制約として、プライベートエンドポイント宛ての受信トラフィックにおけるNSGフローログはサポートされません。※未検証
https://learn.microsoft.com/ja-jp/azure/private-link/private-endpoint-overview#network-security-group

プライベートエンドポイントを作るサブネットでネットワークポリシーを有効にしておく

UDRでAzure Firewallを向くように設定するため、プライベートエンドポイント宛の通信がUDRを使用できるようにします。
https://learn.microsoft.com/ja-jp/azure/private-link/disable-private-endpoint-network-policy?tabs=network-policy-portal

Azure OpenAIの診断設定を有効化することでログ、メトリクスの収集は可能。ただし送信元アドレスは第3オクテットまでしか開示されない

Azure OpenAI側の診断設定でアクセスログを収集することもできますが、送信元の第4オクテットがマスキングされて特定できない状態になっています。

Power Automateから利用する場合はPower Automateが使用するグローバルIPアドレスの許可が必要

当然ながら(Desktop版でない)Power AutomateはSaaSのため閉塞利用はできません。
そのため、Power Automateが使用するグローバルIPアドレスをAzure OpenAI側で許可する必要があります。今のところカスタムヘッダーなどでテナント制御をする機能はなさそうなので、許可した場合はどのテナントのPower Automateからもアクセス可能になってしまう点に注意。

なおPower AutomateのHTTP要求を利用する場合、内部ではAzure Logic Appsのインフラを共用するため、Azure Logic Appsが使用するグローバルIPアドレスを許可する必要があります。
https://learn.microsoft.com/ja-jp/azure/logic-apps/logic-apps-limits-and-config?tabs=consumption%2Cazure-portal#multi-tenant---outbound-ip-addresses

注意
Power Automate を使用している場合、HTTP 要求や HTTP + OpenAPI などの一部のアクションは、Azure Logic Apps サービスを通じて直接実行され、ここに記載されている IP アドレスから取得されます。 Power Automate によって使用される IP アドレスについて詳しくは、Power Automate の制限と構成に関するページを参照してください。

まとめ

Azure OpenAIは利用申請が必要だったりExpressRouteの再現が必要だったりするので個人環境での検証は省いていますが、オンプレからの閉塞での利用は想定どおり可能でした。
オンプレミスからAPIを叩く独自アプリの開発などの用途であれば問題なさそうです。

Discussion