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


Использование поиска ИИ Azure без ключей

В коде приложения можно настроить бессерверное подключение к поиску ИИ Azure, использующем идентификатор и роли Microsoft Entra для проверки подлинности и авторизации. Запросы приложений к большинству служб Azure должны проходить проверку подлинности с помощью ключей или бессерверных подключений. Разработчики должны уделять внимание тому, чтобы не раскрыть ключи в незащищенном расположении. Любой, кто получает доступ к ключу, может пройти проверку подлинности в службе. Проверка подлинности без ключей обеспечивает улучшенные преимущества управления и безопасности по сравнению с ключом учетной записи, так как для хранения ключа (или строка подключения) нет.

Подключения без ключей включены со следующими шагами:

  • Настройте проверку подлинности.
  • При необходимости задайте переменные среды.
  • Используйте тип учетных данных библиотеки удостоверений Azure для создания клиентского объекта поиска ИИ Azure.

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

Для локальных рабочих нагрузок разработки и рабочей среды необходимо выполнить следующие действия:

Создание ресурса поиска ИИ

Прежде чем продолжить работу с этой статьей, вам потребуется ресурс поиска ИИ Azure. Если у вас нет ресурса, создайте ресурс . Включите управление доступом на основе ролей (RBAC) для ресурса.

Установка клиентской библиотеки удостоверений Azure

Чтобы использовать бессерверный подход, обновите код с поддержкой поиска ИИ с помощью клиентской библиотеки удостоверений Azure.

Установите клиентную библиотеку удостоверений Azure для .NET:

dotnet add package Azure.Identity

Обновление исходного кода для использования DefaultAzureCredential

Библиотека DefaultAzureCredential удостоверений Azure позволяет выполнять тот же код в локальной среде разработки и в облаке Azure. Создайте единые учетные данные и повторно используйте экземпляр учетных данных при необходимости, чтобы воспользоваться преимуществами кэширования маркеров.

Дополнительные сведения о .NET см. в DefaultAzureCredential клиентской библиотеке удостоверений Azure для .NET.

using Azure;
using Azure.Search.Documents;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.Models;
using Azure.Identity;
using System;
using static System.Environment;

string endpoint = GetEnvironmentVariable("AZURE_SEARCH_ENDPOINT");
string indexName = "my-search-index";

DefaultAzureCredential credential = new();
SearchClient searchClient = new(new Uri(endpoint), indexName, credential);
SearchIndexClient searchIndexClient = new(endpoint, credential);

Сервер локальной

Локальная разработка с помощью ролей включает следующие действия.

  • Назначьте личное удостоверение ролям RBAC в определенном ресурсе.
  • Используйте средство, например Azure CLI или Azure PowerShell, для проверки подлинности в Azure.
  • Установите переменные среды для ресурса.

Роли для локальной разработки

Как локальный разработчик, удостоверение Azure должно полностью контролировать операции плоскости данных. Ниже приведены предлагаемые роли:

  • Участник службы поиска, создание объектов и управление ими
  • Участник данных индекса поиска, загрузка индекса
  • Средство чтения данных индексов поиска, запрос индекса

Найдите свое личное удостоверение с помощью одного из следующих средств. Используйте это удостоверение в качестве <identity-id> значения.

  1. Войдите в Azure CLI.

    az login
    
  2. Получите свое личное удостоверение.

    az ad signed-in-user show \
        --query id -o tsv
    
  3. Назначьте роль управления доступом на основе ролей (RBAC) идентификатору группы ресурсов.

    az role assignment create \
        --role "<role-name>" \
        --assignee "<identity-id>" \
        --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
    

Где применимо, замените <identity-id>и <subscription-id><resource-group-name> фактическими значениями.

Проверка подлинности для локальной разработки

Используйте средство в локальной среде разработки для проверки подлинности в удостоверении Azure. После проверки подлинности DefaultAzureCredential экземпляр в исходном коде находит и использует проверку подлинности.

Настройка переменных среды для локальной разработки

Чтобы подключиться к службе "Поиск ИИ Azure", код должен знать конечную точку ресурса.

Создайте переменную среды с именем AZURE_SEARCH_ENDPOINT конечной точки поиска ИИ Azure. Этот URL-адрес обычно имеет формат https://<YOUR-RESOURCE-NAME>.search.windows.net/.

Производственные рабочие нагрузки

Развертывание рабочих нагрузок включает следующие действия.

  • Выберите роли RBAC, которые соответствуют принципу наименьших привилегий.
  • Назначьте роли RBAC рабочему удостоверению в определенном ресурсе.
  • Настройте переменные среды для ресурса.

Роли для рабочих нагрузок

Чтобы создать рабочие ресурсы, необходимо создать управляемое удостоверение , назначаемое пользователем, а затем назначить это удостоверение ресурсам с правильными ролями.

Для рабочего приложения предлагается следующая роль:

Имя роли Артикул
Читатель данных индекса поиска 1407120a-92aa-4202-b7e9-c0e197c71c8f

Проверка подлинности для рабочих нагрузок

Используйте следующий шаблон Bicep для поиска ИИ Azure, чтобы создать ресурс и задать проверку подлинности для .identityId Bicep требует идентификатор роли. Приведенный name в этом фрагменте кода Bicep не является ролью Azure. Это зависит от развертывания Bicep.

// main.bicep
param environment string = 'production'
param roleGuid string = ''

module aiSearchRoleUser 'core/security/role.bicep' = {
    scope: aiSearchResourceGroup
    name: 'aiSearch-role-user'
    params: {
        principalId: (environment == 'development') ? principalId : userAssignedManagedIdentity.properties.principalId 
        principalType: (environment == 'development') ? 'User' : 'ServicePrincipal'
        roleDefinitionId: roleGuid
    }
}

Файл main.bicep вызывает следующий универсальный код Bicep для создания любой роли. Вы можете создать несколько ролей RBAC, например одну для пользователя и другую для рабочей среды. Это позволяет включить среды разработки и рабочей среды в одном развертывании Bicep.

// core/security/role.bicep
metadata description = 'Creates a role assignment for an identity.'
param principalId string // passed in from main.bicep

@allowed([
    'Device'
    'ForeignGroup'
    'Group'
    'ServicePrincipal'
    'User'
])
param principalType string = 'ServicePrincipal'
param roleDefinitionId string // Role ID

resource role 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
    name: guid(subscription().id, resourceGroup().id, principalId, roleDefinitionId)
    properties: {
        principalId: principalId
        principalType: principalType
        roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    }
}

Настройка переменных среды для рабочих нагрузок

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

Создайте переменные среды для развернутого и бессерверного ресурса поиска ИИ Azure:

  • AZURE_SEARCH_ENDPOINT: этот URL-адрес является точкой доступа для ресурса поиска ИИ Azure. Этот URL-адрес обычно имеет формат https://<YOUR-RESOURCE-NAME>.search.windows.net/.
  • AZURE_CLIENT_ID: это удостоверение для проверки подлинности как.