😶‍🌫️

Azure OpenAI ServiceでMicrosoft Entra ID (Azure AD)認証を使ってみる (Python)

2023/04/05に公開

はじめに

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 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リソースに対する認証を行えました!より複雑なセキュリティシナリオにも対応可能なためぜひご活用ください。

参考

全体

DefaultAzureCredential class

GitHubで編集を提案
Microsoft (有志)

Discussion