close
Skip to main content

BYOK를 사용하는 Azure 관리 ID

GitHub Copilot SDK의 BYOK(사용자 고유의 키 가져오기)은 정적 API 키를 지원하지만 Azure 배포에서는 수명이 긴 키 대신 Microsoft Entra ID(관리 ID)를 사용하는 경우가 많습니다. GitHub Copilot SDK는 유연성을 극대화하기 위해 Azure ID SDK로 구성하도록 설계되었습니다. Azure ID SDK API를 사용하여 요청 시 새 토큰을 가져올 수 있는 전달자 토큰 공급자 콜백을 제공합니다.

이 가이드에서는 Azure ID 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가 해당 콜백을 통해 요청 시 새 토큰을 요청하도록 합니다.

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

코드 샘플

사전 요구 사항

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

코드 언어 navigation

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

토큰 공급자 콜백 사용

GitHub Copilot SDK 런타임에서 제공하는 콜백을 통해 요청 시 새 토큰을 요청하려는 경우 이 방법을 사용합니다. Azure ID 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_URL사용자의 Microsoft Foundry 리소스 URLhttps://<my-resource>.openai.azure.com

API 키 환경 변수가 필요하지 않습니다. 인증은 Azure ID 자격 증명에 의해 처리됩니다. .NET Go, Java, Python 및 TypeScript는 DefaultAzureCredential 자동으로 다음을 지원합니다.

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

.NET, Go, Java, Python 및 TypeScript에서는 ManagedIdentityCredential가 사용자 할당 관리 ID를 선택하기 위해 AZURE_CLIENT_ID를 읽습니다. Rust는 이 가이드의 예외입니다.

Rust에서는 로컬 개발 시 DeveloperToolsCredential를 사용하고 Azure에서 실행할 때는 ManagedIdentityCredential를 사용합니다. 다른 언어의 경우 전체 자격 증명 체인에 대한 DefaultAzureCredential 설명서를 참조하세요.

이 패턴을 사용하는 경우

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

참고하십시오