Skip to main content

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

GitHub Copilot SDK の BYOK (独自のキーを持ち込む) では静的 API キーがサポートされていますが、Azureデプロイでは、有効期間の長いキーではなくマネージド ID (Microsoft Entra ID) が使用されることがよくあります。 GitHub Copilot SDK は、柔軟性を最大限に高めるために、Azure Identity SDK で構成するように設計されています。 Azure Identity SDK API を使用して、オンデマンドで新しいトークンをフェッチできるベアラー トークン プロバイダーコールバックを指定します。

このガイドでは、Azure Identity SDK API を使用して、GitHub Copilot SDK を使用して Microsoft Foundry モデルで認証する方法について説明します。 ほとんどの言語ではDefaultAzureCredentialを使用します。Rust では、DeveloperToolsCredentialをローカルで使用し、AzureでManagedIdentityCredentialします。

どのように機能するのか

Microsoft Foundry の OpenAI 互換エンドポイント (https://<resource-name>.openai.azure.com/openai/v1/) は、静的 API キーの代わりにMicrosoft Entra IDからベアラー トークンを受け入れます。 このガイドでは、GitHub Copilot SDK ランタイムが必要に応じて新しいトークンを要求できるように、トークン プロバイダーのコールバックを使用します。

Pythonを例として使用すると、フローは次のようになります。

  1. お使いの環境に合わせて DefaultAzureCredential を構成します。
  2. DefaultAzureCredential を使用して https://ai.azure.com/.default スコープのトークンを取得するコールバックを、BYOK プロバイダー構成の bearer_token_provider に渡します。
  3. GitHub Copilot SDK は、そのコールバックを介してオンデマンドで新しいトークンを要求できるようにします。

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

コードサンプル

Prerequisites

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

コード言語 navigation

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

トークン プロバイダーコールバックを使用する

この方法は、GitHub Copilot SDK ランタイムが、指定したコールバックを介してオンデマンドで新しいトークンを要求する場合に使用します。 Azure Identity SDK は、トークンのキャッシュと更新のタイミングを処理します。

言語固有の実装を次に示します。

コード言語 navigation

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

DefaultAzureCredential credential = new(
    DefaultAzureCredential.DefaultEnvironmentVariableName);
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}/openai/v1/",
        BearerTokenProvider = async _ =>
        {
            AccessToken token = await credential.GetTokenAsync(
                new TokenRequestContext(["https://ai.azure.com/.default"]));
            return token.Token;
        },
        WireApi = "responses",
    },
});

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

環境構成

変数DescriptionExample
AZURE_TOKEN_CREDENTIALS
Azureで実行する場合は、ManagedIdentityCredentialに設定します。
ローカルで実行する場合は、devまたは開発者ツールの資格情報名 (AzureCliCredential など) に設定します。ManagedIdentityCredential
AZURE_CLIENT_ID
省略可。
Azureで実行する場合は、ManagedIdentityCredentialを使用するときに、ユーザー割り当てマネージド ID のクライアント ID に設定します。 設定されていない場合、Azureはシステム割り当てマネージド ID を使用します。11111111-2222-3333-4444-555555555555
FOUNDRY_RESOURCE_URLMicrosoft Foundry リソースの URLhttps://<my-resource>.openai.azure.com

API キー環境変数は必要ありません。認証はAzure ID 資格情報によって処理されます。 .NET、Go、Java、Python、TypeScript では、DefaultAzureCredentialは自動的に次をサポートします。

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

.NET、Go、Java、Python、TypeScript では、ManagedIdentityCredential は、ユーザー割り当てマネージド ID を選択するために AZURE_CLIENT_ID を読み取ります。 Rust は、このガイドでは例外です。

Rust では、ローカル開発には DeveloperToolsCredential を使用し、Azure で実行する場合は ManagedIdentityCredential を使用します。 その他の言語については、完全な資格情報チェーンの DefaultAzureCredential ドキュメントを参照してください。

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

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

こちらも参照ください