概要
Azure OpenAIで作成したgpt3.5リソースについて、
プライベートエンドポイントを設定して、
仮想ネットワークのプライベートIPアドレスでのみ接続できるようにする。
設定
プライベートエンドポイントの作成
まずプライベートエンドポイントを作成する。
Azure OpenAIサービスで対象のリソースを選択して、
**「リソース管理 > ネットワーク > プライベートエンドポイント接続」**から作成する。
プライベートエンドポイントの作成を画面の内容に沿って実施する。
DNS設定については環境毎に選択してください。
今回は/etc/hostsを使って検証するためどちらでもOK。
設定したら、プライベートエンドポイントに付与されたIPアドレスを確認しておくこと。
Azure OpenAIに接続制限を設定
「リソース管理 > ネットワーク > Firewalls and virtual networks」
から接続制限の設定を行う。
許可するアクセス元を「選択したネットワークとプライベートエンドポイント」に設定
基本的にはこの設定だけで、プライベートエンドポイント以外からの接続は不可になる。
他に制限を付けたければ、他の項目も設定する。
検証
接続制限なしで実行
まず、制限なしの場合にAzure OpenAIに接続できることを確認する。
任意のサーバーからcurlコマンドでAzure OpenAIに処理を行う。
$ curl [AzureOpenAIのURL] \
-H "Content-Type: application/json" \
-H "api-key: [APIキー]" \
-d '{
"messages": [{"role":"system","content":"You are an AI assistant that helps people find information."},{"role":"user","content":"こんにちは"}],
"max_tokens": 800,
"temperature": 0.7,
"frequency_penalty": 0,
"presence_penalty": 0,
"top_p": 0.95,
"stop": null
}'
コマンドは、Azure OpenAI Studioのプレイグラウンドで、「コードの表示」から確認可能
「コードの表示」からcurlコマンドを表示してそのまま実行すると何故かエラーになったので確認したところ、送信JSONの「messages」に含まれる内容が配列でないといけないのに文字列になっていた模様。ダブルクォーテーションを取ってから実行したら解消した。
制限なしの場合は、実行すると通常通りの応答が帰ってくる。
{"id":"~~~~"... "model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","message":{"role":"assistant","content":"こんにちは!どのようにお手伝いできますか?"}}],"usage":{"completion_tokens":17,"prompt_tokens":25,"total_tokens":42}}
接続制限ありで実行
接続制限を付けて再度実行する。
まず、プライベートエンドポイントではなく通常のエンドポイントに宛てて実行する。
コマンドは同じものを利用する。
実行すると、下記のように接続拒否のメッセージが帰ってきて接続ができないことがわかる。
{"error":{"code":"AccessDenied","message": "Access denied due to Virtual Network/Firewall rules."}}
次に、接続制限ありの状態でプライベートエンドポイント宛てに実行する。
今回は/etc/hostsで接続先ホストの名前解決をプライベートエンドポイントのIPアドレスに設定して検証する。
# cat /etc/hosts
172.20.***.*** ***.openai.azure.com
この状態で再度実行すると、問題なく応答が帰ってくることがわかる。
{"id":"~~~~"... "model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","message":{"role":"assistant","content":"こんにちは!どのようにお手伝いできますか?"}}],"usage":{"completion_tokens":17,"prompt_tokens":25,"total_tokens":42}}
おわり
Python・GPT・Azureが分かる人が社内に居なさすぎてつらいぞ。
みんな新しいことは学んでいこうぜ!