Skip to main content

BYOK を使用した Azure マネージド ID

Copilot SDK の BYOK (独自のキーを持ち込む) は静的 API キーを受け入れますが、Azureデプロイでは、有効期間の長いキーではなくマネージド ID (Microsoft Entra ID) が使用されることがよくあります。 SDK はMicrosoft Entra認証をネイティブにサポートしていないため、bearer_token プロバイダー構成フィールドを介して有効期間の短いベアラー トークンを使用できます。

このガイドでは、Azure Identity SDK のDefaultAzureCredential API を使用して、Copilot SDK を使用してMicrosoft Foundry モデルで認証する方法について説明します。

どのように機能するのか

Microsoft Foundry の OpenAI 互換エンドポイントは、静的 API キーの代わりにMicrosoft Entra IDからベアラー トークンを受け入れます。 パターンは次のとおりです。

  1. DefaultAzureCredentialを使用して、https://ai.azure.com/.default スコープのトークンを取得する
  2. BYOK プロバイダー構成でトークンを bearer_token として渡す
  3. 有効期限が切れる前にトークンを更新します (通常、トークンは最大 1 時間有効です)

図: 説明されたプロセスを示すシーケンス図。

コードサンプル

Prerequisites

言語のAzure ID とCopilot SDK パッケージをインストールします。

コード言語 navigation

.NET
dotnet add package GitHub.Copilot.SDK
dotnet add package Azure.Core

基本的な使用方法

DefaultAzureCredentialを使用してトークンを取得し、プロバイダー構成でベアラー トークンとして渡します。

コード言語 navigation

.NET
using Azure.Core;
using Azure.Identity;
using GitHub.Copilot;

DefaultAzureCredential credential = new(
    DefaultAzureCredential.DefaultEnvironmentVariableName);
AccessToken token = await credential.GetTokenAsync(
    new TokenRequestContext(new[] { "https://ai.azure.com/.default" }));

await using CopilotClient client = new();
string? foundryUrl = Environment.GetEnvironmentVariable("FOUNDRY_RESOURCE_URL");

await using CopilotSession session = await client.CreateSessionAsync(new SessionConfig
{
    Model = "gpt-5.5",
    Provider = new ProviderConfig
    {
        Type = "openai",
        BaseUrl = $"{foundryUrl!.TrimEnd('/')}/openai/v1/",
        BearerToken = token.Token,
        WireApi = "responses",
    },
});

AssistantMessageEvent? response = await session.SendAndWaitAsync(
    new MessageOptions { Prompt = "Hello from Managed Identity!" });
Console.WriteLine(response?.Data.Content);

実行時間の長いアプリケーションのトークン更新

ベアラー トークンの有効期限が切れます (通常は約 1 時間後)。 サーバーまたは実行時間の長いエージェントの場合は、各セッションを作成する前にトークンを更新します。 次のPython例は、このパターンを示しています。

from azure.identity import DefaultAzureCredential
from copilot import CopilotClient
from copilot.session import PermissionHandler, ProviderConfig

SCOPE = "https://ai.azure.com/.default"

class ManagedIdentityCopilotAgent:
    """Copilot agent that refreshes Microsoft Entra tokens for Microsoft Foundry."""

    def __init__(self, foundry_url: str, model: str = "gpt-5.5"):
        self.foundry_url = foundry_url.rstrip("/")
        self.model = model
        self.credential = DefaultAzureCredential(require_envvar=True)
        self.client = CopilotClient()

    def _get_provider_config(self) -> ProviderConfig:
        """Build a ProviderConfig with a fresh bearer token."""
        token = self.credential.get_token(SCOPE).token
        return ProviderConfig(
            type="openai",
            base_url=f"{self.foundry_url}/openai/v1/",
            bearer_token=token,
            wire_api="responses",
        )

    async def chat(self, prompt: str) -> str:
        """Send a prompt and return the response text."""
        # Fresh token for each session
        session = await self.client.create_session(
            on_permission_request=PermissionHandler.approve_all,
            model=self.model,
            provider=self._get_provider_config(),
        )

        response = await session.send_and_wait(prompt)
        await session.disconnect()

        return response.data.content if response else ""

環境構成

変数DescriptionExample
AZURE_TOKEN_CREDENTIALS
Azureで実行する場合は、ManagedIdentityCredentialに設定します。
ローカルで実行する場合は、devまたは開発者ツールの資格情報名 (AzureCliCredential など) に設定します。ManagedIdentityCredential
FOUNDRY_RESOURCE_URLMicrosoft Foundry リソースの URLhttps://<my-resource>.openai.azure.com

API キー環境変数は必要ありません。認証は DefaultAzureCredentialによって処理され、自動的にサポートされます。

  • 管理 ID (システム割り当てまたはユーザー割り当て): Azureホストされているアプリの場合
  • Azure CLI (az login): ローカル開発用
  • 環境変数AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_CLIENT_SECRET): サービス プリンシパル用
  • ワークロード アイデンティティ: Kubernetes 向け

完全な資格情報チェーンについては、 DefaultAzureCredential ドキュメントを参照してください。

このパターンを使用する場合

シナリオレコメンデーション
マネージド ID を使用した Azure でホストされるアプリ
✅ このパターンを使用する
既存のMicrosoft Entra サービス プリンシパルを持つアプリ
✅ このパターンを使用する
az login を使用したローカル開発
✅ このパターンを使用する
静的 API キーを使用する Azure 以外の環境
AUTOTITLE を使用する
利用可能なGitHub Copilot サブスクリプション
AUTOTITLE を使用する

こちらも参照ください