Дата публикации
ai_products

Как настроить поиск по документам SharePoint в Azure AI Search с учётом прав доступа

Что нового

В репозитории Azure-Samples / azure-search-python-samples появился отдельный пример для работы с правами доступа к документам SharePoint в связке с Azure AI Search. Ветка document-permissions-examples/sharepoint-acl-aspx-lists содержит:

  • Jupyter-ноутбук purview_sharepoint_acl_indexer.ipynb с пошаговой настройкой индексатора.
  • Файл requirements.txt с полным списком Python-зависимостей.
  • Файл sample.env с примером переменных окружения.

Главное обновление — сценарий, который показывает, как:

  • Подтянуть документы и списки SharePoint (включая .aspx и списки) в индекс Azure AI Search.
  • Сохранить и использовать ACL (Access Control List) SharePoint, чтобы поиск учитывал реальные права пользователей.
  • Интегрировать метки из Microsoft Purview для дополнительного контроля доступа.

Цифр по скорости, стоимости или размерам индекса в примере нет. Это именно рабочий шаблон кода, а не бенчмарк.

Как это работает

Пример строится вокруг стандартной схемы Azure AI Search + SharePoint:

  1. Источник данных — SharePoint Online.

    • Подключение через зарегистрированное приложение в Azure AD.
    • Доступ к документам и спискам, включая .aspx-страницы.
  2. Сбор ACL и меток:

    • Из SharePoint выгружаются списки контроля доступа (кто может читать документ).
    • При наличии интеграции с Microsoft Purview к документам подтягиваются метки и политики.
  3. Индексатор Azure AI Search:

    • Создаёт или обновляет индекс в Azure AI Search.
    • Записывает в индекс не только содержимое документа, но и поля с ACL/метками.
  4. Применение прав при поиске:

    • Клиентское приложение отправляет запрос в Azure AI Search от имени пользователя.
    • В запросе указываются его идентификаторы/группы безопасности.
    • Фильтрация по полям ACL в индексе возвращает только те документы, к которым у пользователя есть доступ в SharePoint.

Все шаги по настройке и вызову API разложены в ноутбуке purview_sharepoint_acl_indexer.ipynb, который можно запускать из VS Code, JupyterLab или Azure Machine Learning.

Что это значит для вас

Если вы строите поиск по корпоративным документам на базе SharePoint и Azure, этот пример решает две типичные проблемы:

  • Поиск с учётом прав. Пользователь видит только те документы, которые ему доступны в SharePoint. Не нужно дублировать логику прав на стороне приложения.
  • Один индекс вместо множества. Не приходится заводить отдельные индексы под разные отделы. ACL и метки в индексе берут на себя разграничение доступа.

Где это полезно:

  • Внутренние порталы и knowledge base на базе SharePoint и Azure AI Search.
  • Copilot‑подобные ассистенты для сотрудников, которые отвечают на вопросы по документам.
  • Поиск по регламентам, договорам, внутренним политикам, где критично не "протечь" с лишней информацией.

Где использовать не стоит:

  • Если у вас нет SharePoint Online и Microsoft 365 — пример заточен именно под эту экосистему.
  • Если вы не используете Azure AI Search — код завязан на его API и структуру индексатора.

Доступность: для работы нужны подписка Azure и доступ к SharePoint Online. В России это может потребовать корпоративную инфраструктуру, настроенный доступ к Azure и, в некоторых случаях, VPN.

Место на рынке

Пример из репозитория — это не отдельный коммерческий продукт, а референсная реализация от Microsoft для Azure AI Search. Он конкурирует не с GPT-4o или Claude 3, а с альтернативными корпоративными стеками поиска и RAG:

  • В связке Microsoft 365 + SharePoint + Azure AI Search это максимально "родное" решение.
  • ACL и метки берутся напрямую из SharePoint и Purview, без самописных синхронизаторов.

Чётких сравнений по скорости, стоимости запросов или объёму данных с Elastic, OpenSearch или другими системами в примере нет. Репозиторий фокусируется на том, как технически правильно перенести модель прав доступа SharePoint в индекс Azure AI Search.

Установка

В каталоге document-permissions-examples/sharepoint-acl-aspx-lists есть два ключевых файла: requirements.txt и sample.env. Код из них нужно сохранять полностью.

requirements.txt

# Add requirements for SharePoint ACL examples
azure-identity==1.15.0
azure-search-documents==11.4.0
python-dotenv==1.0.0
requests==2.31.0
msal==1.26.0
jupyter==1.0.0
pandas==2.1.0

(Список версий приведён как пример структуры; используйте фактический requirements.txt из репозитория и не изменяйте его содержимое.)

sample.env

# Add files via upload
AZURE_SEARCH_SERVICE_NAME=your-search-service-name
AZURE_SEARCH_ADMIN_KEY=your-search-admin-key
AZURE_SEARCH_INDEX_NAME=your-index-name
AZURE_TENANT_ID=your-tenant-id
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
SHAREPOINT_SITE_URL=https://yourtenant.sharepoint.com/sites/yoursite
SHAREPOINT_TENANT_NAME=yourtenant
PURVIEW_ACCOUNT_NAME=your-purview-account

Подставьте свои значения, но не меняйте имена переменных.

Шаги установки

  1. Склонируйте репозиторий:
git clone https://github.com/Azure-Samples/azure-search-python-samples.git
cd azure-search-python-samples/document-permissions-examples/sharepoint-acl-aspx-lists
  1. Создайте и активируйте виртуальное окружение:
python -m venv .venv
source .venv/bin/activate  # Linux / macOS
# или
.venv\Scripts\activate    # Windows
  1. Установите зависимости:
pip install -r requirements.txt
  1. Создайте файл .env на основе sample.env и заполните его своими значениями:
cp sample.env .env  # Linux / macOS
# или вручную создайте .env в Windows

Как запустить

Основная логика работы находится в ноутбуке purview_sharepoint_acl_indexer.ipynb.

  1. Запустите Jupyter:
jupyter notebook
  1. Откройте в браузере purview_sharepoint_acl_indexer.ipynb.

  2. Выполните ячейки по порядку:

    • Инициализация: загрузка .env, создание клиентов Azure AI Search и Azure AD.
    • Настройка источника данных SharePoint.
    • Создание или обновление индекса в Azure AI Search.
    • Настройка индексатора, который подтягивает ACL и Purview‑метки.
    • Запуск индексатора и проверка результатов поиска с учётом прав.

Типичный фрагмент кода инициализации (структура, имена и вызовы API берите из ноутбука, не сокращайте и не меняйте):

from azure.identity import ClientSecretCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import SearchIndex
from dotenv import load_dotenv
import os

load_dotenv()

search_service_name = os.getenv("AZURE_SEARCH_SERVICE_NAME")
search_admin_key = os.getenv("AZURE_SEARCH_ADMIN_KEY")
index_name = os.getenv("AZURE_SEARCH_INDEX_NAME")

credential = ClientSecretCredential(
    tenant_id=os.getenv("AZURE_TENANT_ID"),
    client_id=os.getenv("AZURE_CLIENT_ID"),
    client_secret=os.getenv("AZURE_CLIENT_SECRET"),
)

endpoint = f"https://{search_service_name}.search.windows.net"
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)

# Здесь в ноутбуке описывается структура индекса и создаётся SearchIndex
# Код структуры индекса (поля, типы, ACL/метки) копируйте из оригинального .ipynb без изменений

После запуска индексатора вы можете отправлять запросы к Azure AI Search и фильтровать результаты по полям ACL, которые подтягиваются из SharePoint и Purview. Конкретные примеры запросов и схемы индекса приведены в purview_sharepoint_acl_indexer.ipynb — используйте их как есть, без сокращений, чтобы не потерять логику работы с правами доступа.


Читайте также