Skip to main content

AOAI にプライベートエンドポイントから接続し、VM のマネージド ID を利用して API Key 無しで AOAI を呼び出す

· 5 min read
ks6088ts

本記事では以下の 2 つのシナリオをハンズオン形式で説明します。

  1. AOAI にプライベートエンドポイントから接続する方法
  2. VM のマネージド ID を利用して API Key 無しで AOAI を呼び出す方法

開発環境の準備

ハンズオンを始める前に、お使いの開発マシンに次の環境を準備します。

以下の環境で動作確認しました。

❯ az version
{
"azure-cli": "2.51.0",
"azure-cli-core": "2.51.0",
"azure-cli-telemetry": "1.1.0",
"extensions": {
"azure-iot": "0.22.0",
"containerapp": "0.3.41"
}
}

❯ az bicep version
Bicep CLI version 0.22.6 (d62b94db31)

本ハンズオンでは Azure OpenAI Service にプライベートエンドポイントから接続する動作確認を VM から行います。

事前準備

リポジトリをクローンして infra/ に移動します。

# clone repository
git clone https://github.com/ks6088ts-labs/baseline-environment-on-azure-bicep.git
cd baseline-environment-on-azure-bicep/infra

シナリオごとにディレクトリが分けられているため、以下のコマンドで各シナリオのテンプレートをデプロイできます。
本記事では example シナリオを使って説明します。

# deploy example resource
make deployment-create SCENARIO=example

(FIXME: デフォルトだと関係のない不要なリソースもデプロイされてしまいます。必要に応じて .bicepparam のフラグ設定を書き換えてください。今回は説明のため全部デプロイしています。)

1. AOAI にプライベートエンドポイントから接続する方法

Azure Portal からの操作方法は Azure OpenAI にプライベートエンドポイント(Private Endpoint)を設定して東日本リージョンの仮想ネットワークのみから使う が詳しいです。
今回は Azure Portal ではなく IaC スクリプトにてインフラは構築済です。Private Endpoint 接続に関連するリソースは、baseline-environment-on-azure-bicep/infra/modules/virtualNetwork.bicepopenAiPrivateDnsZone , openAiPrivateDnsZoneVirtualNetworkLink, openAiPrivateEndpoint, openAiPrivateDnsZoneGroupName が該当します。

こちらの環境で VM に SSH でログインして Azure OpenAI Service にプライベートエンドポイントから接続出来ていることを確認します。
以下のように nslookup の結果を見るとプライベートアドレスが返ってきます。
ref. Azure OpenAI Service にプライベートエンドポイントから接続する

azadmin@TestVm:~$ nslookup  your-aoai-name.openai.azure.com
Server: 127.0.0.53
Address: 127.0.0.53#53

Non-authoritative answer:
your-aoai-name.openai.azure.com canonical name = your-aoai-name.privatelink.openai.azure.com.
Name: your-aoai-name.privatelink.openai.azure.com
Address: 10.3.1.5

2. VM のマネージド ID を利用して API Key 無しで AOAI を呼び出す方法

手順は以下の通りです。

  1. VM のシステム割り当てマネージド ID を有効にする (今回は Bicep 側で既に有効化しています。参考資料は Azure portal を使用して Azure VM で Azure リソースのマネージド ID を構成する)
  2. VM のシステム割り当てマネージド ID に対して AOAI リソースの呼び出し権限を割り当てる (Azure Portal から AOAI リソースを開き、IAM > Add role assignment > Cognitive Services OpenAI User を選び、割当先として VM のマネージド ID を指定します。参考: マネージド ID を使用して Azure OpenAI Service を構成する方法)
  3. 以下コマンドで API Key 無しに呼び出しができることを確認する
# 仮想環境の準備
python3 -m venv .venv
source .venv/bin/activate
pip install azure-identity openai==0.28

python を実行し REPL 環境で以下のコードを逐次実行します。 リソース名などは適宜読み替えてください。

import openai
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
token = credential.get_token("https://cognitiveservices.azure.com/.default")

openai.api_type = "azure_ad"
openai.api_key = token.token
openai.api_version = "2023-07-01-preview"
openai.api_base = "https://your-aoai.openai.azure.com"

response = openai.ChatCompletion.create(
engine="gpt-35-turbo",
messages = [
{"role":"user","content":"Hello"},
],
temperature=0,
)

# 確認
response

参考資料