Skip to main content

BYOK를 사용하는 Azure 관리 ID

Copilot SDK의 BYOK(사용자 고유의 키 가져오기)은 정적 API 키를 허용하지만 Azure 배포에서는 수명이 긴 키 대신 Microsoft Entra ID(관리 ID)를 사용하는 경우가 많습니다. SDK는 기본적으로 Microsoft Entra 인증을 지원하지 않으므로 공급자 구성 필드를 통해 수명이 짧은 전달자 토큰을 bearer_token 사용할 수 있습니다.

이 가이드에서는 Azure ID 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시간 동안 유효)

다이어그램: 설명된 프로세스를 보여 주는 시퀀스 다이어그램

코드 샘플

사전 요구 사항

언어에 대한 Azure ID 및 Copilot SDK 패키지를 설치합니다.

코드 언어 navigation

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

기본 사용법

DefaultAzureCredential를 사용하여 토큰을 가져오고 provider 구성에서 이를 Bearer 토큰으로 전달하세요:

코드 언어 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_URL사용자의 Microsoft Foundry 리소스 URLhttps://<my-resource>.openai.azure.com

API 키 환경 변수가 필요하지 않습니다. 인증은 자동으로 지원하는 다음을 DefaultAzureCredential통해 처리됩니다.

  • Azure 호스팅 앱의 경우 관리 ID(시스템 할당 또는 사용자 할당):
  • Azure CLI(az login): 로컬 개발용
  • 환경 변수 (AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET): 서비스 주체의 경우
  • 워크로드 ID: Kubernetes의 경우

DefaultAzureCredential 전체 자격 증명 체인에 대한 설명서를 참조하세요.

이 패턴을 사용하는 경우

ScenarioRecommendation
관리 ID를 사용하는 Azure 호스팅 앱
✅ 이 패턴 사용
기존 Microsoft Entra 서비스 주체를 사용하는 앱
✅ 이 패턴 사용
az login를 사용한 로컬 개발
✅ 이 패턴 사용
정적 API 키를 사용하는 비 Azure 환경
BYOK(사용자 고유의 키 가져오기) 사용
GitHub Copilot 구독 사용 가능
GitHub OAuth 설정 사용

참고하십시오