RBAC против изоляции арендаторов: две разные границы безопасности

RBAC и изоляция тенантов решают две разные задачи безопасности в мультитенантных системах. Управление доступом на основе ролей (RBAC) определяет, что разрешено делать аутентифицированному субъекту, например читать заказы, редактировать товары или управлять пользователями. Изоляция тенантов определяет, к данным, ресурсам и контексту выполнения какого тенанта этот субъект имеет доступ. Пользователь может быть корректно аутентифицирован и корректно наделён ролью RBAC, но при этом всё равно столкнуться с нарушением безопасности, если приложение позволяет этой роли работать с ресурсами другого тенанта.
Что на самом деле контролирует RBAC
RBAC — это модель авторизации, в которой разрешения связаны с ролями, а пользователи назначаются на эти роли. Роль выступает административной абстракцией между учётными записями и разрешениями.
Классическая работа NIST по RBAC формализует это через пользователей, роли, разрешения, операции и объекты. Практическая выгода в том, что организация может управлять авторизацией через относительно стабильные должностные или функциональные роли, а не привязывать каждое разрешение напрямую к каждому пользователю.
Роль, например EDITOR, может означать: может читать контент, писать контент и публиковать контент. Роль, например ACCOUNTANT, может означать: может читать данные биллинга, сверять счета и утверждать расчёты.
Что на самом деле контролирует изоляция тенантов
Изоляция тенантов — это набор механизмов, которые не позволяют одному тенанту читать, изменять, влиять или случайно получать ресурсы другого тенанта в общей системе.
Защищаемая граница шире, чем строки в базе данных. Состояние, относящееся к тенанту, может существовать в реляционных таблицах, объектных хранилищах, векторных индексах, кэшах, поисковых индексах, сообщениях очередей, файлах, временных артефактах, фоновых задачах, аналитике, ограничениях скорости и инфраструктурных ресурсах.
Рекомендации AWS по SaaS делают это различие явным: авторизация предоставляет доступ к ресурсам, а изоляция тенантов гарантирует, что эти ресурсы не пересекут границу не того тенанта, даже когда инфраструктура является общей.
Простейший пример
Предположим, Алиса — администратор тенанта A, а Боб — администратор тенанта B. Оба пользователя правомерно обладают одной и той же ролью ADMIN.
RBAC может корректно заключить, что оба пользователя могут выполнить операцию, например users.read. Но когда Алиса запрашивает пользователя с ID 847, приложение всё равно должно проверить, что пользователь 847 принадлежит тенанту A.
Если API проверяет только «у Алисы есть ADMIN» и затем выполняет SELECT * FROM users WHERE id = 847, RBAC сработал, а изоляция тенантов — нет.
Корректное решение об авторизации в мультитенантной среде
Где останавливается простой пример
Реальные системы часто содержат несколько классов идентичностей: пользователи арендаторов, администраторы платформы, фоновые обработчики, интеграции, агенты и кросс-арендаторские операционные сервисы. Некоторые из них законно пересекают границы арендаторов.
Это не устраняет необходимость изоляции. Это означает, что кросс-арендаторские полномочия должны быть явными, узкими и отдельно проверяемыми, а не возникать случайно из глобальной роли или неограниченного подключения к базе данных.
Изоляция арендаторов также может различаться по уровням. Продукт может совместно использовать серверы приложений, разделяя базы данных, или использовать общую базу данных с политиками на уровне строк, предоставляя премиум-арендаторам изолированное хранилище или вычислительные ресурсы. Не существует единой универсальной топологии изоляции.
RBAC против изоляции арендаторов
Два разных измерения безопасности
| RBAC | Изоляция арендаторов | |
|---|---|---|
| Основной вопрос | ||
| Типичная единица | ||
| Пример | ||
| Типичный сбой | ||
| Типичная реализация | ||
| Может ли существовать отдельно? |
Аутентификация, авторизация и изоляция — это три разные проверки
| Уровень | Вопрос | Пример сбоя |
|---|---|---|
| Аутентификация | Кто этот субъект? | Злоумышленник выдает себя за Алису |
| Авторизация / RBAC | Может ли этот субъект выполнить эту операцию? | Наблюдатель может удалять пользователей |
| Изоляция арендаторов | Может ли эта операция достичь границы этого арендатора/ресурса? | Администратор арендатора A читает заказ арендатора B |
Эти проверки связаны, но не взаимозаменяемы. Аутентификация может быть идеальной, а авторизация — нет. Авторизация может быть корректной, а изоляция арендаторов — нет. Безопасный путь запроса в SaaS требует всех применимых границ.
Ролям нужна область действия
Слово ADMIN неполно без области действия. Оно может означать администратора платформы, администратора арендатора, администратора проекта, администратора рабочего пространства или администратора одной подсистемы.
В мультитенантных системах назначение роли обычно должно быть связано с членством в арендаторе или другой явной областью ресурса. Один и тот же пользователь может законно быть ADMIN в арендаторе A и VIEWER в арендаторе B.
Глобальная модель ролей, игнорирующая это различие, может создавать утечку привилегий, даже когда сама карта разрешений корректна.
Контекст арендатора должен поступать из доверенного источника
Идентификатор арендатора, предоставленный клиентом, полезен как селектор, но не является доказательством полномочий. Сервер должен выводить или проверять членство в арендаторе на основе аутентифицированной идентичности и текущих данных авторизации.
Текущие рекомендации OWASP по мультитенантности советуют устанавливать контекст арендатора на раннем этапе жизненного цикла запроса и явно предупреждают против рассмотрения клиентских заголовков или параметров запроса как доказательства авторизации.
Это важно, потому что тривиальное изменение запроса с tenant=A на tenant=B не должно быть достаточным для пересечения границы изоляции.
Область арендатора должна быть в поиске ресурса
Распространённый паттерн изоляции на уровне приложения — включать область арендатора в тот же запрос, который разрешает ресурс.
| Слабый поиск | Более строгий поиск с областью арендатора |
|---|---|
| findFirst({ where: { id } }) | findFirst({ where: { id, tenantId } }) |
| UPDATE orders SET ... WHERE id = ? | UPDATE orders SET ... WHERE id = ? AND tenant_id = ? |
| cache.get('user:' + id) | cache.get('tenant:' + tenantId + ':user:' + id) |
Этот паттерн не является единственным возможным механизмом изоляции, но он удерживает принадлежность арендатору рядом с операцией доступа к данным и предотвращает превращение идентификатора объекта в межарендаторскую возможность.
Проверки на уровне приложения полезны, но изоляция не должна зависеть от идеального поведения разработчика
Руководство AWS по изоляции явно предостерегает от того, чтобы оставлять обеспечение изоляции только на разработчиков сервисов. В большой кодовой базе в конце концов один запрос, ключ кэша или путь воркера может пропустить область арендатора.
Поэтому эшелонированная защита может перенести изоляцию в общее промежуточное ПО, слои репозиториев/сервисов, движки политик, безопасность на уровне строк базы данных, выделенные учётные данные, отдельные схемы или отдельные базы данных в зависимости от риска и архитектуры.
Стратегии изоляции баз данных
| Стратегия | Граница | Сила / компромисс |
|---|---|---|
| Общие таблицы + ключ арендатора | Политика на уровне строк/приложения | Операционно эффективно; требует исчерпывающего ограничения областью арендатора и строгих тестов |
| Общие таблицы + RLS базы данных | Граница политики базы данных | Снижает зависимость от каждого запроса приложения; требует правильных ролей, контекста арендатора сессии/транзакции и покрытия политиками |
| Отдельные схемы | Граница пространства имён / роли БД | Более сильное логическое разделение; больше операционной сложности |
| Отдельные базы данных | Граница базы данных / учётных данных | Сильная изоляция и более простая история радиуса поражения; выше затраты на предоставление и эксплуатацию |
| Отдельная инфраструктура/аккаунт | Граница инфраструктуры | Самое сильное крупнозернистое разделение; самые высокие затраты и операционные накладные расходы |
| Гибрид | По рабочей нагрузке/классу данных | Позволяет более сильную изоляцию только там, где риск/соответствие требованиям это оправдывает |
Текущая шпаргалка OWASP по безопасности мультиарендаторных систем перечисляет отдельные базы данных, отдельные схемы, общие таблицы с контролем на уровне строк и гибридные модели. Правильная модель зависит от уровня угрозы, соответствия требованиям, производительности и операционных затрат.
Безопасность на уровне строк PostgreSQL может обеспечить эшелонированную защиту
При общих таблицах безопасность на уровне строк PostgreSQL может обеспечить предикат арендатора на уровне базы данных, чтобы обычные запросы не могли видеть строки вне политики активного арендатора.
Однако RLS — не магия. Суперпользователи PostgreSQL и роли с BYPASSRLS могут обходить политики строк. Поэтому OWASP рекомендует использовать роль с минимальными привилегиями для пути запроса и тестировать тот же режим соединения/пула, который используется в продакшене.
Повторное использование соединений — ещё один важный крайний случай: контекст арендатора должен безопасно устанавливаться и сбрасываться для каждой транзакции/запроса, чтобы одно соединение из пула не могло раскрыть предыдущее состояние арендатора.
Изоляция арендаторов должна включать кэши
Запрос к базе данных может быть идеально ограничен по области, но всё равно раскрыть данные через общий ключ кэша.
Если user:42 существует и в Арендаторе A, и в Арендаторе B, глобальный ключ кэша может вернуть значение не того арендатора. Ключи кэша, чувствительные к арендатору, должны включать каждый атрибут, который меняет видимость или семантику результата, обычно арендатора, пользователя, локаль, набор функций или версию разрешений.
Разделение кэша — это эшелонированная защита, а не замена авторизации. Запрос всё ещё должен быть авторизован до возврата защищённого кэшированного содержимого.
Файлы и объектное хранилище нуждаются в собственной границе арендатора
Объектное хранилище должно различать глобальные, привязанные к арендатору и привязанные к пользователю объекты. Префикс папки сам по себе является лишь соглашением об именовании, если политика доступа фактически не ограничивает чтение и запись.
Более строгие архитектуры могут использовать ключи объектов с учётом арендатора, политики бакетов, отдельные бакеты/аккаунты или ключи шифрования для конкретного арендатора, когда риск или требования соответствия требуют более сильной изоляции.
Подписанные URL должны быть авторизованы до выдачи и ограничены точным объектом и операцией. Наличие идентификатора объекта само по себе не должно предоставлять доступ между арендаторами.
Фоновые задачи и очереди могут нарушить изоляцию
Асинхронные задачи часто покидают исходный контекст HTTP-запроса, что затрудняет корректную передачу арендатора. Сообщение в очереди, содержащее tenantId, не является достаточным доказательством того, что производитель был авторизован.
Воркер должен нести проверенную идентичность сервиса/пользователя или доверенный конверт задачи, заново устанавливать контекст арендатора и повторно авторизовывать значимые операции на границе потребителя.
Изоляция арендаторов также включает доступность. Один арендатор не должен иметь возможности монополизировать общие воркеры, очереди, пулы соединений или вычислительные ресурсы способами, которые существенно ухудшают работу других арендаторов.
Поиск и RAG нуждаются в извлечении с учётом арендатора
Мультитенантный ИИ вводит ещё одну копию проблемы изоляции. Документы могут быть разбиты на фрагменты, преобразованы в эмбеддинги и сохранены в векторном индексе после приёма.
Текущее руководство OWASP по безопасности RAG утверждает, что контроль доступа должен применяться во время извлечения и что фрагменты от Арендатора A не должны извлекаться запросами от Арендатора B. Нельзя просто предполагать, что разрешения на уровне документа автоматически сохраняются при разбиении на фрагменты.
Таким образом, векторный индекс нуждается в метаданных арендатора/доступа или физически/логически разделённых коллекциях в соответствии с архитектурой изоляции. Фильтры извлечения должны применяться до того, как неавторизованный контент сможет попасть в контекст модели.
Производные данные наследуют чувствительность арендатора
Эмбеддинги, поисковые индексы, миниатюры, сгенерированные резюме, кэши, строки аналитики и ответы ИИ являются производными от исходных данных. Их область арендатора должна следовать за источником, если только явное преобразование не создаёт законный общий/глобальный артефакт.
Удаление и отключение поэтому должны распространяться за пределы канонической строки. Удаление документа арендатора с сохранением доступных для поиска фрагментов или кэшированных резюме может сохранить межарендаторское или послерetенционное воздействие.
Не всё принадлежит арендатору
Мультитенантные платформы часто имеют намеренно глобальные ресурсы: таксономии продуктов, публичные шаблоны, системные разрешения, определения функций или публичный контент.
Самая безопасная модель — это явная классификация: глобальная, ограниченная арендатором, ограниченная пользователем или явно кросс-арендаторская. Именно неоднозначные ресурсы становятся отправной точкой случайной утечки.
У намеренно общего объекта должна быть документированная причина быть глобальным, а не просто отсутствие привязки к арендатору.
Администраторы платформы требуют иной модели полномочий
Оператору платформы может потребоваться проверять несколько арендаторов для поддержки, соответствия требованиям или инфраструктурных операций. Моделирование этого как обычного ADMIN арендатора со случайным глобальным доступом к базе данных ослабляет как безопасность, так и возможность аудита.
Лучший дизайн использует отдельную идентичность платформы или явное кросс-арендаторское разрешение, усиленную аутентификацию, ограничение цели, детальный аудит и, где это уместно, элементы управления одобрением или экстренным доступом.
Таким образом, кросс-арендаторский доступ должен быть именованной возможностью, а не отсутствием фильтра арендатора.
RBAC можно комбинировать с атрибутами
Некоторые решения зависят не только от роли. Членство в арендаторе, регион, владелец ресурса, уровень подписки, время, членство в проекте или классификация данных — всё это может влиять на доступ.
RBAC и ABAC не являются взаимоисключающими. Текущее руководство AWS по мультиарендаторской авторизации рассматривает RBAC, ABAC и гибридные модели. Роль может определять широкую ответственность, в то время как атрибуты ограничивают, к какому конкретному экземпляру ресурса можно получить доступ.
Ключевое архитектурное правило остаётся неизменным: не кодируйте изоляцию арендаторов только как случайное имя роли, если идентичность арендатора является первостепенной границей ресурса.
Решения об авторизации как минимум двумерны
| Субъект | Разрешение роли | Отношение арендатора | Решение |
|---|---|---|---|
| Алиса | orders.read | Заказ принадлежит арендатору Алисы | Разрешить |
| Алиса | orders.read | Заказ принадлежит другому арендатору | Запретить |
| Алиса | orders.write | Заказ принадлежит арендатору Алисы | Разрешить, если роль включает запись |
| Алиса | orders.write | Заказ принадлежит другому арендатору | Запретить |
| Поддержка платформы | support.cross_tenant.read | Явная область поддержки + аудируемый целевой арендатор | Потенциально разрешить в рамках политики платформы |
| Фоновый обработчик | orders.process | Доверенная область сервиса для арендатора задания | Разрешить только для подтверждённого арендатора задания |
Свидетельство оригинальной реализации: Aaasaasa AI CMS
Сервис RBAC определяет типизированные коды разрешений, такие как cms.content.read, shop.orders.write, billing.reconcile и users.roles. Системные роли отображают эти разрешения в именованные наборы ответственности.
Записи ролей создаются и разрешаются с tenantId. Системные роли обновляются или вставляются с использованием составной идентичности арендатор/код, а список ролей фильтруется по арендатору.
Обновление и удаление роли сначала разрешают роль, используя как ID роли, так и ID арендатора. Назначения ролей пользователям также сохраняются и заменяются в контексте текущего арендатора.
Разрешение разрешений читает явные назначения ролей пользователям с областью, ограниченной как tenantId, так и userId. Это предотвращает автоматическое превращение назначения роли одного арендатора в назначение роли другого арендатора.
На уровне API административные маршруты RBAC разрешают контекст тенанта перед созданием или изменением ролей. Это правильное направление: администрирование разрешений само должно учитывать мультитенантность.
| Наблюдаемый шаблон реализации | Значение для безопасности |
|---|---|
| Типизированные коды разрешений | Словарь операций RBAC явный |
| Сопоставления системных ролей → разрешений | Роли агрегируют разрешения, а не жестко кодируют пользователей |
| Идентичность роли tenantId_code | Одна и та же логическая роль может существовать отдельно для каждого тенанта |
| Поиск роли использует id + tenantId | Изменение роли ограничено тенантом |
| Связь пользователь-роль хранит tenantId | Членство не выводится глобально только из роли |
| Разрешение разрешений использует tenantId + userId | Авторизация оценивается внутри контекста тенанта |
Почему это различие еще важнее для ИИ-агентов
ИИ-агенты могут превратить ошибку в разрешениях в последовательность действий. Если агенту дан широкий инструмент orders.read без принудительного ограничения по тенанту, сбой рассуждения или внедрение промпта может вызвать межтенантные чтения на машинной скорости.
Описания инструментов агента могут упоминать ограничения тенанта, но принудительное применение все равно должно происходить в доверенном слое среды выполнения/сервиса/данных. Инструкции на естественном языке не являются границей авторизации.
То же самое относится к RAG: агент может иметь разрешение на использование инструмента поиска, но серверная часть поиска все равно должна предотвращать возврат запросом Тенанта A фрагментов Тенанта B.
Тестируйте RBAC и изоляцию тенантов отдельно
| Семейство тестов | Что оно должно доказать |
|---|---|
| Тест понижения роли | Пользователь без разрешения не может выполнить операцию даже внутри своего тенанта |
| Тест объекта другого тенанта | Пользователь с правильной ролью все равно не может получить доступ к тому же типу ресурса в другом тенанте |
| Подмена идентификаторов | Изменение ID объекта/тенанта не пересекает границы области |
| Тест списочных/массовых эндпоинтов | Широкие запросы возвращают только авторизованные данные тенанта |
| Тест повторного использования кэша | Два тенанта, использующие переиспользуемые процессы/соединения, никогда не получают кэшированное состояние друг друга |
| Тест роли запроса RLS | Роль производственного запроса не может обойти политики строк |
| Тест асинхронного воркера | Контекст тенанта сохраняется при постановке в очередь и повторно проверяется при потреблении |
| Тест векторного поиска | Запрос Тенанта A никогда не извлекает фрагменты Тенанта B |
| Тест администратора платформы | Межтенантная возможность является явной, узкой и поддающейся аудиту |
| Тест отключения | Данные тенанта и производные индексы/кэши удаляются в соответствии с политикой |
Руководство OWASP по регрессии авторизации специально выделяет тесты границ между тенантами, потому что изменения кода в кэшировании, запросах или общих сервисах могут незаметно нарушить изоляцию, даже если тесты ролей продолжают проходить.
Распространенные режимы отказа
| Режим отказа | Почему он не работает |
|---|---|
| Проверка роли, но не тенанта | Действительная роль становится межтенантным полномочием |
| Доверие tenant ID из запроса | Клиент контролирует селектор изоляции |
| Ограничение UI, но не API | Скрытые кнопки не защищают серверные ресурсы |
| Эндпоинт деталей с учетом тенанта, эндпоинт списка без области | Массовые чтения раскрывают другие тенанты |
| Фильтр тенанта в большинстве запросов | Один забытый путь нарушает границу |
| Глобальные ключи кэша | Правильная изоляция базы данных обходится кэшированными данными |
| Общий векторный индекс без принудительных фильтров метаданных | RAG извлекает фрагменты другого тенанта |
| tenant ID сообщения очереди рассматривается как авторизация | Поддельная или неправильно созданная задача может пересечь границу тенанта |
| Администратор платформы смоделирован как обычный ADMIN | Межтенантная власть становится неявной и трудной для аудита |
| Роль копируется глобально между членствами в тенантах | Пользователь получает разрешения в тенантах, где он никогда не был назначен |
| Отдельные базы данных, но общий привилегированный учетный данные | Приложение все еще может пересекать базы данных, если его учетные данные слишком широки |
| RLS с ролью запроса BYPASSRLS | Политика базы данных существует, но не защищает фактический путь запроса |
| Случайные UUID рассматриваются как изоляция | Трудно угадываемые идентификаторы уменьшают перебор, но не авторизуют доступ |
Распространенные заблуждения
| Заблуждение | Исправление |
|---|---|
| «RBAC обеспечивает изоляцию тенантов». | RBAC управляет разрешениями; изоляция также требует ограничения области тенанта/ресурса. |
| «Если пользователь администратор, проверки тенанта не нужны». | Полномочия администратора все равно должны иметь явную область. |
| «Tenant ID в JWT достаточно». | Он может быть доверенным входом только если проверен и последовательно применяется ко всем защищенным путям ресурсов. |
| «Отдельные базы данных устраняют требования авторизации». | Пользователям все еще нужны разрешения на уровне операций внутри их тенанта. |
| «Столбец tenant_id означает, что система изолирована». | Поле помогает только если пути доступа его применяют. |
| «UUID предотвращают межтенантный доступ». | Непредсказуемые идентификаторы — это эшелонированная защита, а не авторизация. |
| «RLS означает, что код приложения не нуждается в проверках безопасности». | Авторизация приложения, правильные роли БД и покрытие политик все еще важны. |
| «Одна общая векторная БД небезопасна». | Она может быть безопасной, если изоляция может быть обеспечена и проверена; физическое разделение — один из вариантов, а не единственный. |
| «Поддержке платформы нужен глобальный ADMIN». | Межтенантная поддержка должна быть отдельным, ограниченным и поддающимся аудиту полномочием. |
| «Внутренние сервисы могут пропускать проверки тенанта». | Внутренние пути все еще могут быть скомпрометированы или неправильно настроены и должны сохранять контекст тенанта. |
Практическая последовательность проектирования
Проектируйте разрешения и изоляцию как отдельные измерения
Контрольный список RBAC + изоляция тенантов
| Вопрос | Ожидаемый ответ |
|---|---|
| Кто является субъектом? | Аутентифицированная идентичность пользователя/сервиса/агента |
| Какой контекст тенанта применяется? | Проверенное сервером членство или область сервиса |
| Какая операция запрашивается? | Типизированное разрешение или действие политики |
| Имеет ли субъект это разрешение? | Решение роли/политики |
| Кто владеет целевым ресурсом? | Явная классификация тенанта/глобального/пользовательского |
| Соответствует ли область ресурса полномочиям? | Поиск/политика с учетом тенанта |
| Может ли хранилище обойти проверки приложения? | Решение об эшелонированной защите задокументировано |
| Безопасны ли кэши для тенантов? | Ключи/пространства имен и авторизация сохраняют область тенанта |
| Безопасны ли файлы/блобы для тенантов? | Политика объектов и выдача подписанных URL обеспечивают область |
| Безопасны ли асинхронные задачи для тенантов? | Проверенный контекст распространяется и повторно проверяется |
| Безопасны ли RAG/поиск для тенантов? | Изоляция метаданных/коллекций обеспечивается до контекста модели |
| Явны ли межтенантные администраторы? | Отдельные полномочия, средства контроля и аудит |
| Могут ли обычные учетные данные обойти изоляцию? | Нет, или строго задокументированный исключительный путь |
| Автоматизированы ли негативные межтенантные тесты? | Да для каждого соответствующего слоя доступа |
Граничные случаи и ограничения
Пользователь может принадлежать нескольким тенантам. Поэтому текущий тенант должен быть явным контекстом выполнения, а не постоянно выводиться из учетной записи пользователя.
Некоторые ресурсы намеренно используются совместно выбранными тенантами, например пространства для совместной работы или данные консорциума. Это требует явной модели совместного использования; попытка представить, что ресурс принадлежит одному тенанту, и добавление исключений позже обычно создает неоднозначную авторизацию.
Изоляция от шумных соседей связана, но отличается от изоляции конфиденциальности. Тенант может никогда не видеть данные другого тенанта, но при этом исчерпать общие ресурсы CPU, емкость очереди или подключения к базе данных. Поэтому ограничения скорости и квоты ресурсов могут учитывать тенанта как границу доступности.
Физическая изоляция не является автоматически безопасной, если учетные данные плоскости управления или административные пути могут пересекать границы. Логическая изоляция не является автоматически слабой, если политики централизованно применяются, основаны на принципе наименьших привилегий и тщательно протестированы.
Требования к изоляции тенантов могут различаться в зависимости от класса данных. Публичные данные каталога, записи о выставлении счетов и частные документы ИИ могут оправдывать различные границы хранения и шифрования внутри одного SaaS-продукта.
Что могло бы изменить этот ответ?
Конкретная реализация меняется в зависимости от архитектуры: бессерверные API, Kubernetes, PostgreSQL, объектное хранилище, векторные базы данных и движки политик предоставляют разные примитивы изоляции.
Требуемая степень также меняется в зависимости от регулирования, контрактов с клиентами, чувствительности данных, модели угроз и операционного масштаба. Некоторые тенанты могут оправдывать изолированные базы данных или инфраструктуру, в то время как другие используют общие ресурсы.
Концептуальное различие не меняется: разрешение на выполнение операции — это не то же самое, что разрешение на пересечение границы тенанта.
Связанные канонические знания
S01 является предварительным условием безопасности для архитектуры корпоративного ИИ и управления ИИ. Как только инструменты ИИ, RAG или агенты работают с мультитенантными данными, идентичность тенанта должна проходить через извлечение, выполнение инструментов, память, кэши и трассировки аудита.
Это также напрямую связано с агентным ИИ: возможности инструментов и разрешения ролей должны быть ограничены владением тенанта, прежде чем агент сможет читать или изменять бизнес-ресурсы.
Для RAG изоляция тенантов должна применяться до того, как защищенные фрагменты попадут в контекст модели.
Часто задаваемые вопросы
RBAC vs изоляция тенантов: FAQ
В чем разница между RBAC и изоляцией тенантов?
Роль ADMIN автоматически разрешает доступ ко всем тенантам?
Достаточно ли аутентификации для изоляции тенантов?
Следует ли хранить tenantId в JWT?
Нужна ли отдельная база данных для каждого тенанта?
Может ли PostgreSQL RLS заменить фильтры тенантов в коде приложения?
Как RAG должен обеспечивать изоляцию тенантов?
Может ли один пользователь иметь разные роли в разных тенантах?
Какой лучший тест для изоляции тенантов?
Глоссарий
Ключевые термины безопасности мультитенантных систем
- RBAC
- Управление доступом на основе ролей: модель авторизации, которая связывает разрешения с ролями и назначает пользователей или субъектов этим ролям.
- Тенант
- Клиент, организация, рабочее пространство или иной изолированный логический потребитель общей мультитенантной системы.
- Изоляция тенантов
- Механизмы, которые не позволяют одному тенанту получать доступ к ресурсам другого тенанта, изменять их или получать их в общей системе.
- Аутентификация
- Проверка подлинности пользователя, сервиса или иного субъекта.
- Разрешение
- Определённая допустимая операция или возможность, например orders.read или users.write.
- Роль
- Именованная группа разрешений, связанная с ответственностью или функцией.
- ABAC
- Управление доступом на основе атрибутов: авторизация на основе атрибутов субъекта, ресурса, действия или среды.
- Безопасность на уровне строк
- Механизм политик базы данных, который ограничивает, какие строки роль или сессия базы данных может читать или изменять.
- Межтенантный доступ
- Любой путь доступа, при котором субъект, действующий в контексте одного тенанта, достигает ресурсов, принадлежащих другому тенанту.
- Администратор платформы
- Привилегированная операционная учётная запись с явно смоделированными полномочиями, которые могут охватывать несколько тенантов.
- Контекст тенанта
- Проверенная область тенанта, в рамках которой выполняется текущий запрос, задача или операция агента.
Заключение
RBAC и изоляция тенантов — это взаимодополняющие, а не конкурирующие механизмы безопасности. RBAC структурирует операционные разрешения; изоляция тенантов ограничивает границу ресурсов, внутри которой эти разрешения могут применяться.
Поэтому надёжный мультитенантный запрос требует большего, чем «у пользователя есть роль ADMIN». Ему нужны проверенный субъект, проверенный контекст тенанта, разрешённая операция, цель в области тенанта и принудительное применение на каждом уровне ресурсов, который может содержать данные, принадлежащие тенанту.
Самое короткое надёжное правило таково: авторизуйте действие, затем изолируйте область — и никогда не предполагайте, что одно доказывает другое.
Первоисточники и актуальные рекомендации
Приведённые ниже источники подтверждают определение RBAC и актуальные рекомендации по изоляции тенантов. Раздел Aaasaasa AI CMS является оригинальным свидетельством реализации и намеренно ограничен теми шаблонами кода, которые были проверены.
NIST — Role Based Access ControlОбзор NIST моделей RBAC и стандарта INCITS RBAC, включая пользователей, роли, разрешения, операции и объекты.
NIST CSRC — RBAC glossaryАктуальные определения управления доступом на основе ролей в глоссарии NIST как назначения разрешений через роли.
AWS — The isolation mindsetРекомендации AWS по SaaS, явно разграничивающие аутентификацию/авторизацию и изоляцию тенантов и рекомендующие общие механизмы изоляции.
AWS — Multi-tenant authorization FAQАктуальные рекомендации, объясняющие разницу между авторизацией и изоляцией тенантов в SaaS-приложениях.
AWS — Multi-tenant design considerationsАктуальные рекомендации по SaaS, разграничивающие изоляцию тенантов и авторизацию и обсуждающие модели политик авторизации с общим и выделенным размещением.
OWASP — Multi-Tenant Application Security Cheat SheetАктуальные практические рекомендации по контексту тенанта, изоляции баз данных, кэшей, хранилищ, очередей, тестированию и предотвращению межтенантного доступа.
OWASP — RAG Security Cheat SheetАктуальные рекомендации, требующие контроля доступа во время извлечения и изоляции тенантов для мультитенантных векторных хранилищ.
OWASP — Authorization Regression TestingАктуальные рекомендации по тестированию, включая тесты понижения роли и границ между тенантами.
Related Articles

Air-Gapped AI: как работают ИИ-системы без интернета и облачного доступа
AI-системы в изолированной среде запускают модели, RAG и AI-приложения внутри изолированного домена безопасности без зависимости от интернета или облачных сервисов. Узнайте, как модели, данные, обновления и инструменты работают в автономном режиме.

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

Что такое RAG? Самое простое объяснение того, как это работает
RAG звучит сложно, но идея проста: прежде чем ИИ ответит, он сначала находит полезную информацию из источника знаний и передаёт эту информацию языковой модели. В этом руководстве объясняются RAG, LLM, состояние, память и инструменты с помощью одной простой ментальной модели.

MCP: объяснение — что он подключает, чего не делает и где ему место
Протокол контекста модели соединяет приложения ИИ с внешними инструментами, ресурсами и подсказками через стандартную границу клиент-сервер. Узнайте, что делает MCP, чего он не делает и где он вписывается в архитектуру агента.

Источник истины в системах ИИ: откуда на самом деле берутся надёжные знания
Источник истины определяет, какой источник является авторитетным для конкретного факта или состояния. Узнайте, чем он отличается от RAG, происхождения данных, памяти, контекста, векторных баз данных и систем учёта.

Откуда LLM берёт данные? Источники данных RAG в Python
LLM не знает магическим образом о ваших файлах, базах данных или API. Это практическое продолжение серии о RAG показывает на простом Python, как внешние данные становятся извлекаемыми доказательствами: от текстовых файлов и SQL до полнотекстового поиска, эмбеддингов, сборки контекста и финального вызова LLM.

Архитектура ИИ на предприятии: что меняется, когда ИИ приходит в компанию
Архитектура ИИ для предприятий объясняет, как ИИ меняет корпоративные системы в таких областях, как полномочия на данные, идентификация, разрешения, поставщики, риски, управление, оценка, соответствие требованиям и операции.

Когда ИИ должен перестать доверять собственным знаниям? — Триггер извлечения
Модель ИИ не нуждается в поиске для каждого вопроса. Важная проблема — знать, когда её внутренних знаний уже недостаточно. Триггер поиска — это практическая граница принятия решений, которая определяет, когда система ИИ должна перестать полагаться исключительно на знания модели и получить внешние доказательства перед ответом.

Граница достоверности ответа: недостающий слой между релевантностью и надёжными ответами ИИ
Источник может быть релевантным, авторитетным и при этом неверным для задаваемого вопроса. Недостающий слой — применимость: условия, при которых ответ остаётся в силе, и изменения, вынуждающие пересмотреть его. В этой статье вводится понятие «Граница действительности ответа» как паттерн проектирования источников для людей, ИИ-поиска и RAG-систем.

Что такое архитектор ИИ-решений? Границы системы, обязанности и компромиссы
Архитектор решений ИИ превращает бизнес-требования в готовую к производству систему ИИ, охватывающую данные, модели, инструменты, безопасность, среду выполнения, оценку и операции.

Как узнать, действительно ли ИИ-агент использовал правильные доказательства
ИИ-агент может ссылаться на источники и при этом использовать неверные доказательства. В этой статье представлен практический метод проверки обоснованности утверждений, авторитетности источников, применимости, происхождения и того, действительно ли доказательства повлияли на ответ.

Фронтенд- и бэкенд-разработка
Фронтенд- и бэкенд-разработка является неотъемлемой частью веб-разработки и включает в себя создание веб-приложений и веб-сайтов. Фронтенд-разработка сосредоточена на пользовательском интерфейсе, в то время как бэкенд-разработка отвечает за программирование и управление серверной частью.