키 없는 인증 방법
JavaScript용 OpenAI를 Azure 키 없는 인증에서는 관리 ID(Azure 호스팅 코드용) 또는 개발자 Microsoft Entra ID ID(로컬 개발용)를 사용하여 API 키를 하드 코딩하는 대신 인증합니다. 이 작업은 DefaultAzureCredential 라이브러리의 ManagedIdentityCredential 또는 @azure/identity 클래스를 통해 수행되며, 이는 Azure 서비스에 인증하는 데 필요한 전달자 토큰을 가져오는 안전한 방법을 제공합니다. 실제로 작동하는 방법은 다음과 같습니다.
- Azure 환경을 설정합니다. Azure OpenAI 리소스가 생성되고 개발자 ID(로컬 개발용) 또는 관리 ID(Azure 호스팅 코드의 경우)에 리소스에 대한 Azure OpenAI RBAC 역할(예: Cognitive Services OpenAI User)이 부여되었는지 확인합니다.
- 자격 증명을 초기화합니다.
@azure/identity의DefaultAzureCredential클래스 또는ManagedIdentityCredential클래스를 사용하여 토큰을 자동으로 가져옵니다. - 클라이언트 인스턴스를 만듭니다.
openai패키지의AzureOpenAI를endpoint,deployment,apiVersion및getBearerTokenProvider에서 반환된 토큰 공급자로 인스턴스화합니다. - API를 호출합니다. 클라이언트(예:
client.chat.completions.create)를 사용하여 코드에서 비밀을 처리하지 않고도 Azure OpenAI와 안전하게 상호 작용합니다.
다음 샘플에서는 네 단계를 모두 함께 보여 줍니다.
import { AzureOpenAI } from 'openai';
import { getBearerTokenProvider, DefaultAzureCredential } from '@azure/identity';
// Set AZURE_OPENAI_ENDPOINT to the endpoint of your Azure OpenAI resource,
// for example: https://YOUR-RESOURCE-NAME.openai.azure.com/
const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
if (!endpoint) {
throw new Error("Set the AZURE_OPENAI_ENDPOINT environment variable to your Azure OpenAI resource endpoint.");
}
const deployment = '<your Azure OpenAI deployment name>';
const apiVersion = '2024-10-21';
const credential = new DefaultAzureCredential();
const scope = 'https://cognitiveservices.azure.com/.default';
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
// Create an Azure OpenAI client.
const client = new AzureOpenAI({ azureADTokenProvider, endpoint, deployment, apiVersion });
// Call the chat completions API. In the Azure OpenAI client, `model` is the
// name of the deployment, not the underlying model name.
const result = await client.chat.completions.create({
model: deployment,
messages: [{ role: 'user', content: 'Say hello!' }],
});
console.log(result.choices[0].message?.content);
로컬 개발 및 Azure 호스팅 실행
DefaultAzureCredential 로컬 개발 및 Azure 호스팅 환경에서 작동하도록 설계되었습니다. 자격 증명은 그중 하나가 성공할 때까지 자격 증명 유형 체인을 시도합니다.
-
로컬 개발:
AzureCliCredential(az login이후),AzurePowerShellCredential, 및 지원되는 IDE 자격 증명과 같은 자격 증명을 통해 로그인된 개발자 ID를 감지합니다. 개발자 ID에는 대상 리소스에 대한 Azure OpenAI RBAC 역할이 부여되어야 합니다. -
Azure 호스팅 환경: Azure App Service, Azure Functions, Azure Container Apps 또는 Azure Virtual Machines 같은 리소스에서 동일한 코드가 실행되는 경우,
DefaultAzureCredentialManagedIdentityCredential사용하여 해당 리소스에 할당된 관리 ID에 대한 토큰을 가져옵니다. 관리 ID에는 대상 리소스에 대한 Azure OpenAI RBAC 역할이 부여되어야 합니다.
사용자 할당 관리 ID의 경우 환경 변수(또는 자격 증명 옵션 전달AZURE_CLIENT_ID)를 해당 사용자 할당 ID의 클라이언트 ID로 설정합니다managedIdentityClientId. 시스템 할당 관리 ID에는 클라이언트 ID가 필요하지 않습니다. Azure 호스트된 리소스에서 매개 변수가 없는 new DefaultAzureCredential() 충분합니다.