以前こちらの記事を書きました。
この際には、APIキーを用いてAzure OpenAIにアクセスしましたが、今回はマネージドアイデンティティ(MI)を用いてアクセスします。
こちらの記事が非常に参考になりました。
他のAzureサービスに接続する際に、Databricksノートブックにおけるシームレスかつセキュアな認証のために、Azure MSIの認証ではマネージドサービスアイデンティティ(MSI)を活用します。この手法によって、シークレットやキーボルトの管理の必要性を排除し、自動化を促進し、プロセスをシンプルにします。
こちらも参考にしてます。
警告
本記事で説明している手法では、Azure Databricksワークスペースのすべてのクラスターに対して、Azure OpenAIサービスへのアクセスを許可することになるので、用法に注意してください。
DatabricksのマネージドIDの特定
Azure Portalで、アクセスを許可するAzure Databricksワークスペースにアクセスします。管理対象リソースグループをクリックします。
注意
元記事にはクライアントIDコピーしろとありましたが、マネージドIDはリソースグループ名で特定できるので不要でした。
Azure OpenAIサービスでのアクセス許可
OpenAIサービスにアクセスし、アクセス制御(IAM)でロールの割り当ての追加を選択します。
こちらを参考にCognitive Services OpenAI Contributor
ロールとして追加します。
Assistants APIを使う場合にはCognitive Services OpenAI Contributorロールを付与しなければならない。
マネージドIDを選択し、メンバーを選択するをクリックします。
右のペインで、マネージドIDでユーザー割り当てマネージドID
を選択し、下に表示されるAzure DatabricksワークスペースのリソースグループのマネージドIDを選択します。複数ある場合にはマウスをホバーするとリソースグループ名含めて表示されます。
ノートブックでの動作確認
当該ワークスペースでノートブックを作成して実行します。
%pip install openai --upgrade
%pip install azure-identity
dbutils.library.restartPython()
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
api_version="2024-02-15-preview",
azure_endpoint="<エンドポイントのURL>",
azure_ad_token_provider=token_provider
)
response = client.chat.completions.create(
model="gpt-35",
messages=[
{"role": "system", "content": "あなたは有能なアシスタントです。"},
]
)
print(response.choices[0].message.content)
ありがとうございます!どのようにお手伝いできますか?
これでAPIキーをシークレットやノートブックで保持する必要がなくなります。用法に注意の上ご活用ください。