Vantaggi dell'uso di un'identità gestita per Azure OpenAI
Quando si usa un'identità gestita, è necessario specificare l'ID client dell'identità gestita dall'utente durante la creazione di un'istanza della classe DefaultAzureCredential o ManagedIdentityCredential nell'applicazione JavaScript. Il valore id client viene stabilito come variabile di ambiente $AZURE_CLIENT_ID quando viene configurata l'identità gestita.
A prima vista, potrebbe sembrare che questa sia l'unica informazione essenziale necessaria per la connessione, a parte l'URL dell'endpoint.
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);
Si valuterà ora l'impatto di un ID client persa rispetto a una chiave API persa.
Una chiave API funziona in modo analogo a una password normale. Se viene compromessa, chiunque abbia la chiave può accedere alla risorsa. Per Azure OpenAI, questo significa un uso illimitato di modelli di intelligenza artificiale come GPT-4. Se la rete è accessibile pubblicamente, l'impatto sulla sicurezza potrebbe essere ancora maggiore.
Viceversa, se l'ID client viene persa, i rischi sono minimi. Questo perché l'ID client da solo non riesce a stabilire una connessione ad Azure OpenAI. Per usare un'identità gestita, il servizio deve funzionare in Azure e, anche se Azure OpenAI è pubblico, non è possibile connettersi da un ambiente locale o attraverso una rete usando un'applicazione.
Inoltre, l'assegnazione di ruolo seguente è configurata per l'identità gestita:
az role assignment create --assignee $USER_MANAGED_ID_PRINCIPAL_ID \
--scope $OPEN_AI_RESOURCE_ID \
--role "Cognitive Services OpenAI User"
In questo modo le azioni possono essere eseguite usando questo ID utente (più avanti nel modulo). In questo caso, il ruolo utente di Servizi cognitivi OpenAI viene assegnato per i servizi di Azure OpenAI, limitando le autorizzazioni alle operazioni all'interno di Azure OpenAI.
In sintesi, rispetto alle ramificazioni di una chiave API trapelata, lo sfruttamento di un ID client trapelato comporta diversi passaggi, rendendo più difficile per gli attori malintenzionati trarne vantaggio. Per questi motivi, le identità gestite offrono un metodo più sicuro per gestire le operazioni rispetto alle chiavi API. Si raccomanda con la massima determinazione di utilizzare l'Identità Gestita invece delle chiavi API quando si esegue l'autenticazione in Azure OpenAI o in qualsiasi altro servizio di Azure che supporta l'Identità Gestita.