Autenticare e autorizzare il servizio app in Azure OpenAI usando Microsoft Entra e l’SDK Semantic Kernel
Questo articolo illustra come usare le identità gestite da Microsoft Entra per autenticare e autorizzare un'applicazione del servizio app a una risorsa OpenAI di Azure.
Questo articolo illustra anche come usare l’SDK Semantic Kernel per implementare facilmente l'autenticazione di Microsoft Entra nell'applicazione .NET.
Usando un'identità gestita di Microsoft Entra, l'applicazione del servizio app può accedere facilmente alle risorse OpenAI di Azure protette senza dover effettuare manualmente il provisioning o ruotare segreti.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- .NET SDK
Microsoft.SemanticKernel
Pacchetto NuGet- Pacchetto NuGet
Azure.Identity
- Creare e distribuire una risorsa del Servizio OpenAI di Azure
- Creare e distribuire un'applicazione .NET nel servizio app
Aggiungere un'identità gestita al Servizio app
All'applicazione possono essere concessi due tipi di identità:
- Un'identità assegnata dal sistema viene associata all'applicazione e viene eliminata in caso di eliminazione dell'app. Un'app può avere 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.
Aggiungere un'identità assegnata dal sistema
- Passare alla pagina dell'app nel portale di Azure e quindi scorrere verso il basso fino al gruppo Impostazioni.
- Selezionare Identità.
- Nella scheda Assegnata dal sistema, impostare Stato su Sì e quindi selezionare Salva.
Eseguire il comando az webapp identity assign
per creare un'identità assegnata dal sistema:
az webapp identity assign --name <appName> --resource-group <groupName>
Aggiungere un'identità assegnata dall'utente
Per aggiungere un'identità assegnata dall'utente all'app, creare l'identità e quindi aggiungerne l'identificatore alla configurazione dell'app.
Creare una risorsa identità gestita assegnata dall'utente seguendo queste istruzioni.
Nel riquadro di spostamento sinistro della pagina dell'app, scorrere verso il basso fino al gruppo Impostazioni.
Selezionare Identità.
Selezionare Assegnata dall'utente>Aggiungi.
Individuare l'identità creata in precedenza, selezionarla e quindi selezionare Aggiungi.
Importante
Dopo aver selezionato Aggiungi, l'app viene riavviata.
Creare un'identità assegnata dall'utente:
az identity create --resource-group <groupName> --name <identityName>
Assegnare l'identità all'app:
az webapp identity assign --resource-group <groupName> --name <appName> --identities <identityId>
Aggiungere un ruolo utente OpenAI di Azure all'identità gestita
- Nel Portale di Azure passare all'ambito a cui si vuole concedere l'accesso ad Azure OpenAI. L'ambito può essere un Gruppo di gestione, una Sottoscrizione, un Gruppo di risorse o una risorsa di Azure OpenAI specifica.
- Nel riquadro di spostamento, sinistro selezionare Controllo di accesso (IAM).
- Selezionare Aggiungi e quindi Aggiungi assegnazione di ruolo.
- Nella scheda Ruolo, selezionare il ruolo Utente OpenAI di Servizi cognitivi.
- Nella scheda Membri, selezionare l'identità gestita.
- Nella scheda Rivedi e assegna selezionare Rivedi e assegna per assegnare il ruolo.
Ambito risorsa
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>"
Ambito del gruppo di risorse
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"
Ambito sottoscrizione
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>"
Ambito del gruppo di gestione
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupName>"
Implementare l'autenticazione basata su token usando l’SDK Semantic Kernel
Inizializzare un oggetto
DefaultAzureCredential
per assumere l'identità gestita dell'app:// Initialize a DefaultAzureCredential. // This credential type will try several authentication flows in order until one is available. // Will pickup Visual Studio or Azure CLI credentials in local environments. // Will pickup managed identity credentials in production deployments. TokenCredential credentials = new DefaultAzureCredential( new DefaultAzureCredentialOptions { // If using a user-assigned identity specify either: // ManagedIdentityClientId or ManagedIdentityResourceId. // e.g.: ManagedIdentityClientId = "myIdentityClientId". } );
Compilare un oggetto
Kernel
che includa il servizio di completamento di chat OpenAI di Azure e usare le credenziali create in precedenza:// Retrieve the endpoint and deployment obtained from the Azure OpenAI deployment. // Must use the deployment name not the underlying model name. IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]!; string deployment = config["AZURE_OPENAI_GPT_NAME"]!; // Build a Kernel that includes the Azure OpenAI Chat Completion Service. // Include the previously created token credential. Kernel kernel = Kernel .CreateBuilder() .AddAzureOpenAIChatCompletion(deployment, endpoint, credentials) .Build();
Usare l'oggetto
Kernel
per richiamare il completamento della richiesta tramite Azure OpenAI:// Use the Kernel to invoke prompt completion through Azure OpenAI. // The Kernel response will be null if the model can't be reached. string? result = await kernel.InvokePromptAsync<string>("Please list three Azure services"); Console.WriteLine($"Output: {result}"); // Continue sending and receiving messages between the user and AI. // ...