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

RBAC определяет, что пользователь может делать; изоляция тенантов определяет, к ресурсам какого тенанта это действие может получить доступ. Узнайте, почему безопасность многотенантного SaaS требует обеих границ.
Опубликовано:
Aleksandar Stajić
Обновлено: 8 октября 2026 г. в 20:56
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 сработал, а изоляция тенантов — нет.

Корректное решение об авторизации в мультитенантной среде

1
1. Аутентифицировать субъект
Установить, кто является пользователем, сервисом или агентом.
2
2. Определить проверенный контекст тенанта
Определить, какой контекст тенанта применяется, на основе доверенной серверной информации об идентичности и членстве.
3
3. Определить разрешение
Оценить, разрешает ли роль или политика субъекта запрошенную операцию.
4
4. Ограничить целевой ресурс рамками
Проверить, что целевой объект принадлежит разрешённому тенанту или явно общему пространству.
5
5. Обеспечить соблюдение на границе доступа
Выполнить операцию с базой данных, кэшем, хранилищем, очередью или сервисом с применением ограничений тенанта.
6
6. Аудит обоих измерений
Записывать субъект, тенант, операцию, цель и результат, чтобы межтенантные попытки были видны.

Где останавливается простой пример

Реальные системы часто содержат несколько классов идентичностей: пользователи арендаторов, администраторы платформы, фоновые обработчики, интеграции, агенты и кросс-арендаторские операционные сервисы. Некоторые из них законно пересекают границы арендаторов.

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

Изоляция арендаторов также может различаться по уровням. Продукт может совместно использовать серверы приложений, разделяя базы данных, или использовать общую базу данных с политиками на уровне строк, предоставляя премиум-арендаторам изолированное хранилище или вычислительные ресурсы. Не существует единой универсальной топологии изоляции.

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».Межтенантная поддержка должна быть отдельным, ограниченным и поддающимся аудиту полномочием.
«Внутренние сервисы могут пропускать проверки тенанта».Внутренние пути все еще могут быть скомпрометированы или неправильно настроены и должны сохранять контекст тенанта.

Практическая последовательность проектирования

Проектируйте разрешения и изоляцию как отдельные измерения

1
1. Определите владение тенантом
Классифицируйте, какие сущности и ресурсы являются глобальными, ограниченными тенантом, ограниченными пользователем или намеренно межтенантными.
2
2. Определите операции
Создайте явные разрешения для чтения, записи, публикации, утверждения, администрирования и других бизнес-действий.
3
3. Определите роли
Группируйте разрешения в соответствии с обязанностями, не встраивая случайную глобальную область.
4
4. Определите область членства
Привяжите назначения ролей к контексту тенанта/рабочего пространства/проекта, в котором они применяются.
5
5. Разрешите доверенный контекст тенанта
Выводите идентичность тенанта из аутентифицированного, проверенного сервером членства или авторизации сервиса.
6
6. Обеспечьте владение ресурсами
Применяйте область тенанта на каждой границе данных/сервиса, принадлежащих тенанту.
7
7. Добавьте эшелонированную защиту
Используйте RLS, отдельные учетные данные, схемы/базы данных, политики хранения или движки политик там, где риск это оправдывает.
8
8. Переносите область через производные системы
Сохраняйте метаданные тенанта в кэше, поиске, векторных индексах, очередях, файлах и аналитике.
9
9. Моделируйте межтенантные операции явно
Отделяйте администрирование платформы и идентичности сервисов от обычных ролей тенанта.
10
10. Тестируйте обе оси
Запускайте негативные тесты для отсутствующего разрешения и для неправильного тенанта независимо.
11
11. Аудит тенанта + разрешения вместе
Регистрируйте, кто действовал, в каком тенанте, над какой целью и под какими полномочиями.
12
12. Повторно тестируйте после изменений схемы/среды выполнения
Изоляция может нарушиться при введении новых таблиц, кэшей, очередей или путей поиска.

Контрольный список RBAC + изоляция тенантов

ВопросОжидаемый ответ
Кто является субъектом?Аутентифицированная идентичность пользователя/сервиса/агента
Какой контекст тенанта применяется?Проверенное сервером членство или область сервиса
Какая операция запрашивается?Типизированное разрешение или действие политики
Имеет ли субъект это разрешение?Решение роли/политики
Кто владеет целевым ресурсом?Явная классификация тенанта/глобального/пользовательского
Соответствует ли область ресурса полномочиям?Поиск/политика с учетом тенанта
Может ли хранилище обойти проверки приложения?Решение об эшелонированной защите задокументировано
Безопасны ли кэши для тенантов?Ключи/пространства имен и авторизация сохраняют область тенанта
Безопасны ли файлы/блобы для тенантов?Политика объектов и выдача подписанных URL обеспечивают область
Безопасны ли асинхронные задачи для тенантов?Проверенный контекст распространяется и повторно проверяется
Безопасны ли RAG/поиск для тенантов?Изоляция метаданных/коллекций обеспечивается до контекста модели
Явны ли межтенантные администраторы?Отдельные полномочия, средства контроля и аудит
Могут ли обычные учетные данные обойти изоляцию?Нет, или строго задокументированный исключительный путь
Автоматизированы ли негативные межтенантные тесты?Да для каждого соответствующего слоя доступа

Граничные случаи и ограничения

Пользователь может принадлежать нескольким тенантам. Поэтому текущий тенант должен быть явным контекстом выполнения, а не постоянно выводиться из учетной записи пользователя.

Некоторые ресурсы намеренно используются совместно выбранными тенантами, например пространства для совместной работы или данные консорциума. Это требует явной модели совместного использования; попытка представить, что ресурс принадлежит одному тенанту, и добавление исключений позже обычно создает неоднозначную авторизацию.

Изоляция от шумных соседей связана, но отличается от изоляции конфиденциальности. Тенант может никогда не видеть данные другого тенанта, но при этом исчерпать общие ресурсы CPU, емкость очереди или подключения к базе данных. Поэтому ограничения скорости и квоты ресурсов могут учитывать тенанта как границу доступности.

Физическая изоляция не является автоматически безопасной, если учетные данные плоскости управления или административные пути могут пересекать границы. Логическая изоляция не является автоматически слабой, если политики централизованно применяются, основаны на принципе наименьших привилегий и тщательно протестированы.

Требования к изоляции тенантов могут различаться в зависимости от класса данных. Публичные данные каталога, записи о выставлении счетов и частные документы ИИ могут оправдывать различные границы хранения и шифрования внутри одного SaaS-продукта.

Что могло бы изменить этот ответ?

Конкретная реализация меняется в зависимости от архитектуры: бессерверные API, Kubernetes, PostgreSQL, объектное хранилище, векторные базы данных и движки политик предоставляют разные примитивы изоляции.

Требуемая степень также меняется в зависимости от регулирования, контрактов с клиентами, чувствительности данных, модели угроз и операционного масштаба. Некоторые тенанты могут оправдывать изолированные базы данных или инфраструктуру, в то время как другие используют общие ресурсы.

Концептуальное различие не меняется: разрешение на выполнение операции — это не то же самое, что разрешение на пересечение границы тенанта.

Связанные канонические знания

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

Это также напрямую связано с агентным ИИ: возможности инструментов и разрешения ролей должны быть ограничены владением тенанта, прежде чем агент сможет читать или изменять бизнес-ресурсы.

Для RAG изоляция тенантов должна применяться до того, как защищенные фрагменты попадут в контекст модели.

Часто задаваемые вопросы

RBAC vs изоляция тенантов: FAQ

В чем разница между RBAC и изоляцией тенантов?

RBAC определяет, какие операции может выполнять субъект. Изоляция тенантов определяет, к ресурсам какого тенанта эти операции могут получить доступ. Безопасные мультитенантные приложения обычно нуждаются в обоих.

Роль ADMIN автоматически разрешает доступ ко всем тенантам?

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

Достаточно ли аутентификации для изоляции тенантов?

Нет. Аутентификация подтверждает личность. Авторизация контролирует разрешенные действия. Изоляция тенантов дополнительно предотвращает доступ этих действий к ресурсам неправильного тенанта.

Следует ли хранить tenantId в JWT?

Это может быть одним из входных данных для контекста тенанта, но сервер должен проверять текущее членство/полномочия и применять область действия на границах защищенных ресурсов. Одного утверждения недостаточно для замены средств изоляции.

Нужна ли отдельная база данных для каждого тенанта?

Не обязательно. Модели изоляции с общей таблицей, RLS, схемой, базой данных, инфраструктурой и гибридные модели могут быть допустимы в зависимости от рисков и операционных требований.

Может ли PostgreSQL RLS заменить фильтры тенантов в коде приложения?

RLS может обеспечить надежную эшелонированную защиту, но правильные роли базы данных, контекст запроса, покрытие политик и авторизация на уровне приложения по-прежнему важны.

Как RAG должен обеспечивать изоляцию тенантов?

Область действия тенанта/доступа должна применяться во время извлечения, чтобы неавторизованные фрагменты никогда не попадали в контекст модели. Сохраняйте метаданные доступа при разбиении на фрагменты и индексации.

Может ли один пользователь иметь разные роли в разных тенантах?

Да. Это распространено в B2B SaaS и является веской причиной для привязки назначений ролей к членству в тенанте, а не для рассмотрения ролей как глобально привязанных к пользователю.

Какой лучший тест для изоляции тенантов?

Используйте негативные кросс-тенантные тесты: создайте как минимум два тенанта, дайте пользователю действительные разрешения в одном тенанте, затем докажите, что каждый защищенный путь запрещает доступ к ресурсам другого тенанта.

Глоссарий

Ключевые термины безопасности мультитенантных систем

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: как работают ИИ-системы без интернета и облачного доступа

Air-Gapped AI: как работают ИИ-системы без интернета и облачного доступа

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

Что такое контекстная инженерия? Что получает модель до того, как она отвечает

Что такое контекстная инженерия? Что получает модель до того, как она отвечает

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

Что такое RAG? Самое простое объяснение того, как это работает

Что такое RAG? Самое простое объяснение того, как это работает

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

MCP: объяснение — что он подключает, чего не делает и где ему место

MCP: объяснение — что он подключает, чего не делает и где ему место

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

Источник истины в системах ИИ: откуда на самом деле берутся надёжные знания

Источник истины в системах ИИ: откуда на самом деле берутся надёжные знания

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

Откуда LLM берёт данные? Источники данных RAG в Python

Откуда LLM берёт данные? Источники данных RAG в Python

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

Архитектура ИИ на предприятии: что меняется, когда ИИ приходит в компанию

Архитектура ИИ на предприятии: что меняется, когда ИИ приходит в компанию

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

Когда ИИ должен перестать доверять собственным знаниям? — Триггер извлечения

Когда ИИ должен перестать доверять собственным знаниям? — Триггер извлечения

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

Граница достоверности ответа: недостающий слой между релевантностью и надёжными ответами ИИ

Граница достоверности ответа: недостающий слой между релевантностью и надёжными ответами ИИ

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

Что такое архитектор ИИ-решений? Границы системы, обязанности и компромиссы

Что такое архитектор ИИ-решений? Границы системы, обязанности и компромиссы

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

Как узнать, действительно ли ИИ-агент использовал правильные доказательства

Как узнать, действительно ли ИИ-агент использовал правильные доказательства

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

Фронтенд- и бэкенд-разработка

Фронтенд- и бэкенд-разработка

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