Сила тенантной изоляции
Версия: 1.0 Дата: 26.04.2026 Статус: Готов к обсуждению
Назначение документа
Документ определяет силу тенантной изоляции (multi-tenant isolation strength) Vitiana — каноничную модель уровней изоляции тенантов с явными триггерами перехода, защиту межтенантных утечек, аудит, операционные процедуры реакции на инциденты, поддержку требований к локализации данных и регуляторных обязательств.
Включает:
- Каноничную модель:
IsolationLevel,TenantIsolationProfile,IsolationBoundaryCheck,CrossTenantAccess,IsolationIncident. - Три каноничных уровня изоляции: логическая (logical) / выделенный compute (dedicated_compute) / выделенная инфраструктура (dedicated_infrastructure).
- Шесть измерений изоляции: данные / вычисления / сеть / хранилище / идентичность / журнал.
- Триггеры перехода между уровнями.
- Защиту от межтенантных утечек — multi-layer (база данных через RLS, программный интерфейс через scope, кеш через namespace, логи через redaction).
- Контролируемую межтенантную видимость для команды платформы — разрешения, журнал, лимиты.
- Аудит и compliance-журнал доступа.
- Локализацию данных по юрисдикциям.
- Реакцию на инциденты изоляции.
- Метрики и наблюдаемость.
- Фазы развёртывания.
Документ читается после:
- Tenancy And Identity — Strong Tenant Isolation и Controlled Cross-Tenant Visibility, базовые классы тенантов. Этот документ углубляет модель.
- Связь с реализацией → Долг 6 «Multi-tenant модель не реализована полностью» — этот документ закрывает направление через каноничную модель.
- Codex Architecture Review § 6.6 — открытые вопросы тенантной модели, на которые этот документ отвечает.
- Соответствие требованиям регуляторов — обязательства по локализации данных, GDPR data controller/processor.
- Дорожная карта инфраструктурного масштабирования — фаза 4 «Multi-region и dedicated infrastructure».
- Платформа данных и захват событий → правила межтенантной агрегации (k-анонимизация для кросс-тенантных запросов).
- Программный интерфейс как продукт — изоляция партнёрских данных, тарифные уровни.
- Аналитика и бизнес-аналитика — изоляция между внутренней и партнёрской аналитикой.
- Платформа машинного обучения — изоляция данных при обучении моделей.
В корневых документах зафиксированы базовые принципы изоляции (Strong Tenant Isolation как закон). Этот документ описывает уровни силы изоляции — от базовой логической до полной выделенной инфраструктуры — с правилами выбора уровня для конкретного тенанта.
Тенантная изоляция — критический архитектурный принцип платформы. Утечка данных между тенантами — это:
- Регуляторное нарушение по общему регулированию защиты данных.
- Прямой удар по доверию партнёров (особенно корпоративных).
- Потенциальный экзистенциальный риск для платформы.
При этом — уровень изоляции должен соответствовать тарифу и потребностям тенанта. Применять полную выделенную инфраструктуру для каждого тенанта — экономически нереализуемо. Применять только логическую для всех — недостаточно для крупных корпоративных партнёров с регуляторными требованиями.
Сила изоляции — это коммерческий и регуляторный продукт, не одинаковая для всех.
Реальное состояние реализации (home-to-go-api): таблицы usr покрывают базовых users + organizations, но Tenant сущность как явный boundary не реализован. Целевое состояние — единая каноничная модель, описанная этим документом.
Правило 00000 (платформа главенствует над поставщиками) применяется здесь напрямую: уровень изоляции — выбор платформы, не наследие от конкретного партнёра. Партнёр получает уровень в соответствии со своим тарифом и регуляторными требованиями; тенант не диктует «свою» модель изоляции.
Главное решение
Сила тенантной изоляции — каноничная архитектурная сущность с тремя уровнями, явными триггерами перехода и многослойной защитой.
Это означает:
- Три каноничных уровня — logical / dedicated_compute / dedicated_infrastructure. Каждый тенант имеет назначенный уровень.
- Шесть измерений изоляции — данные / вычисления / сеть / хранилище / идентичность / журнал. Уровень изоляции применяется в каждом измерении.
- Многослойная защита — изоляция реализована одновременно на нескольких уровнях (БД через row-level security, программный интерфейс через scope, кеш через namespace, журналы через redaction). Утечка одного слоя не приводит к компрометации.
- Контролируемая межтенантная видимость — только для команды платформы, только через явные роли, всегда с журналом аудита.
- Регулярный audit изоляции — автоматические проверки границ, ручное ревью.
- Локализация данных — для тенантов с регуляторными требованиями (например, операторов в Казахстане с местным законодательством о персональных данных) — данные физически в нужном регионе.
- Реакция на инциденты — каноничная процедура с эскалацией при подозрении на утечку.
- Связь с тарифом — уровень изоляции зависит от тарифа (Enterprise — dedicated, Professional — strong logical, ниже — логический baseline).
Каноничные сущности (углубление существующих)
Уже зафиксированное в tenancy-and-identity.md
- Сущность
Tenantкак boundary of isolation. - Базовые классы:
platform_internal_tenant,agency_tenant,partner_tenant,dedicated_embedded_tenant. - Две модели изоляции: Strong Tenant Isolation и Controlled Cross-Tenant Visibility.
Этот документ расширяет через дополнительные сущности.
Новые сущности
IsolationLevel — уровень изоляции
Сущность, представляющая именованный уровень изоляции в каталоге.
{
level_id: UUID,
level_key: enum,
level_name: string,
description: string,
data_isolation_class: enum,
compute_isolation_class: enum,
network_isolation_class: enum,
storage_isolation_class: enum,
identity_isolation_class: enum,
log_isolation_class: enum,
applicable_tenant_classes: array,
applicable_tariff_levels: array,
cost_class: enum,
applicable_phase: integer,
is_active: boolean
}
Поля:
level_key—logical/dedicated_compute/dedicated_infrastructure.data_isolation_class— класс изоляции данных (shared_with_rls— общая БД с row-level security;shared_schema— общая схема с tenant_id;dedicated_schema_in_shared_db— отдельная схема внутри общей БД;dedicated_database— выделенная БД;dedicated_database_in_dedicated_region— выделенная БД в выделенном регионе).compute_isolation_class— класс изоляции вычислений (shared_pool— общий pool;dedicated_pod_in_shared_cluster— выделенный pod;dedicated_node_in_shared_cluster— выделенная нода;dedicated_cluster— отдельный кластер).network_isolation_class— класс изоляции сети (shared_namespace— общее пространство;dedicated_namespace— выделенное;dedicated_vpc— выделенная виртуальная частная сеть).storage_isolation_class— класс изоляции хранилища (shared_bucket_with_prefix— общий bucket с префиксом;dedicated_bucket— выделенный;dedicated_bucket_in_region— выделенный в регионе).identity_isolation_class— класс изоляции идентичности (shared_realm— общий realm;dedicated_realm— выделенный;federated_with_partner_idp— федеративный с партнёрским провайдером идентификации).log_isolation_class— класс изоляции журналов (tagged_in_shared_log— теги в общем;dedicated_log_stream— выделенный поток;dedicated_log_destination— журналы в собственное хранилище партнёра).
TenantIsolationProfile — профиль изоляции тенанта
Сущность, представляющая назначенный уровень изоляции для конкретного тенанта.
{
profile_id: UUID,
tenant_id: UUID,
current_level_id: UUID,
effective_data_residency_region: string,
effective_compliance_obligations: array,
custom_overrides: object,
applied_at: timestamp,
approved_by: string,
next_review_at: timestamp,
audit_journal: array
}
Поля:
current_level_id— текущий уровень изоляции тенанта.effective_data_residency_region— фактический регион хранения данных тенанта (eu_west/ua_local/kz_local/gb_local/multi_region).effective_compliance_obligations— фактические compliance-обязательства (например,gdpr_eu_dpa_required,pci_dss_attestation_required,local_data_protection_kz).custom_overrides— особые правила, отличающиеся от стандартного уровня (для корпоративных контрактов).approved_by— кто одобрил уровень.next_review_at— момент следующего ревью (типично раз в год).audit_journal— каноничный журнал изменений уровня.
IsolationBoundaryCheck — проверка границы изоляции
Сущность, представляющая формальную проверку, что граница изоляции конкретного тенанта не нарушена.
{
check_id: UUID,
tenant_id: UUID,
check_class: enum,
check_logic: object,
result: enum,
detected_at: timestamp,
resolved_at: timestamp,
severity: enum,
affected_resource_type: enum,
affected_resource_count: integer,
remediation: enum
}
Поля:
-
check_class— класс проверки:cross_tenant_query_attempt— попытка запроса данных другого тенанта.cross_tenant_cache_leak— обнаружение данных другого тенанта в общем кеше.cross_tenant_log_leak— данные тенанта в общем журнале без redaction.dedicated_resource_violation— общий ресурс используется тенантом с уровнем dedicated.data_residency_violation— данные тенанта оказались вне разрешённого региона.compute_pool_assignment_drift— тенант с dedicated compute оказался на общем pool.identity_realm_misalignment— пользователь подключился через неправильный realm.
-
severity— серьёзность (critical— критическая утечка с финансовыми/регуляторными последствиями;high— существенное нарушение;medium— нарушение конфигурации без утечки;low— несоответствие, требующее правки). -
remediation— каким образом устранено (automatic_block— автоматическая блокировка операции;data_quarantined— данные изолированы для расследования;manual_correction— ручная корректировка;escalated_to_security_team— эскалация команде безопасности).
CrossTenantAccess — межтенантный доступ
Сущность, представляющая разрешённый и журналируемый доступ команды платформы к данным конкретного тенанта.
{
access_id: UUID,
accessed_tenant_id: UUID,
accessor_user_id: UUID,
accessor_role: enum,
access_purpose: enum,
access_justification: string,
authorized_resources: array,
approval_chain: array,
granted_at: timestamp,
expires_at: timestamp,
revoked_at: timestamp,
audit_journal: array
}
Поля:
access_purpose— каноничная цель (incident_investigation/support_ticket/compliance_audit/bug_reproduction/security_investigation/legal_request— как требование регулятора).access_justification— текстовое обоснование (для аудита).approval_chain— цепочка одобрений (для критических доступов — несколько уровней).expires_at— обязательное ограничение по времени (типично от часа до суток в зависимости от цели).audit_journal— журнал всех действий внутри доступа.
IsolationIncident — инцидент изоляции
Сущность, представляющая зарегистрированный инцидент, потенциально нарушивший границы изоляции.
{
incident_id: UUID,
affected_tenant_ids: array,
incident_class: enum,
detection_source: enum,
detected_at: timestamp,
contained_at: timestamp,
resolved_at: timestamp,
severity: enum,
scope: object,
immediate_actions_taken: array,
root_cause_analysis: object,
notification_status: object,
regulatory_notification_required: boolean,
regulatory_notification_completed_at: timestamp,
affected_records_count: integer,
affected_data_classes: array
}
Поля:
incident_class— класс инцидента (data_leak_confirmed/data_leak_suspected/unauthorized_access/dedicated_resource_violation/data_residency_violation).notification_status— состояние уведомлений (тенантам, регулятору).regulatory_notification_required— требуется ли уведомление регулятора (для подтверждённых утечек по общему регулированию защиты данных — обязательно в течение 72 часов).
Связь с другими каноничными сущностями
TenantIsolationProfile.tenant_id— связь сTenantиз Tenancy And Identity.IsolationBoundaryCheckсобытия публикуются в Платформа данных и захват событий (отдельный класс приватностиcompliance_log, retention 10 лет).CrossTenantAccess.accessed_tenant_id— данные собираются в Аналитика и бизнес-аналитика, витрина internal только.IsolationIncident— связан с Соответствие требованиям регуляторов для процедур уведомления регулятора.TenantIsolationProfile.effective_data_residency_region— связь с Интернационализация и локализация.
Три каноничных уровня изоляции
Уровень 1. Логическая изоляция (logical)
Описание: все тенанты делят общую инфраструктуру (БД, compute, кэш). Изоляция реализована только через программные механизмы — row-level security в БД, проверка tenant_id в каждом запросе, scoped credentials для программного интерфейса.
Применение: баseline для всех тенантов на тарифах Free, Starter, Professional. Это обязательный минимум, никакого «без изоляции» не существует.
Шесть измерений:
| Измерение | Класс | Механизм |
|---|---|---|
| Данные | shared_with_rls | PostgreSQL row-level security policies на каждой таблице |
| Вычисления | shared_pool | Общий pool сервисов с tenant-aware маршрутизацией |
| Сеть | shared_namespace | Общий namespace Kubernetes, изоляция через service mesh policies |
| Хранилище | shared_bucket_with_prefix | Общий Object Storage bucket с префиксами tenant/<tenant_id>/... |
| Идентичность | shared_realm | Общий realm провайдера идентификации с tenant-scoped токенами |
| Журнал | tagged_in_shared_log | Общая система журналирования с тегом tenant_id |
Стоимость: низкая (общие ресурсы делятся). Большинство компонентов фиксированные расходы платформы.
Ограничения:
- Невозможна локализация данных по юрисдикциям (всё в одном регионе).
- Невозможна гарантированная мощность (capacity envelope).
- При компрометации общего слоя — затронуты все тенанты.
Уровень 2. Выделенный compute (dedicated_compute)
Описание: общая инфраструктура хранения, но выделенные вычислительные ресурсы для тенанта. Это даёт гарантированную мощность и операционную изоляцию (нагрузка одного тенанта не влияет на другого).
Применение: тенанты Enterprise tier базовой подписки, премиум-агентства.
Шесть измерений:
| Измерение | Класс | Механизм |
|---|---|---|
| Данные | dedicated_schema_in_shared_db | Выделенная PostgreSQL schema (или dedicated database connection pool) |
| Вычисления | dedicated_node_in_shared_cluster | Выделенные ноды Kubernetes с taints/tolerations для тенанта |
| Сеть | dedicated_namespace | Выделенный Kubernetes namespace с собственным network policy |
| Хранилище | dedicated_bucket | Выделенный Object Storage bucket |
| Идентичность | dedicated_realm (опционально) | Может быть выделенный realm для крупных корпоративных |
| Журнал | dedicated_log_stream | Выделенный поток в системе журналирования |
Стоимость: средняя (стоимость выделенных вычислений + общий бэкенд хранения). Окупается тарифом Enterprise.
Ограничения:
- Локализация данных частично возможна (бакет можно разместить в нужном регионе), но БД остаётся в общем регионе.
- При компрометации общей БД — данные могут быть затронуты (хотя ниже риск из-за схемной изоляции).
Уровень 3. Выделенная инфраструктура (dedicated_infrastructure)
Описание: полностью выделенная инфраструктура для тенанта — собственная БД, собственный кластер, собственный регион (опционально). Это максимальный уровень изоляции, доступный только для крупнейших корпоративных партнёров и для регуляторно-требовательных юрисдикций.
Применение: Enterprise tier по индивидуальному соглашению; тенанты с обязательной локализацией данных по местному законодательству.
Шесть измерений:
| Измерение | Класс | Механизм |
|---|---|---|
| Данные | dedicated_database_in_dedicated_region | Выделенная PostgreSQL instance в нужном регионе |
| Вычисления | dedicated_cluster | Выделенный Kubernetes-кластер |
| Сеть | dedicated_vpc | Выделенная виртуальная частная сеть |
| Хранилище | dedicated_bucket_in_region | Выделенный bucket в нужном регионе |
| Идентичность | federated_with_partner_idp (опционально) | Федеративная аутентификация с провайдером идентификации тенанта |
| Журнал | dedicated_log_destination | Журналы могут отправляться в собственную систему тенанта |
Стоимость: высокая (отдельная инфраструктура). Включена в индивидуальный контракт Enterprise.
Ограничения:
- Сложность операций — каждый dedicated tenant требует операционного внимания при инцидентах, миграциях, релизах.
- Замедление релизов — обновления должны прокатываться по нескольким независимым кластерам.
Сводная таблица соответствий
| Тариф | Базовый уровень | Возможные апгрейды |
|---|---|---|
| Free | logical | (нет, только для песочницы) |
| Starter | logical | (нет в стандартном тарифе) |
| Professional | logical (baseline) | dedicated_compute (по запросу с upcharge, не в стандартной конфигурации) |
| Enterprise | dedicated_compute | dedicated_infrastructure (по контракту) |
| Особые юрисдикционные требования | dedicated_infrastructure | (без альтернатив) |
Шесть измерений изоляции
Каждый уровень изоляции применяется в шести измерениях одновременно. Это даёт многослойную защиту.
Измерение 1. Изоляция данных
Что защищается: содержимое таблиц БД от чтения/записи тенанта другого тенанта.
Механизмы:
- Row-Level Security (RLS) в PostgreSQL — обязательно для всех таблиц с пользовательскими данными. Каждая таблица имеет
tenant_idколонку и RLS-policycurrent_setting('app.tenant_id') = tenant_id. - Set tenant context — при каждом запросе к БД устанавливается
SET app.tenant_id = '<tenant>'в pre-statement hook ORM. - Запрет на bypass RLS — никто, кроме
superuser(только для миграций), не может обойти RLS.
Измерение 2. Изоляция вычислений
Что защищается: ресурсы CPU и RAM от перегрузки одним тенантом.
Механизмы:
- Tenant-aware rate limiting на каждом сервисе.
- Resource quotas в Kubernetes для namespace тенанта (для dedicated_compute и выше).
- Workload-aware маршрутизация — определённые типы запросов направляются в специализированные пулы.
Измерение 3. Изоляция сети
Что защищается: сетевая видимость между сервисами, чтобы тенант не мог достучаться до сервисов другого тенанта.
Механизмы:
- Service mesh с mTLS между всеми сервисами.
- Network policies в Kubernetes ограничивают трафик между namespace.
- Egress filtering для dedicated тенантов — контроль внешних сетевых соединений.
Измерение 4. Изоляция хранилища
Что защищается: медиа, документы, артефакты в Object Storage от чтения/записи тенанта другого тенанта.
Механизмы:
- Bucket policies с проверкой
tenant_idпрефикса. - Pre-signed URLs — короткоживущие подписанные ссылки, привязанные к конкретному тенанту.
- Шифрование данных в покое с tenant-specific ключами (для dedicated_compute и выше).
Измерение 5. Изоляция идентичности
Что защищается: учётные данные пользователей и API-ключи от использования между тенантами.
Механизмы:
- Tenant-scoped tokens — каждый JWT-токен содержит
tenant_idclaim, проверяемый на каждом запросе. - API keys с областями (scopes) — ключ привязан к конкретному тенанту.
- Запрет на федерацию учётных записей между тенантами (один пользователь не может работать в двух тенантах одной учётной записью; для разных тенантов — разные).
Измерение 6. Изоляция журналов
Что защищается: содержимое журналов от смешивания между тенантами.
Механизмы:
- Tenant ID tagging во всех структурированных журналах.
- PII redaction — автоматическая обфускация персональных данных перед записью в общий журнал.
- Tenant-aware filtering в системе журналирования — оператор видит журналы только своего scope.
Контролируемая межтенантная видимость для команды платформы
Принцип
Команда платформы (поддержка, инжиниринг, безопасность) в некоторых случаях должна видеть данные тенанта (для расследования инцидентов, ответа на запросы поддержки). Это разрешено, но строго контролируется через каноничный механизм.
Каноничные роли
platform_support_l1— может видеть метаданные тенанта (имя, тариф, состояние), без доступа к содержимому данных.platform_support_l2— может видеть содержимое нечувствительных данных (бронирования, поисковая история) при наличии запроса от тенанта.platform_support_l3— расширенный доступ при подтверждённом инциденте.platform_security_investigator— расширенный доступ при подозрении на инцидент безопасности.platform_compliance_auditor— доступ для регулярных compliance-проверок.
Поток предоставления доступа
Запрос на доступ инициируется внутренним пользователем платформы
↓
Указание цели (access_purpose) и обоснования (access_justification)
↓
Применение правил утверждения по роли:
- L1 → автоматическое одобрение для метаданных
- L2 → подтверждение менеджером, обязательная связь с тикетом
- L3 → подтверждение менеджером + руководителем команды
- Security investigator → CISO одобрение
- Compliance auditor → запланированный access по графику
↓
Создание CrossTenantAccess со сроком истечения
↓
Уведомление тенанта (для L2 и выше) о факте доступа
↓
Все действия внутри доступа журналируются в audit_journal
↓
По истечении expires_at — доступ автоматически отзывается
Уведомление тенанту
Для большинства классов доступа (L2 и выше) — обязательное уведомление тенанту в момент предоставления и/или после завершения. Это:
- Защищает доверие.
- Соответствует обязательствам по общему регулированию защиты данных (тенант — data controller, имеет право знать о доступе к его данным).
- Создаёт self-correcting сигнал — тенант видит, что что-то происходит, и может задать вопросы.
Исключения для уведомления:
legal_request— некоторые регуляторные запросы запрещают уведомление (для расследований).security_investigation— при активном расследовании компрометации, уведомление может скомпрометировать расследование. После завершения — обязательное уведомление.
Запрет на «вечный доступ»
- ❌ Постоянные привилегии «может видеть всё» для отдельных пользователей.
- ❌ Скрытый доступ через прямое подключение к БД минуя audit log.
- ❌ Расшаривание учётных данных между членами команды.
Все доступы — временные и журналируемые.
Локализация данных
Главный принцип
Некоторые юрисдикции (Россия, Казахстан, Китай, отдельные страны Латинской Америки) требуют физического хранения персональных данных граждан страны внутри страны. Это требование data residency.
Платформа поддерживает локализацию через:
TenantIsolationProfile.effective_data_residency_region— назначенный регион для тенанта.- Уровень изоляции
dedicated_infrastructureв нужном регионе — единственный способ обеспечить полную локализацию.
Каноничные регионы
eu_west— Западная Европа (Франция, Германия) — главный для тенантов EU.eu_central— Центральная Европа (Польша, Чехия) — для специфичных тенантов с локализацией в этом регионе.ua_local— Украина (через локального провайдера или локальный регион в OVHcloud при доступности).kz_local— Казахстан (через локального провайдера).gb_local— Великобритания (после Brexit отдельная юрисдикция).multi_region— данные могут реплицироваться между регионами (для тенантов без жёстких требований).
Compliance-обязательства
Каждое назначение региона — зафиксированное обязательство в контракте с тенантом:
- Данные физически хранятся только в указанном регионе.
- Резервные копии — также в этом регионе (или в специально согласованных регионах).
- Доступ команды платформы — через аккаунты с привязкой к этому региону.
- При расширении в новый регион — соответствующая локализация.
Запрет на скрытую репликацию
- ❌ Репликация данных тенанта с локализацией в регионы вне согласованного перечня.
- ❌ Бэкапы в общее (multi_region) хранилище для тенантов с локализацией.
- ❌ Использование CDN с глобальной репликацией для медиа тенантов с локализацией (медиа должно идти через CDN с региональным присутствием).
Защита от межтенантных утечек
Многослойная защита
Каждый запрос проходит проверку tenant_id на нескольких слоях:
- API Gateway — извлекает
tenant_idиз JWT-токена. - Сервис — устанавливает
tenant_idв контекст запроса (в request-scoped variable). - ORM — добавляет
tenant_idв WHERE для каждого запроса. - PostgreSQL — RLS-policy валидирует
tenant_id. - Журналирование —
tenant_idтег для каждой записи.
Утечка одного слоя не приводит к компрометации, потому что следующие слои продолжают защиту.
Каноничные проверки
-
cross_tenant_query_attempt— попытка запроса данных другого тенанта (типично — баг в коде сервиса). Блокируется на уровне БД через RLS, журналируется какIsolationBoundaryCheckс severityhigh. -
cross_tenant_cache_leak— обнаружение данных тенанта в кеше другого. Кеш помечен tenant-aware ключом (tenant:<id>:cache_key); на чтении проверяется соответствие. -
cross_tenant_log_leak— данные одного тенанта в журналах другого. Автоматическая проверка через периодический сканер с PII detection. -
dedicated_resource_violation— тенант с уровнем dedicated оказался на общем resource. Автоматическая проверка через метаданные resource assignment. -
data_residency_violation— данные тенанта оказались вне разрешённого региона. Проверка через геокоординаты infrastructure ресурсов и tenant residency requirement.
Автоматический ответ на нарушение
- Severity
critical— мгновенная блокировка операции, эскалация команде безопасности (на сon-call), созданиеIsolationIncident, начало процедуры регуляторного уведомления. - Severity
high— блокировка, журналирование, тикет в очередь команды безопасности на 24 часа. - Severity
medium— журналирование, тикет в очередь на 72 часа. - Severity
low— журналирование для последующего ревью.
Реакция на инциденты изоляции
Классификация инцидентов
data_leak_confirmed— подтверждённая утечка (данные тенанта стали известны другому тенанту или внешнему лицу).data_leak_suspected— подозрение на утечку, расследуется.unauthorized_access— несанкционированный доступ к данным (внутренний или внешний).dedicated_resource_violation— нарушение dedicated boundary без подтверждённой утечки.data_residency_violation— нарушение требования локализации без подтверждённой утечки.
Каноничный поток реакции
Detection (через автоматическую проверку, ручное расследование, отчёт партнёра)
↓
Создание IsolationIncident
↓
Containment (изоляция масштаба, блокировка дальнейших операций)
↓
├── Severity critical: command center активирован, CISO вовлечён
├── Severity high: команда безопасности расследует
└── Severity medium/low: стандартный ticket flow
↓
Investigation (RCA — root cause analysis):
- какие тенанты затронуты
- какие данные затронуты
- время начала и продолжительность
- источник утечки
↓
Remediation (исправление root cause, защита от повторения)
↓
Notification (уведомление затронутых тенантов и регулятора при необходимости)
↓
Resolution (закрытие инцидента, post-mortem, lessons learned)
Регуляторное уведомление
Для подтверждённых утечек данных по общему регулированию защиты данных (data_leak_confirmed):
- Уведомление регулятора — в течение 72 часов с момента обнаружения, если утечка может представлять риск для прав и свобод субъектов.
- Уведомление субъектов данных — без необоснованной задержки, если высокий риск.
- Журнал — каждый шаг процедуры журналируется для последующего ревью регулятора.
См. Соответствие требованиям регуляторов для полной процедуры.
Post-mortem
Каждый инцидент с severity high или выше — обязательный post-mortem (анализ после события):
- Без обвинения (blameless) — фокус на системных причинах.
- Публичное в команде — все могут изучить и предложить улучшения.
- С action items — конкретные задачи на улучшение (расширение автоматических проверок, обновление процедур, дополнительное обучение команды).
Триггеры перехода между уровнями
От logical к dedicated_compute
- Подписание контракта Enterprise tier.
- Запрос тенанта с обоснованием (compliance, гарантированная мощность, изоляция от соседей).
- Достижение тенантом порога нагрузки, при котором gemeinsame инфраструктура не справляется без влияния на других.
От dedicated_compute к dedicated_infrastructure
- Регуляторное требование локализации данных (kz_local, ua_local).
- Корпоративный контракт с явным требованием dedicated infrastructure.
- Регуляторно-чувствительная отрасль (государственный сектор, оборона).
- Финансовая регуляторная нагрузка на тенанта (например, банк), требующая полной изоляции.
Обратные переходы (downgrade)
- Изменение тарифа тенанта вниз.
- Существенное снижение нагрузки.
Обратные переходы — сложные, требуют планирования (миграция данных в общую инфраструктуру при сохранении изоляции). Не происходят автоматически.
Связь с тарифами
Подробно — в Программный интерфейс как продукт и Архитектурный якорь и бизнес-модель. Здесь — каноничная связь:
| Тариф | Default IsolationLevel | Compliance возможности |
|---|---|---|
| Free | logical | базовые |
| Starter | logical | базовые |
| Professional | logical | базовые + опциональный dedicated_compute с upcharge |
| Enterprise | dedicated_compute | полный набор + опциональный dedicated_infrastructure |
| Custom Enterprise | dedicated_infrastructure | индивидуальные SLA, локализация, federated identity |
Метрики и наблюдаемость
Каноничные метрики тенантной изоляции
- Распределение тенантов по уровням изоляции — сколько тенантов на каждом уровне.
- Доля тенантов на dedicated — индикатор зрелости платформы.
- Среднее время разрешения
IsolationBoundaryCheck— операционная метрика. - Доля автоматически разрешённых нарушений vs ручных — индикатор зрелости автоматики.
- Число инцидентов изоляции по severity — операционная метрика.
- Распределение
CrossTenantAccessпоaccess_purpose— для compliance review. - Среднее время одобрения
CrossTenantAccess— для оптимизации процессов поддержки.
Алерты
Через Аналитика и бизнес-аналитика и Наблюдаемость и реагирование на инциденты:
- Алерт при любом
IsolationBoundaryCheckseveritycritical. - Алерт при превышении нормального уровня severity
high(более 5 за час). - Алерт при попытке доступа к dedicated tenant без правильной роли.
- Алерт при превышении срока
CrossTenantAccessбез revoke. - Алерт при
data_residency_violationлюбого уровня.
События тенантной изоляции
| Событие | Когда | Главные потребители |
|---|---|---|
tenant.isolation_level.assigned | Назначение уровня тенанту | Контур аудита |
tenant.isolation_level.upgraded | Повышение уровня (logical → dedicated_compute → dedicated_infrastructure) | Команда поддержки, операционная команда |
tenant.isolation_level.downgraded | Понижение уровня | Срочный алерт, обязательное согласование |
tenant.data_residency.assigned | Назначение региона данных | Контур compliance |
isolation.boundary_check.violation_detected | Обнаружение нарушения | Платформа данных, оперативная команда (по severity) |
isolation.boundary_check.violation_resolved | Разрешение нарушения | Контур аудита |
cross_tenant_access.requested | Запрос на межтенантный доступ | Approval workflow |
cross_tenant_access.granted | Доступ предоставлен | Тенант (если требуется уведомление), контур аудита |
cross_tenant_access.expired | Автоматическое истечение | Контур аудита |
cross_tenant_access.revoked_early | Досрочное аннулирование | Контур аудита |
isolation.incident.detected | Регистрация инцидента | Команда безопасности, оперативная команда |
isolation.incident.contained | Ограничение масштаба | Команда безопасности |
isolation.incident.resolved | Закрытие инцидента | Контур compliance, post-mortem процесс |
isolation.regulatory_notification.completed | Уведомление регулятора | Контур compliance, leadership |
Полная таксономия — в Первоначальная таксономия событий.
Фазы развёртывания
Фаза Bootstrap (0–6 месяцев)
Что разворачивается:
- Каноничная модель (
IsolationLevel,TenantIsolationProfile,IsolationBoundaryCheck,CrossTenantAccess,IsolationIncident) зафиксирована. - Базовый уровень
logicalдля всех тенантов с RLS на критических таблицах. - Базовая система
CrossTenantAccessдля команды поддержки. - Простой набор
IsolationBoundaryCheckдля самых критических случаев. - Закрытие Долга 6 через введение явной
Tenantсущности.
Триггер выхода:
- Запуск партнёрского доступа с тарифом Professional — нужны улучшенные проверки.
- Появление первого корпоративного партнёра — нужен путь к dedicated_compute.
Фаза 2 — Production isolation (6–18 месяцев)
Что разворачивается:
- Полный набор
IsolationBoundaryCheckвсех классов. - Многослойная защита (RLS + сервис + кеш + журнал).
- Полная процедура
CrossTenantAccessс уведомлениями тенантам. - Каноничная процедура реакции на инциденты.
- Audit-журнал с retention 10 лет.
- Автоматические compliance-проверки.
Триггер выхода:
- Появление первого корпоративного клиента с требованием dedicated_compute.
- Появление тенантов из юрисдикций с обязательной локализацией.
Фаза 3 — Dedicated compute available (18–30 месяцев)
Что разворачивается:
- Уровень
dedicated_computeдоступен для Enterprise. - Выделенные namespaces, schemas, buckets для назначенных тенантов.
- Расширенная система мониторинга для dedicated тенантов.
- Поддержка federated identity для крупных корпоративных партнёров.
- ML-модели обнаружения аномалий в межтенантных запросах.
Фаза 4 — Dedicated infrastructure (30+ месяцев)
Что разворачивается:
- Уровень
dedicated_infrastructureдоступен для Custom Enterprise. - Multi-region инфраструктура с локализацией данных по юрисдикциям.
- Поддержка специализированных регулятивных режимов (например, для банковского сектора).
- Индивидуальные операционные процедуры для крупнейших dedicated тенантов.
- Sovereign cloud (для регулятивно-критичных юрисдикций) — опционально.
Архитектурные решения с тезисным обоснованием
Решение 1. Три каноничных уровня, не «всё для всех»
Цель: обеспечить экономически жизнеспособную модель с возможностью поднятия уровня для тех, кому нужно.
Тезисы:
- Полная dedicated infrastructure для всех тенантов — экономически нереализуемо.
- Только logical для всех — недостаточно для крупных корпоративных и регуляторно-требовательных юрисдикций.
- Три уровня покрывают полный спектр потребностей с явной связью с тарифом.
- Современные платформы (Salesforce, AWS, Snowflake) — все строят похожую модель уровней. Это база.
Решение 2. Многослойная защита, не один слой
Цель: обеспечить устойчивость к багам в любом отдельном слое.
Тезисы:
- Один слой защиты — единственная точка отказа. Bug в этом слое — компрометация всех тенантов.
- Многослойная защита (RLS + сервис + кеш + журнал) — отказ одного слоя не приводит к утечке.
- Стандартная практика безопасности (defence in depth).
Решение 3. Контролируемая межтенантная видимость через journaled access
Цель: разрешить операционно необходимый доступ команды платформы без открытия дыры в безопасности.
Тезисы:
- Поддержка должна видеть данные для расследования инцидентов — это операционная необходимость.
- Без журнала доступа невозможно ответить регулятору «кто видел эти данные».
- Уведомление тенанту — единственный способ сохранить доверие.
- Срок истечения — защита от долгосрочных привилегий.
Решение 4. Локализация данных как first-class возможность
Цель: обеспечить compliance-обязательства для регуляторно-требовательных тенантов.
Тезисы:
- Без поддержки локализации платформа недоступна для тенантов в Казахстане, России (если потребуется), и других юрисдикций.
- Это не «фича на потом», а архитектурный закон для определённых тенантов.
- Совмещение локализации с уровнем
dedicated_infrastructure— единственный способ полного соответствия.
Решение 5. Каноничная процедура реакции на инциденты
Цель: обеспечить корректное и быстрое реагирование при подозрении на утечку.
Тезисы:
- Импровизированная реакция в момент инцидента — обычно медленная и неполная.
- Каноничная процедура (containment → investigation → remediation → notification) — стандарт индустрии.
- Регуляторное уведомление в 72 часа по общему регулированию защиты данных требует процедуры, не импровизации.
Открытые развилки
Развилка 1. Конкретные пороги для автоматического перехода между уровнями
При каких объёмах нагрузки тенанта автоматически предлагать переход с logical на dedicated_compute? Конкретные пороги — открытая развилка.
Эскалируется: при появлении первых тенантов, приближающихся к пороговым значениям.
Развилка 2. Поддержка federated identity для всех Enterprise
Federated identity (SAML, OIDC) — обязательно для всех Enterprise или опционально по запросу? Зависит от рынка.
Эскалируется: при появлении партнёров с требованиями.
Развилка 3. Sovereign cloud для регулятивно-критичных юрисдикций
В фазе 4 — возможна поддержка sovereign cloud (государственное облако) для тенантов в юрисдикциях с особыми требованиями. Существенная коммерческая возможность с большими операционными сложностями.
Эскалируется: при стратегическом пересмотре в фазе 4.
Развилка 4. ML-модели обнаружения аномалий в межтенантном трафике
В фазе 3 — ML-модели для обнаружения подозрительного межтенантного трафика. Глубина (от анализа паттернов до автоматических блокировок) — открытая развилка.
Эскалируется: при создании ML-стратегии для безопасности в Платформа машинного обучения.
Развилка 5. Вертикальная специализация уровней изоляции
Возможны вертикально-специализированные уровни (например, medical_isolation с HIPAA-compliance, financial_isolation с PCI DSS Level 1). Для специфических индустрий — открытая развилка.
Эскалируется: при стратегическом расширении в новые индустриальные сегменты.
Связанная документация
Корневые архитектурные документы
- Каноничная доменная ось — каноничная сущность
Tenant. - Архитектурный якорь и бизнес-модель — гибридная модель отвечающего за платежи продавца, изоляция как продуктовое свойство.
- Поверхности взаимодействия — поверхности и их изоляционные требования.
- Манифест переосмысления — обязательство закладывать тенантную модель с самого начала.
- Связь с реализацией — Долг 6 «Multi-tenant модель не реализована полностью», который этот документ закрывает направление.
- Операционная ось — наблюдаемость тенантной изоляции, реакция на инциденты.
Связанные доменные документы
- Tenancy And Identity — Strong Tenant Isolation, Controlled Cross-Tenant Visibility, базовые классы тенантов. Этот документ углубляет.
- Тенантная настройка — конфигурация тенанта, включая
IsolationLevel. - Соответствие требованиям регуляторов — общее регулирование защиты данных, локализация данных, регуляторное уведомление об инцидентах.
- Платформа данных и захват событий — изоляция данных в DWH, k-анонимизация для кросс-тенантных запросов.
- Аналитика и бизнес-аналитика — изоляция партнёрской и внутренней аналитики, audit log кросс-тенантных запросов.
- Программный интерфейс как продукт — изоляция партнёрских данных, тарифные уровни.
- Платформа машинного обучения — изоляция данных при обучении моделей.
- Платёжный домен — изоляция платёжных данных по тенантам.
- Хранение — изоляция данных на уровне Object Storage.
- Интернационализация и локализация — региональные локали и data residency.
- Экономическая модель платформы — связь уровня изоляции с тарифом.
Документы развития
- Codex Architecture Review § 6.6 — оригинальный анализ открытых вопросов тенантной изоляции.
- Первоначальная таксономия событий — таксономия событий изоляции.
- Техническое задание для подрядчика — § 7.1 SLA targets per tenant tier.
Операционная сторона
- Наблюдаемость и реагирование на инциденты — наблюдаемость изоляции и реакция на инциденты.
- Дорожная карта инфраструктурного масштабирования — фаза 4 «Multi-region и dedicated infrastructure».
- Релизы и совместимость — миграции данных при изменении уровня изоляции.
Архитектурные правила
- Закон 00000 — платформа главенствует над поставщиками — уровень изоляции — выбор платформы.
- Современные лучшие практики верхнеуровневых платформ — Salesforce, AWS, Snowflake как ориентиры тенантной модели.
- Развитие без деградации — фазы как расширение, не миграция.
- Эластичное масштабирование и упаковка по фазам — фазы тенантной изоляции.
- Тезисное обоснование архитектурных решений — формат принятия решений.