1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DatabricksからAzure OpenAIへのアクセスにおけるマネージドIDの活用

Posted at

以前こちらの記事を書きました。

この際には、APIキーを用いてAzure OpenAIにアクセスしましたが、今回はマネージドアイデンティティ(MI)を用いてアクセスします。

こちらの記事が非常に参考になりました。

他のAzureサービスに接続する際に、Databricksノートブックにおけるシームレスかつセキュアな認証のために、Azure MSIの認証ではマネージドサービスアイデンティティ(MSI)を活用します。この手法によって、シークレットやキーボルトの管理の必要性を排除し、自動化を促進し、プロセスをシンプルにします。

こちらも参考にしてます。

警告
本記事で説明している手法では、Azure Databricksワークスペースのすべてのクラスターに対して、Azure OpenAIサービスへのアクセスを許可することになるので、用法に注意してください。

DatabricksのマネージドIDの特定

Azure Portalで、アクセスを許可するAzure Databricksワークスペースにアクセスします。管理対象リソースグループをクリックします。
Screenshot 2024-04-02 at 17.34.19.png

マネージドIDをクリックします。
Screenshot 2024-04-02 at 17.35.52.png

リソースグループをコピーしておきます。
Screenshot 2024-04-02 at 17.53.16.png

注意
元記事にはクライアントIDコピーしろとありましたが、マネージドIDはリソースグループ名で特定できるので不要でした。

Azure OpenAIサービスでのアクセス許可

OpenAIサービスにアクセスし、アクセス制御(IAM)でロールの割り当ての追加を選択します。
Screenshot 2024-04-02 at 17.38.29.png

こちらを参考にCognitive Services OpenAI Contributorロールとして追加します。

Assistants APIを使う場合にはCognitive Services OpenAI Contributorロールを付与しなければならない。

Screenshot 2024-04-02 at 17.59.26.png

マネージドIDを選択し、メンバーを選択するをクリックします。
Screenshot 2024-04-02 at 17.49.19.png

右のペインで、マネージドIDユーザー割り当てマネージドIDを選択し、下に表示されるAzure DatabricksワークスペースのリソースグループのマネージドIDを選択します。複数ある場合にはマウスをホバーするとリソースグループ名含めて表示されます。
Screenshot 2024-04-02 at 17.59.37.png

設定します。反映までに数分のタイムラグがあるようです。
Screenshot 2024-04-02 at 18.07.29.png

ノートブックでの動作確認

当該ワークスペースでノートブックを作成して実行します。

%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キーをシークレットやノートブックで保持する必要がなくなります。用法に注意の上ご活用ください。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?