Condividi tramite


Autenticazione e autorizzazione dei servizi di intelligenza artificiale di Azure con .NET

Le richieste dell'applicazione ai servizi di intelligenza artificiale di Azure devono essere autenticate. In questo articolo vengono esaminate le opzioni disponibili per l'autenticazione in Azure OpenAI e in altri servizi di intelligenza artificiale con .NET. Questi concetti si applicano all'SDK del kernel semantico, nonché agli SDK di servizi specifici, ad esempio Azure OpenAI. La maggior parte dei servizi di intelligenza artificiale offre due modi principali per autenticare app e utenti:

  • L'autenticazione basata su chiave fornisce l'accesso a un servizio di Azure usando i valori della chiave privata. Questi valori segreti sono talvolta noti come chiavi API o chiavi di accesso a seconda del servizio.
  • Microsoft Entra ID offre una soluzione completa di gestione delle identità e degli accessi per garantire che le identità corrette abbiano il livello di accesso corretto alle diverse risorse di Azure.

Le sezioni successive forniscono panoramiche concettuali per questi due approcci, anziché passaggi dettagliati per l'implementazione. Per informazioni più dettagliate sulla connessione ai servizi di Azure, vedere le risorse seguenti:

Nota

Gli esempi in questo articolo si concentrano principalmente sulle connessioni ad Azure OpenAI, ma gli stessi concetti e procedure di implementazione si applicano direttamente a molti altri servizi di Intelligenza artificiale di Azure.

Autenticazione tramite chiavi

Le chiavi di accesso consentono alle app e agli strumenti di eseguire l'autenticazione in un servizio di intelligenza artificiale di Azure, ad esempio Azure OpenAI, usando una chiave privata fornita dal servizio. Recuperare la chiave privata usando strumenti come il portale di Azure o l'interfaccia della riga di comando di Azure e usarla per configurare il codice dell'app per connettersi al servizio di intelligenza artificiale:

builder.Services.AddAzureOpenAIChatCompletion(
    "deployment-model",
    "service-endpoint",
    "service-key"); // Secret key
var kernel = builder.Build();

L'uso delle chiavi è un'opzione semplice, ma questo approccio deve essere usato con cautela. Le chiavi non sono l'opzione di autenticazione consigliata perché:

  • Non seguire il principio dei privilegi minimi, ma forniscono autorizzazioni elevate indipendentemente dagli utenti che li usano o per quale attività.
  • Può essere accidentalmente archiviato nel controllo del codice sorgente o archiviato in posizioni non sicure.
  • Può essere facilmente condiviso con o inviato a parti che non devono avere accesso.
  • Spesso richiedono amministrazione e rotazione manuali.

Prendere invece in considerazione l'uso di Microsoft Entra ID per l'autenticazione, che è la soluzione consigliata per la maggior parte degli scenari.

Autenticazione con Microsoft Entra ID

Microsoft Entra ID è un servizio di gestione delle identità e degli accessi basato sul cloud che offre un ampio set di funzionalità per diversi scenari aziendali e di app. Microsoft Entra ID è la soluzione consigliata per connettersi ad Azure OpenAI e ad altri servizi di intelligenza artificiale e offre i vantaggi seguenti:

  • Autenticazione senza chiave tramite identità.
  • Controllo degli accessi in base al ruolo per assegnare le identità alle autorizzazioni minime necessarie.
  • Può usare la libreria client Azure.Identity per rilevare credenziali diverse negli ambienti senza richiedere modifiche al codice.
  • Gestisce automaticamente le attività di manutenzione amministrativa, ad esempio la rotazione delle chiavi sottostanti.

Il flusso di lavoro per implementare l'autenticazione di Microsoft Entra nell'app include in genere quanto segue:

  • Sviluppo locale:

    1. Accedere ad Azure usando uno strumento di sviluppo locale, ad esempio l'interfaccia della riga di comando di Azure o Visual Studio.
    2. Configurare il codice per l'uso della libreria client e DefaultAzureCredential della classe Azure.Identity.
    3. Assegnare i ruoli di Azure all'account con cui è stato eseguito l'accesso per abilitare l'accesso al servizio di intelligenza artificiale.
  • App ospitata in Azure:

    1. Distribuire l'app in Azure dopo averla configurata per l'autenticazione usando la libreria client Azure.Identity.
    2. Assegnare un'identità gestita all'app ospitata in Azure.
    3. Assegnare i ruoli di Azure all'identità gestita per abilitare l'accesso al servizio di intelligenza artificiale.

I concetti chiave di questo flusso di lavoro vengono esaminati nelle sezioni seguenti.

Eseguire l'autenticazione in Azure in locale

Quando si sviluppano app in locale che si connettono ai servizi di intelligenza artificiale di Azure, eseguire l'autenticazione ad Azure usando uno strumento come Visual Studio o l'interfaccia della riga di comando di Azure. Le credenziali locali possono essere individuate dalla libreria client Azure.Identity e usate per autenticare l'app nei servizi di Azure, come descritto nella sezione Configurare il codice dell'app.

Ad esempio, per eseguire l'autenticazione in Azure in locale usando l'interfaccia della riga di comando di Azure, eseguire il comando seguente:

az login

Configurare il codice dell'app

Usare la libreria client Azure.Identity di Azure SDK per implementare l'autenticazione di Microsoft Entra nel codice. Le librerie Azure.Identity includono la classe DefaultAzureCredential, che individua automaticamente le credenziali di Azure disponibili in base all'ambiente corrente e agli strumenti disponibili. Vedere la documentazione di Azure SDK per .NET per il set completo di credenziali dell'ambiente supportate e l'ordine in cui vengono eseguite le ricerche.

Ad esempio, configurare il kernel semantico per l'autenticazione usando DefaultAzureCredential con il codice seguente:

Kernel kernel = Kernel
    .CreateBuilder()
    .AddAzureOpenAITextGeneration(
        "your-model",
        "your-endpoint",
        new DefaultAzureCredential())
    .Build();

DefaultAzureCredential consente alle app di essere promosse dallo sviluppo locale alla produzione senza modifiche al codice. Durante lo sviluppo, ad esempio, DefaultAzureCredential usa usate le credenziali utente locali da Visual Studio o dall'interfaccia della riga di comando di Azure per eseguire l'autenticazione al servizio di intelligenza artificiale. Quando l'app viene distribuita in Azure, DefaultAzureCredential usa l'identità gestita assegnata all'app.

Assegnare ruoli all'identità

Il controllo degli accessi in base al ruolo di Azure è un sistema che offre una gestione degli accessi con granularità fine delle risorse di Azure. Assegnare un ruolo all'entità di sicurezza usata da DefaultAzureCredential per connettersi a un servizio di intelligenza artificiale di Azure, indipendentemente dal fatto che si tratti di un singolo utente, gruppo, entità servizio o identità gestita. I ruoli di Azure sono una raccolta di autorizzazioni che consentono all'identità di eseguire varie attività, ad esempio generare completamenti o creare ed eliminare risorse.

Assegnare ruoli come l'utente OpenAI di Servizi cognitivi (ID ruolo: 5e0bd9bd-7b93-4f28-af87-19fc36ad61bd) all'identità pertinente usando strumenti come l'interfaccia della riga di comando di Azure, Bicep o il portale di Azure. Ad esempio, usare il comando az role assignment create per assegnare un ruolo usando l'interfaccia della riga di comando di Azure:

az role assignment create \
        --role "5e0bd9bd-7b93-4f28-af87-19fc36ad61bd" \
        --assignee-object-id "$PRINCIPAL_ID" \
        --scope /subscriptions/"$SUBSCRIPTION_ID"/resourceGroups/"$RESOURCE_GROUP" \
        --assignee-principal-type User

Altre informazioni sul controllo degli accessi in base al ruolo di Azure usando le risorse seguenti:

Assegnare un'identità gestita all'app

Nella maggior parte degli scenari, le app ospitate in Azure devono usare un'identità gestita per connettersi ad altri servizi, ad esempio Azure OpenAI. Le identità gestite forniscono un'identità completamente gestita in Microsoft Entra ID per le app da usare per la connessione alle risorse che supportano l'autenticazione di Microsoft Entra. DefaultAzureCredential individua l'identità associata all'app e la usa per eseguire l'autenticazione ad altri servizi di Azure.

Esistono due tipi di identità gestite che è possibile assegnare all'app:

  • Un'identità assegnata dal sistema viene associata all'applicazione e viene eliminata in caso di eliminazione dell'app. A un'app può essere associata una sola identità assegnata dal sistema.
  • Un'identità assegnata dall'utente è una risorsa di Azure autonoma che può essere assegnata all'app. Un'app può avere più identità assegnate dall'utente.

Assegnare ruoli a un'identità gestita esattamente come si farebbe con un singolo account utente, ad esempio il ruolo Utente OpenAI di Servizi cognitivi. Altre informazioni sull'uso delle identità gestite con le risorse seguenti: