Поделиться через


Проверка подлинности и авторизация Служба приложений в Azure OpenAI с помощью Microsoft Entra и пакета SDK для семантического ядра

В этой статье показано, как использовать удостоверения, управляемые Microsoft Entra, для проверки подлинности и авторизации приложения Служба приложений в ресурсе Azure OpenAI.

В этой статье также показано, как использовать пакет SDK для семантического ядра для легкой реализации проверки подлинности Microsoft Entra в приложении .NET.

Используя управляемое удостоверение из Microsoft Entra, приложение Служба приложений может легко получить доступ к защищенным ресурсам Azure OpenAI без необходимости вручную подготавливать или менять секреты.

Необходимые компоненты

Добавление управляемого удостоверения в Служба приложений

Приложению можно предоставить два типа удостоверений:

  • Назначаемое системой удостоверение привязывается к приложению и удаляется при удалении приложения. Приложение может иметь только одно удостоверение, назначаемое системой.
  • Назначаемое пользователем удостоверение — это изолированный ресурс Azure, который можно назначить приложению. Приложение может иметь несколько назначаемых пользователем удостоверений.

Добавление назначаемого системой удостоверения

  1. Перейдите на страницу приложения в портал Azure, а затем прокрутите вниз до группы Параметры.
  2. Выберите Удостоверение.
  3. На вкладке "Назначаемая системой" установите переключатель "Состояние включено", а затем нажмите кнопку "Сохранить".

Выполните команду az webapp identity assign, чтобы создать удостоверение, назначаемое системой.

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

Добавление назначаемого пользователем удостоверения

Чтобы добавить удостоверение, назначаемое пользователем, создайте удостоверение и добавьте его идентификатор ресурса в конфигурацию приложения.

  1. Создайте ресурс управляемого удостоверения, назначаемый пользователем, выполнив следующие инструкции.

  2. В левой области навигации страницы приложения прокрутите вниз до группы Параметры.

  3. Выберите Удостоверение.

  4. Выберите "Назначаемое пользователем>" добавление.

  5. Найдите созданное ранее удостоверение, выберите его и нажмите кнопку "Добавить".

    Внимание

    После нажатия кнопки "Добавить" приложение перезапускается.

  1. Создайте назначаемое пользователем удостоверение:

    az identity create --resource-group <groupName> --name <identityName>
    
  2. Назначьте удостоверение приложению:

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

Добавление роли пользователя Azure OpenAI в управляемое удостоверение

  1. На портале Azure перейдите к область, которым требуется предоставить Доступ к Azure OpenAI. Область может быть группой управления, подпиской, группой ресурсов или определенным ресурсом Azure OpenAI.
  2. В области навигации слева выберите элемент управления доступом (IAM).
  3. Нажмите + Добавить и выберите Добавить назначение ролей.
  4. На вкладке "Роль" выберите роль пользователя OpenAI в Cognitive Services.
  5. На вкладке "Члены" выберите управляемое удостоверение.
  6. Чтобы назначить роль, на вкладке Проверка и назначение выберите Проверка и назначение.

Область ресурсов

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

Область группы ресурсов

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

Область подписки

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

Область группы управления

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

Реализация проверки подлинности на основе токенов с помощью пакета SDK для семантического ядра

  1. Инициализировать объект, DefaultAzureCredential чтобы предположить управляемое удостоверение приложения:

    // 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. Kernel Создайте объект, включающий службу завершения чата Azure OpenAI, и используйте ранее созданные учетные данные:

    // 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. Kernel Используйте объект для вызова завершения запроса с помощью 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.
    // ...