Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При создании чат-приложения с использованием модели с дополненной генерацией (RAG) и ваших данных, убедитесь, что каждый пользователь получает ответы, соответствующие его правам доступа. Следуйте инструкциям из этой статьи, чтобы добавить управление доступом к документам в приложение чата.
Авторизованный пользователь: этот пользователь должен иметь доступ к ответам, содержащимся в документах приложения чата.
Неавторизованный пользователь: этот пользователь не должен иметь доступа к ответам из защищенных документов, которые у них нет авторизации для просмотра.
Замечание
В этой статье в качестве основы для примеров и рекомендаций используются один или несколько шаблонов приложений ИИ. Шаблоны приложений искусственного интеллекта предоставляют вам хорошо поддерживаемые эталонные реализации, которые легко развертываться. Они помогают обеспечить высококачественную отправную точку для приложений ИИ.
Обзор архитектуры
Без функции безопасности документов приложение корпоративного чата имеет простую архитектуру с помощью поиска ИИ Azure и Azure OpenAI. Ответ определяется из запросов к службе "Поиск ИИ Azure", где хранятся документы в сочетании с ответом модели Azure OpenAI GPT. В этом простом потоке проверка подлинности пользователя не используется.
Чтобы добавить безопасность документов, необходимо обновить корпоративное приложение чата:
- Добавьте проверку подлинности клиента в приложение чата с помощью Microsoft Entra.
- Добавьте серверную логику для заполнения индекса поиска доступом пользователей и групп.
Поиск azure AI не предоставляет собственные разрешения на уровне документа и не может изменять результаты поиска в индексе по разрешениям пользователя. Вместо этого приложение может использовать фильтры поиска, чтобы убедиться, что документ доступен конкретному пользователю или определенной группе. В индексе поиска каждый документ должен иметь фильтруемое поле, в котором хранятся сведения о пользователе или группе.
Так как авторизация не содержится в службе "Поиск ИИ Azure", необходимо добавить поле для хранения сведений о пользователе или группе, а затем отфильтровать все документы, которые не соответствуют. Для реализации этого метода необходимо выполнить следующие действия.
- Создайте поле управления доступом к документам в индексе, выделенное для хранения сведений о пользователях или группах с доступом к документам.
- Заполните поле управления доступом документа соответствующими сведениями о пользователе или группе.
- Обновите это поле управления доступом всякий раз при изменении разрешений доступа пользователей или групп.
Если обновления индекса запланированы с помощью индексатора, изменения будут обнаружены при следующем запуске индексатора. Если индексатор не используется, необходимо повторно выполнить повторную индексацию вручную.
В этой статье процесс защиты документов в службе "Поиск ИИ Azure" осуществляется с использованием примерных сценариев, которые выполняются администратором поиска. Скрипты связывают один документ с одним удостоверением пользователя. Эти скрипты можно адаптировать, применив собственные требования к безопасности и условиям эксплуатации, чтобы масштабироваться под ваши нужды.
Определение конфигурации безопасности
Решение предоставляет логические переменные среды для включения функций, необходимых для обеспечения безопасности документов в этом примере.
Параметр | Цель |
---|---|
AZURE_USE_AUTHENTICATION |
При установке значения true включается возможность входа пользователей в приложение чата и проверка подлинности через Службу приложений Azure.
Use oid security filter Включается в параметрах разработчика приложения чата. |
AZURE_ENFORCE_ACCESS_CONTROL |
Если задано значение true , требуется проверка подлинности для доступа к документам.
Параметры разработчика для идентификатора объекта (OID) и безопасности группы включены и отключены, чтобы они не могли быть отключены из пользовательского интерфейса. |
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS |
Если задано значение true , этот параметр позволяет прошедшим проверку подлинности пользователям выполнять поиск по документам, у которых нет назначенных элементов управления доступом, даже если требуется управление доступом. Этот параметр следует использовать только в том случае, если AZURE_ENFORCE_ACCESS_CONTROL включен. |
AZURE_ENABLE_UNAUTHENTICATED_ACCESS |
Если задано значение true , этот параметр позволяет пользователям, не прошедшим проверку подлинности, использовать приложение, даже если применяется управление доступом. Этот параметр следует использовать только в том случае, если AZURE_ENFORCE_ACCESS_CONTROL включён. |
Используйте следующие разделы, чтобы понять профили безопасности, поддерживаемые в этом примере. В этой статье настраивается профиль Enterprise.
Корпоративная: обязательная учетная запись + фильтр документов
Каждый пользователь сайта должен войти в систему. Сайт содержит содержимое, общедоступное для всех пользователей. Фильтр безопасности на уровне документа применяется ко всем запросам.
Переменные среды:
AZURE_USE_AUTHENTICATION=true
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
AZURE_ENFORCE_ACCESS_CONTROL=true
Смешанное использование: необязательная учетная запись + фильтр документов
Каждый пользователь сайта может войти. Сайт содержит содержимое, общедоступное для всех пользователей. Фильтр безопасности на уровне документа применяется ко всем запросам.
Переменные среды:
AZURE_USE_AUTHENTICATION=true
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
AZURE_ENFORCE_ACCESS_CONTROL=true
AZURE_ENABLE_UNAUTHENTICATED_ACCESS=true
Предпосылки
Среда контейнера разработки доступна со всеми зависимостями , необходимыми для выполнения этой статьи. Контейнер разработки можно запустить в GitHub Codespaces (в браузере) или локально с помощью Visual Studio Code.
Чтобы использовать эту статью, вам потребуются следующие предварительные требования:
- Подписка Azure. Создайте его бесплатно.
- Разрешения учетной записи Azure: у вашей учетной записи Azure должны быть следующие:
- Разрешение на управление приложениями в идентификаторе Microsoft Entra.
-
Microsoft.Authorization/roleAssignments/write
разрешения, такие как администратор доступа пользователей или владелец.
Требуется больше необходимых компонентов в зависимости от предпочтительной среды разработки.
- GitHub Codespaces (рекомендуется)
- Visual Studio Code
Открытие среды разработки
Используйте следующие инструкции для развертывания предварительно настроенной среды разработки, содержащей все необходимые зависимости для выполнения этой статьи.
- GitHub Codespaces (рекомендуется)
- Visual Studio Code
GitHub Codespaces запускает контейнер разработки, управляемый GitHub, с Visual Studio Code для Web в качестве пользовательского интерфейса. Для наиболее простой среды разработки используйте GitHub Codespaces, чтобы у вас были правильные средства разработчика и зависимости, предварительно установленные для выполнения этой статьи.
Это важно
Все учетные записи GitHub могут использовать GitHub Codespaces до 60 часов бесплатно каждый месяц на двух процессорных ядрах. Дополнительные сведения см. в ежемесячно предоставляемой информации о хранилище и основных часах в GitHub Codespaces.
Запустите процесс, чтобы создать новое пространство кода GitHub в
main
ветви репозитория GitHub Azure-Samples/azure-search-openai-demo GitHub.Щелкните правой кнопкой мыши следующую кнопку и выберите "Открыть ссылку" в новых окнах , чтобы среда разработки и документация была доступна одновременно.
На странице "Создание пространства кода " просмотрите параметры конфигурации пространства кода, а затем выберите "Создать новое пространство кода".
Дождитесь запуска рабочего пространства кода. Этот процесс запуска может занять несколько минут.
В терминале в нижней части экрана войдите в Azure с помощью Интерфейса командной строки разработчика Azure.
azd auth login
Завершите процесс проверки подлинности.
Остальные задачи в этой статье выполняются в контексте этого контейнера разработки.
Получение необходимых сведений с помощью Azure CLI
Получите идентификатор подписки и идентификатор клиента с помощью следующей команды Azure CLI. Скопируйте значение для использования в качестве вашего значения AZURE_TENANT_ID
.
az account list --query "[].{subscription_id:id, name:name, tenantId:tenantId}" -o table
Если вы получаете ошибку о политике условного доступа клиента, вам нужен второй клиент без политики условного доступа.
- Ваш первый тенант, связанный с вашей учетной записью пользователя, используется для переменной среды
AZURE_TENANT_ID
. - Ваш второй тенант, без условного доступа, используется для переменной среды
AZURE_AUTH_TENANT_ID
для доступа к Microsoft Graph. Для клиентов с политикой условного доступа найдите идентификатор второго клиента без политики условного доступа или создайте новый клиент.
Настройка переменных среды
Выполните следующие команды, чтобы настроить приложение для профиля Enterprise .
azd env set AZURE_USE_AUTHENTICATION true azd env set AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS true azd env set AZURE_ENFORCE_ACCESS_CONTROL true
Выполните следующую команду, чтобы задать арендатора, для авторизации пользователя в среде размещенного приложения. Замените
<YOUR_TENANT_ID>
идентификатором клиента.azd env set AZURE_TENANT_ID <YOUR_TENANT_ID>
Замечание
Если у вас есть политика условного доступа в клиенте пользователя, необходимо указать клиент проверки подлинности.
Развертывание приложения чата в Azure
Развертывание состоит из следующих шагов:
- Создайте ресурсы Azure.
- Отправьте документы.
- Создайте приложения управления удостоверениями Microsoft Entra (клиентское и серверное).
- Включите идентификацию для ресурса размещения.
Подготовьте ресурсы Azure и разверните исходный код.
azd up
Используйте следующую таблицу, чтобы ответить на
AZD
запросы на развертывание.Подсказка Ответ Имя среды Используйте короткое имя с информацией, которая идентифицирует, включая ваш псевдоним и приложение. И пример: tjones-secure-chat
.Подписка Выберите подписку, в которой нужно создать ресурсы. Расположение ресурсов Azure Выберите местоположение рядом с вами. Расположение для documentIntelligentResourceGroupLocation
Выберите местоположение рядом с вами. Местоположение для openAIResourceGroupLocation
Выберите местоположение рядом с вами. Подождите 5 или 10 минут после развертывания приложения, чтобы разрешить запуск приложения.
После успешного развертывания приложения в терминале появится URL-адрес.
Выберите URL-адрес, помеченный
(✓) Done: Deploying service webapp
для открытия приложения чата в браузере.Примите всплывающее окно проверки подлинности приложения.
Когда появится приложение чата, обратите внимание на то, что в правом верхнем углу ваш пользователь вошел в систему.
Откройте параметры разработчика и обратите внимание, что оба следующих параметра выбраны и отключены для изменения:
- Использование фильтра безопасности oid
- Использование фильтра безопасности групп
Выберите карточку с надписью Что делает менеджер по продукту?.
Вы получите ответ, например: указанные источники не содержат конкретных сведений о роли диспетчера продуктов в Contoso Electronics.
Открытие доступа к документу для пользователя
Включите права доступа для конкретного документа, чтобы вы могли получить ответ. Вам потребуется несколько фрагментов информации:
- Служба хранилища Azure
- Имя учетной записи
- Имя контейнера
- URL-адрес блоба или документа для
role_library.pdf
- Идентификатор пользователя в идентификаторе Microsoft Entra
Когда эта информация известна, обновите поле индекса поиска oids
ИИ Azure для role_library.pdf
документа.
Получение URL-адреса документа в хранилище
.azure
В папке в корне проекта найдите каталог среды и откройте.env
файл с этим каталогом.AZURE_STORAGE_ACCOUNT
Найдите запись и скопируйте его значение.Используйте следующие команды Azure CLI, чтобы получить URL-адрес BLOB-объекта
role_library.pdf
в контейнереcontent
.az storage blob url \ --account-name <REPLACE_WITH_AZURE_STORAGE_ACCOUNT \ --container-name 'content' \ --name 'role_library.pdf'
Параметр Цель --account-name служба хранилища Azure имя учетной записи. --container-name Имя контейнера в этом примере . content
--имя Имя блоба на этом шаге role_library.pdf
.Скопируйте URL-адрес BLOB для последующего использования.
Получение идентификатора пользователя
- В приложении чата выберите параметры разработчика.
- Скопируйте
objectidentifier
параметр в разделе утверждений маркера идентификатора. Этот параметр известен в следующем разделе какUSER_OBJECT_ID
.
Предоставление пользователю доступа к документу в службе "Поиск Azure"
Используйте следующий скрипт, чтобы изменить поле
oids
в службе "Поиск ИИ Azurerole_library.pdf
" для доступа к нему.python ./scripts/manageacl.py --acl-type oids --acl-action add --acl <REPLACE_WITH_YOUR_USER_OBJECT_ID> --url <REPLACE_WITH_YOUR_DOCUMENT_URL>
Параметр Цель -v Подробные выходные данные. --acl-type Группа или пользовательские идентификаторы OID: oids
.--acl-action Добавить в поле поискового индекса. Другие варианты включают enable_acls
,remove
иremove_all
view
.--acl Группа или пользователь USER_OBJECT_ID
.--url Расположение файла в службе хранилища Azure, например https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf
. Не заключайте URL-адрес кавычками в команде CLI.Выходные данные консоли для этой команды выглядят следующим образом:
Loading azd .env file from current environment... Creating Python virtual environment "app/backend/.venv"... Installing dependencies from "requirements.txt" into virtual environment (in quiet mode)... Running manageacl.py. Arguments to script: -v --acl-type oids --acl-action add --acl 00000000-0000-0000-0000-000000000000 --url https://mystorage.blob.core.windows.net/content/role_library.pdf Found 58 search documents with storageUrl https://mystorage.blob.core.windows.net/content/role_library.pdf Adding acl 00000000-0000-0000-0000-000000000000 to 58 search documents
При необходимости используйте следующую команду, чтобы убедиться, что ваше разрешение указано для файла в службе "Поиск ИИ Azure".
python ./scripts/manageacl.py -v --acl-type groups --acl-action view --url <REPLACE_WITH_YOUR_DOCUMENT_URL>
Параметр Цель -v Подробные выходные данные. --acl-type Идентификаторы группы или пользователя: oids
.--acl-action Просмотр поля индекса поиска oids
. Другие варианты включаютenable_acls
,remove
иremove_all
add
.--url Расположение файла в этом примере, например https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf
. Не заключайте URL-адрес кавычками в команде CLI.Выходные данные консоли для этой команды выглядят следующим образом:
Loading azd .env file from current environment... Creating Python virtual environment "app/backend/.venv"... Installing dependencies from "requirements.txt" into virtual environment (in quiet mode)... Running manageacl.py. Arguments to script: -v --acl-type oids --acl-action view --acl 00000000-0000-0000-0000-000000000000 --url https://mystorage.blob.core.windows.net/content/role_library.pdf Found 58 search documents with storageUrl https://mystorage.blob.core.windows.net/content/role_library.pdf [00000000-0000-0000-0000-000000000000]
Массив, находящийся в конце выходных данных, включает ваш параметр
USER_OBJECT_ID
и используется для определения того, включается ли документ в ответ с использованием Azure OpenAI.
Убедитесь, что Azure AI Search содержит ваш USER_OBJECT_ID
Откройте портал Azure и найдите
AI Search
.Выберите ресурс поиска из списка.
Выберите управление поиском>индексы.
Выберите gptkbindex.
Выберите Вид>JSON.
Замените JSON следующим кодом JSON:
{ "search": "*", "select": "sourcefile, oids", "filter": "oids/any()" }
Этот JSON выполняет поиск всех документов, в которых поле
oids
имеет любое значение, и возвращает поляsourcefile
иoids
.Если у
role_library.pdf
отсутствует ваш OID, вернитесь к разделу Предоставление доступа пользователю к документу в Поиске Azure и выполните шаги.
Проверка доступа пользователей к документу
Если вы выполнили действия, но не видите правильный ответ, убедитесь, что параметр USER_OBJECT_ID
настроен правильно в поиске Azure AI role_library.pdf
.
Вернитесь в приложение чата. Возможно, вам потребуется выполнить вход еще раз.
Введите тот же запрос, чтобы
role_library
содержимое использовалось в ответе Azure OpenAI:What does a product manager do?
Просмотрите результат, который теперь содержит соответствующий ответ из документа библиотеки ролей.
Очистите ресурсы
В следующих шагах описан процесс очистки используемых ресурсов.
Очистка ресурсов Azure
Ресурсы Azure, созданные в этой статье, оплачиваются с вашей подписки Azure. Если вы не ожидаете, что эти ресурсы потребуются в будущем, удалите их, чтобы избежать дополнительных расходов.
Выполните следующую команду Интерфейса командной строки разработчика Azure, чтобы удалить ресурсы Azure и удалить исходный код.
azd down --purge
Очистка GitHub Codespaces и Visual Studio Code
В следующих шагах описан процесс очистки используемых ресурсов.
Удаление среды GitHub Codespaces гарантирует, что вы можете максимально использовать объем бесплатных часовых квот на ядро, предоставляемых для учетной записи.
Это важно
Дополнительные сведения о правах вашей учетной записи GitHub см. в разделе о ежемесячно включенном объеме хранилища и основных часах использования GitHub Codespaces.
Найдите ваши запущенные пространства кода, которые имеют источник из репозитория Azure-Samples/azure-search-openai-demo на GitHub.
Откройте контекстное меню для пространства кода и нажмите кнопку "Удалить".
Получите помощь
Пример репозитория предлагает сведения об устранении неполадок.
Устранение неполадок
В этом разделе рассматриваются и решаются проблемы, специфичные для этой статьи.
Предоставление тентанта проверки подлинности
Если проверка подлинности находится в отдельном клиенте от приложения размещения, необходимо задать этот клиент проверки подлинности следующим образом.
Выполните следующую команду, чтобы настроить образец для использования второго тенанта в качестве тенанта аутентификации.
azd env set AZURE_AUTH_TENANT_ID <REPLACE-WITH-YOUR-TENANT-ID>
Параметр Цель AZURE_AUTH_TENANT_ID
Если AZURE_AUTH_TENANT_ID
задано, это клиент, на котором размещается приложение.Повторно разверните решение с помощью следующей команды:
azd up
Связанный контент
- Создайте чат-приложение с архитектурой решения Azure OpenAI, основанной на лучших практиках.
- Узнайте о управлении доступом в генеративных приложениях ИИ с помощью поиска Azure.
- Создайте корпоративное решение Azure OpenAI готовое для использования на предприятии, с помощьюсистемы управления API Azure.
- См. Azure AI Search: превосходящий векторный поиск благодаря гибридным возможностям извлечения и ранжирования.