Condividi tramite


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

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

  1. Passare alla pagina dell'app nel portale di Azure e quindi scorrere verso il basso fino al gruppo Impostazioni.
  2. Selezionare Identità.
  3. Nella scheda Assegnata dal sistema, impostare Stato su 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.

  1. Creare una risorsa identità gestita assegnata dall'utente seguendo queste istruzioni.

  2. Nel riquadro di spostamento sinistro della pagina dell'app, scorrere verso il basso fino al gruppo Impostazioni.

  3. Selezionare Identità.

  4. Selezionare Assegnata dall'utente>Aggiungi.

  5. Individuare l'identità creata in precedenza, selezionarla e quindi selezionare Aggiungi.

    Importante

    Dopo aver selezionato Aggiungi, l'app viene riavviata.

  1. Creare un'identità assegnata dall'utente:

    az identity create --resource-group <groupName> --name <identityName>
    
  2. 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

  1. 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.
  2. Nel riquadro di spostamento, sinistro selezionare Controllo di accesso (IAM).
  3. Selezionare Aggiungi e quindi Aggiungi assegnazione di ruolo.
  4. Nella scheda Ruolo, selezionare il ruolo Utente OpenAI di Servizi cognitivi.
  5. Nella scheda Membri, selezionare l'identità gestita.
  6. 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

  1. 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".
        }
    );
    
  2. 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();
    
  3. 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.
    // ...