data-infra
Словарь ↗Поиск с учётом прав доступа
Поиск с учётом прав доступа — это построение поисковой системы так, чтобы она возвращала только тот материал, который вправе видеть задающий вопрос, и чтобы это проверялось в момент запроса, а не подразумевалось из того, как собирался индекс. Разница здесь между поисковым слоем, отражающим модель доступа организации, и слоем, который её тихо обходит. Проблема возникает почти случайно. Индекс обычно строит сервисный аккаунт с широкими правами на чтение — это самый простой способ обойти все источники. После векторизации исходные права исчезают: вектор — это не документ с владельцем, а числовой адрес в пространстве, где из всех связей уцелела только близость. Задаёте вопрос — система возвращает ближайшее, а у близости нет мнения о том, имел ли спрашивающий право это читать. Особенно скверно то, что снаружи такой сбой не виден. Ничего не падает. Система бегло отвечает, ссылается на источник, который пользователь не может открыть, и утечку обнаруживают, когда кто-то читает ответ с информацией, явно не предназначенной ему. Зарплатные условия, необъявленные реорганизации и юридические споры — классические примеры именно потому, что это документы из систем, где права настроены строго, а обходчики — нет. Механизм прост, даже если обвязка сложна. Метаданные доступа переезжают вместе с каждым фрагментом в индекс — группы, роли, тенанты или идентификаторы документов, управляющие оригиналом, — а запрос несёт личность спрашивающего, чтобы фильтрация происходила до ранжирования. Фильтровать после ранжирования — распространённое упрощение, и оно неверно дважды: утечка идёт через количество найденного, и результат молча усыхает, так что пользователь с узкими правами получает не лучшие доступные ему фрагменты, а меньше и хуже. Сложное здесь — поддерживать метки в актуальном состоянии. Права меняются постоянно, а индекс — это копия, поэтому отозванный доступ, смена роли или увольнение должны доезжать до индекса, а не только до источника. Большинство решений перепроверяет права в исходной системе в момент ответа, но только для тех немногих документов, которые реально используются, — это по карману ровно потому, что речь о единицах, а не о всём корпусе. Мультиарендные продукты сталкиваются с той же проблемой в более жёсткой форме: ошибка фильтра там пересекает границу клиента, а не внутреннюю. Раздельные индексы или жёсткое разделение по тенантам стоят дополнительной эксплуатационной тяжести, потому что один пропущенный фильтр в общем индексе — это раскрытие данных между клиентами, а запрос, который его вскроет, может быть совершенно невинным.
Похожие термины