Azure OpenAI ServiceでMicrosoft Entra ID (Azure AD)認証を使ってみる (Python)
はじめに
Azure OpenAI Serviceが本家OpenAI社のAPIと異なる部分の一つに、Azure OpenAIでは、APIキーの認証に加えてMicrosoft Entra ID (旧称 Azure Active Directory; Azure AD)によるユーザー認証に対応していることが挙げられます。
ただ、多くのサンプルコードはAPIキーによる認証で書かれていたため、Microsoft Entra ID (ME-ID)認証でAzure OpenAIのAPIを叩く方法をメモします。
前提
APIキーベースでAzure OpenAI Serviceが利用できる程度の環境は整っていると想定しています。
具体的には、Azure OpenAI Serviceのリソースが作成され、デプロイメントが作成でき、またPython環境やopenai
ライブラリがインストールされている環境です。
Pythonライブラリ:
openai
-
azure-identity
- 特にAzure SDK for Pythonを普段使っていない場合は環境に入っていない可能性があるので
pip install azure-identity
を行ってインストールしてください。
- 特にAzure SDK for Pythonを普段使っていない場合は環境に入っていない可能性があるので
事前準備
対象となるAzure ADユーザーに、当該Azure Azure OpenAIリソースに対するCognitive Services ユーザー
ロールを割り当てます。
割り当て方法が不明な場合は下記ドキュメントを参照してください。
Azure portal を使用して Azure ロールを割り当てる - Azure RBAC | Microsoft Learn
次図のように対象ユーザーにロール割り当てがされていれば正常に設定されています。
コード
APIキーを利用する場合 (参考)
Azure Portal等で取得したAPIキーと、エンドポイントを指定します。
Azure OpenAIリソースページの[キーとエンドポイント]ページより確認できます。
キー1 (あるいは2)をopenai.api_key
に、エンドポイントをopenai.api_base
に指定します。
import openai
openai.api_type = "azure"
openai.api_key = "<AZURE_OPENAI_API_KEY>"
openai.api_base = "https://openai-lab.openai.azure.com/" #リソースによって異なる
openai.api_version = "2023-03-15-preview"
Azure AD認証を利用する場合
Azure AD認証を使う場合、Azure ADトークン取得部分の追加と、それに合わせてopenaiライブラリのパラメーター部分の変更が必要です。
from azure.identity import DefaultAzureCredential
import openai
# Request credential
default_credential = DefaultAzureCredential()
token = default_credential.get_token("https://cognitiveservices.azure.com/.default")
# Setup parameters
openai.api_type = "azure_ad"
openai.api_key = token.token
openai.api_base = "https://openai-lab.openai.azure.com/" #リソースによって異なる
openai.api_version = "2023-03-15-preview"
APIを使ってみる
例としてデプロイ済みのGPT-3モデルにプロンプトを投げます。
deployment_id
にAzure OpenAIで作成したデプロイメント名を指定します。
# create a completion
completion = openai.Completion.create(deployment_id="text-davinci-003", prompt="Hello world, logging test")
# print the completion
print(completion.choices[0].text)
結果、This is a test of logging capabilities to see if a message can get
などと表示されたら成功です。
エラーが出る場合は、Azureへのサインインが正常にできているか、expireしていないか等を確認してみてください。
さいごに
無事にAzure ADを利用してAzure OpenAIリソースに対する認証を行えました!より複雑なセキュリティシナリオにも対応可能なためぜひご活用ください。
参考
全体
- マネージド ID を使用して Azure OpenAI Service を構成する方法 - Azure OpenAI | Microsoft Learn
- openai · PyPI
- azure-identity · PyPI
Discussion