Azure OpenAI에 관리 ID를 사용할 경우의 이점
관리 ID를 사용하는 경우 JavaScript 애플리케이션에서 DefaultAzureCredential 또는 ManagedIdentityCredential 클래스의 인스턴스를 만들 때 사용자 관리 ID의 클라이언트 ID를 지정해야 합니다. 클라이언트 ID 값은 관리 ID가 설정될 때 $AZURE_CLIENT_ID 환경 변수로 설정됩니다.
언뜻 보기에는 엔드포인트 URL을 제외하고 연결에 필요한 유일한 중요한 정보인 것처럼 보일 수 있습니다.
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import { AzureOpenAI } from "openai";
// set environment variable AZURE_CLIENT_ID
const credential = new DefaultAzureCredential();
const scope = "https://cognitiveservices.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
const endpoint = process.env["AZURE_OPENAI_ENDPOINT"] || "<endpoint>";
const deployment = "<your Azure OpenAI deployment name>";
const apiVersion = "2024-05-01-preview";
const options = { azureADTokenProvider, deployment, apiVersion, endpoint }
const client = new AzureOpenAI(options);
유출된 클라이언트 ID와 유출된 API 키의 영향을 평가해 보겠습니다.
API 키는 일반 암호와 유사하게 작동합니다. 손상된 경우 키가 있는 모든 사용자가 리소스에 액세스할 수 있습니다. Azure OpenAI의 경우 GPT-4와 같은 AI 모델의 무제한 사용을 의미합니다. 네트워크에 공개적으로 액세스할 수 있는 경우 보안 영향이 더 클 수 있습니다.
반대로 클라이언트 ID가 유출되면 위험이 최소화됩니다. 클라이언트 ID만으로는 Azure OpenAI에 대한 연결을 설정할 수 없기 때문입니다. 관리 ID를 활용하려면 서비스가 Azure에서 작동해야 하며 Azure OpenAI가 공용인 경우에도 애플리케이션을 사용하여 로컬 환경 또는 네트워크를 통해 연결할 수 없습니다.
또한 관리 ID에 대해 다음 역할 할당이 구성됩니다.
az role assignment create --assignee $USER_MANAGED_ID_PRINCIPAL_ID \
--scope $OPEN_AI_RESOURCE_ID \
--role "Cognitive Services OpenAI User"
이렇게 하면 이 사용자 ID를 사용하여 작업을 수행할 수 있습니다(모듈의 뒷부분에서 자세히 설명). 여기서 Cognitive Services OpenAI 사용자 역할은 Azure OpenAI 서비스에 할당되어 Azure OpenAI 내의 작업에 대한 권한을 제한합니다.
요약하자면, 유출된 API 키의 파급 효과에 비해 유출된 클라이언트 ID를 악용하는 데는 여러 단계가 포함되므로 악의적인 행위자가 악용하기가 더 어려워집니다. 이러한 이유로 관리 ID는 API 키에 비해 작업을 관리하는 더 안전한 방법을 제공합니다. Azure OpenAI 또는 관리 ID를 지원하는 다른 Azure 서비스에 인증할 때, API 키를 사용하는 대신 관리 ID를 사용하는 것이 가장 강력히 추천됩니다.