- Дата публикации
Как настроить поиск по документам 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:
-
Источник данных — SharePoint Online.
- Подключение через зарегистрированное приложение в Azure AD.
- Доступ к документам и спискам, включая .aspx-страницы.
-
Сбор ACL и меток:
- Из SharePoint выгружаются списки контроля доступа (кто может читать документ).
- При наличии интеграции с Microsoft Purview к документам подтягиваются метки и политики.
-
Индексатор Azure AI Search:
- Создаёт или обновляет индекс в Azure AI Search.
- Записывает в индекс не только содержимое документа, но и поля с ACL/метками.
-
Применение прав при поиске:
- Клиентское приложение отправляет запрос в 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
Подставьте свои значения, но не меняйте имена переменных.
Шаги установки
- Склонируйте репозиторий:
git clone https://github.com/Azure-Samples/azure-search-python-samples.git
cd azure-search-python-samples/document-permissions-examples/sharepoint-acl-aspx-lists
- Создайте и активируйте виртуальное окружение:
python -m venv .venv
source .venv/bin/activate # Linux / macOS
# или
.venv\Scripts\activate # Windows
- Установите зависимости:
pip install -r requirements.txt
- Создайте файл
.envна основеsample.envи заполните его своими значениями:
cp sample.env .env # Linux / macOS
# или вручную создайте .env в Windows
Как запустить
Основная логика работы находится в ноутбуке purview_sharepoint_acl_indexer.ipynb.
- Запустите Jupyter:
jupyter notebook
-
Откройте в браузере
purview_sharepoint_acl_indexer.ipynb. -
Выполните ячейки по порядку:
- Инициализация: загрузка
.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 — используйте их как есть, без сокращений, чтобы не потерять логику работы с правами доступа.