Skip to main content
Select language: current language is Japanese
検索する、または Copilot に質問する
メニューを開く

Copilot SDK での Azure マネージド ID の使用

Azure マネージド ID (Entra ID) を使用して、静的 API キーではなく Azure AI Foundry モデルで GitHub Copilot SDK を認証します。

この機能を使用できるユーザーについて

GitHub Copilot SDK は、すべての Copilot プランで使用できます。

メモ

          Copilot SDK は現在 テクニカル プレビューです。 機能と可用性は変更される場合があります。

Azure デプロイでは、有効期間の長いキーではなく マネージド ID (Entra ID) が使用されることが多いため、 Copilot SDKで BYOK モードを使用するには、追加の手順を実行する必要があります。 SDK では Entra ID 認証がネイティブにサポートされていないため、プロバイダー構成のベアラー トークン フィールド (Python ではbearer_token 、Node.js/TypeScript および .NET では bearerToken ) を介して有効期間の短いベアラー トークンを使用できます。

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

どのように機能するのか

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

  1.        `DefaultAzureCredential`を使用して、`https://cognitiveservices.azure.com/.default` スコープのトークンを取得します。
    
  2. BYOK プロバイダー構成のベアラー トークン フィールドを使用してトークンを渡します (Python ではbearer_token 、Node.js/TypeScript と .NET では bearerToken )。
  3. 有効期限が切れる前にトークンを更新します。 トークンは通常、約 1 時間有効です。

Copilot SDK を使用した Azure マネージド ID の認証フローを示す図。

前提条件

  • Azure AI Foundry リソースがデプロイされた Azure サブスクリプション。
  • インストールされている Azure Identity ライブラリ (Python 用azure-identity 、Node.js用の @azure/identity 、または .NET 用の Azure.Identity )。
  •         Copilot SDK インストールされました。 詳細については、「[AUTOTITLE](/copilot/how-tos/copilot-sdk/sdk-getting-started)」を参照してください。
    

Pythonの例

依存関係のインストール

pip install github-copilot-sdk azure-identity

基本的な使用方法

import asyncio
import os

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

COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"

async def main():
    # Get a token using Managed Identity, Azure CLI, or other credential chain
    credential = DefaultAzureCredential()
    token = credential.get_token(COGNITIVE_SERVICES_SCOPE).token

    foundry_url = os.environ["AZURE_AI_FOUNDRY_RESOURCE_URL"]

    client = CopilotClient()
    await client.start()

    session = await client.create_session(
        on_permission_request=PermissionHandler.approve_all,
        model="gpt-4.1",
        provider={
            "type": "openai",
            "base_url": f"{foundry_url.rstrip('/')}/openai/v1/",
            "bearer_token": token,  # Short-lived bearer token
            "wire_api": "responses",
        },
    )

    response = await session.send_and_wait({"prompt": "Hello from Managed Identity!"})
    print(response.data.content)

    await client.stop()

asyncio.run(main())
          `AZURE_AI_FOUNDRY_RESOURCE_URL`を、Azure AI Foundry リソース URL (`https://myresource.openai.azure.com` など) を保持する環境変数に置き換えます。

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

ベアラー トークンは、約 1 時間後に期限切れになります。 サーバーまたは実行時間の長いエージェントの場合は、各セッションを作成する前にトークンを更新します。

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

COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"

class ManagedIdentityCopilotAgent:
    """Copilot agent that refreshes Entra ID tokens for Azure AI Foundry."""

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

    def _get_provider_config(self) -> dict:
        """Build a provider config dict with a fresh bearer token."""
        token = self.credential.get_token(COGNITIVE_SERVICES_SCOPE).token
        return {
            "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
        provider = self._get_provider_config()
        session = await self.client.create_session(
            on_permission_request=PermissionHandler.approve_all,
            model=self.model,
            provider=provider,
        )

        response = await session.send_and_wait({"prompt": prompt})
        await session.disconnect()

        return response.data.content if response else ""

Node.js/ TypeScript の例

import { DefaultAzureCredential } from "@azure/identity";
import { CopilotClient } from "@github/copilot-sdk";

const credential = new DefaultAzureCredential();
const tokenResponse = await credential.getToken(
    "https://cognitiveservices.azure.com/.default"
);

const client = new CopilotClient();

const session = await client.createSession({
    model: "gpt-4.1",
    provider: {
        type: "openai",
        baseUrl: `${process.env.AZURE_AI_FOUNDRY_RESOURCE_URL}/openai/v1/`,
        bearerToken: tokenResponse.token,
        wireApi: "responses",
    },
});

const response = await session.sendAndWait({ prompt: "Hello!" });
console.log(response?.data.content);

await client.stop();

.NET の例

using Azure.Identity;
using GitHub.Copilot;

var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(
    new Azure.Core.TokenRequestContext(
        new[] { "https://cognitiveservices.azure.com/.default" }));

await using var client = new CopilotClient();
var foundryUrl = Environment.GetEnvironmentVariable("AZURE_AI_FOUNDRY_RESOURCE_URL");

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

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

環境の構成

次の環境変数が必要です。

Variable説明
AZURE_AI_FOUNDRY_RESOURCE_URLAzure AI Foundry リソースの URLhttps://myresource.openai.azure.com

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

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

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

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

シナリオレコメンデーション
マネージド ID を使用した Azure でホストされるアプリこのパターンを使用します。
既存の Azure AD サービス プリンシパルを持つアプリこのパターンを使用します。
          `az login` を使用したローカル開発 | このパターンを使用します。 |

| 静的 API キーを使用する Azure 以外の環境 | 標準の BYOK を使用します。 詳細については、 リポジトリの github/copilot-sdk を参照してください。 | | GitHub Copilot 利用可能なサブスクリプション | GitHub OAuth を使用します。 詳細については、 リポジトリの github/copilot-sdk を参照してください。 |

詳細については、次を参照してください。

Morty Proxy This is a proxified and sanitized view of the page, visit original site.