Partager via


Authentifier et autoriser App Service auprès d’Azure OpenAI à l’aide de Microsoft Entra et du Kit de développement logiciel (SDK) de noyau sémantique

Cet article explique comment utiliser les identités managées Microsoft Entra pour authentifier et autoriser une application App Service à une ressource Azure OpenAI.

Cet article montre également comment utiliser le kit de développement logiciel (SDK) de noyau sémantique pour implémenter facilement l’authentification Microsoft Entra dans votre application .NET.

À l’aide d’une identité managée de Microsoft Entra, votre application App Service peut facilement accéder aux ressources Azure OpenAI protégées sans avoir à approvisionner ou à faire pivoter manuellement les secrets.

Prérequis

Ajouter une identité managée à App Service

Deux types d’identité peuvent être accordés à votre application :

  • Une identité attribuée par le système est liée à votre application et est supprimée si votre application est supprimée. Une application ne peut avoir qu’une seule identité affectée par le système.
  • Une identité attribuée par l’utilisateur est une ressource Azure autonome qui peut être assignée à votre application. Une application peut avoir plusieurs identités attribuées par l’utilisateur.

Ajouter une identité affectée par le système

  1. Accédez à la page de votre application dans le portail Azure, puis faites défiler jusqu’au groupe Paramètres.
  2. Sélectionnez Identité.
  3. Sous l’onglet Système affecté, basculez État sur Activé, puis sélectionnez Enregistrer.

Exécutez la commande az webapp identity assign pour créer une identité affectée par le système :

az webapp identity assign --name <appName> --resource-group <groupName>

Ajouter une identité attribuée par l’utilisateur

Pour ajouter une identité affectée par l’utilisateur à votre application, créez l’identité, puis ajoutez son identificateur de ressource à la configuration de votre application.

  1. Créez une ressource d’identité managée affectée par l’utilisateur en suivant ces instructions.

  2. Dans le volet de navigation gauche de la page de votre application, faites défiler vers le bas jusqu’au groupe Paramètres.

  3. Sélectionnez Identité.

  4. Sélectionnez Attribuée par l’utilisateur>Ajouter.

  5. Recherchez l’identité que vous avez créée précédemment, sélectionnez-la, puis sélectionnez Ajouter.

    Important

    Après avoir sélectionné Ajouter, l’application redémarre.

  1. Créez une identité affectée par l’utilisateur :

    az identity create --resource-group <groupName> --name <identityName>
    
  2. Affectez l’identité à votre application :

    az webapp identity assign --resource-group <groupName> --name <appName> --identities <identityId>
    

Ajouter un rôle d’utilisateur Azure OpenAI à votre identité managée

  1. Dans le portail Azure, accédez à l’étendue à laquelle vous souhaitez accorder l’accès à Azure OpenAI. L’étendue peut être un groupe d’administration, abonnement, groupe de ressources ou une ressource Azure OpenAI spécifique.
  2. Dans le volet de navigation gauche, sélectionnez Contrôle d’accès (IAM).
  3. Sélectionnez Ajouter, puis Ajouter une attribution de rôle.
  4. Sous l’onglet Rôle, sélectionnez le rôle utilisateur OpenAI Cognitive Services.
  5. Sous l’onglet Membres, sélectionnez l’identité managée.
  6. Dans l’onglet Passer en revue + affecter, sélectionnez Passer en revue + affecter pour affecter le rôle.

Étendue des ressources

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>"

Étendue du groupe de ressources

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"

Étendue de l’abonnement

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>"

Étendue d’un groupe d’administration

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupName>"

Implémenter l’authentification basée sur des jetons à l’aide du Kit de développement logiciel (SDK) du noyau sémantique

  1. Initialisez un objet DefaultAzureCredential pour supposer l’identité managée de votre application :

    // 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. Générez un objet Kernel qui inclut le service d’achèvement de conversation Azure OpenAI et utilisez les informations d’identification créées précédemment :

    // 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. Utilisez l’objet Kernel pour appeler l’achèvement de l’invite via 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.
    // ...