Реклама. ИП Ахунов Александр Раисович, ИНН 665911236854
Session/memory isolation multi-tenant AI: client_id, TTL, leak-test 28 дней

Session/memory isolation multi-tenant AI: client_id, TTL, leak-test 28 дней

Session/memory isolation в multi-tenant AI за 28 дней — это жёсткие scopes по client_id, TTL на сессии и память, red-team leak-test на перекрёстные запросы и audit-лог каждого доступа к чужому контексту. Без этого «общий агент на несколько клиентов» рано или поздно подмешает чужой бриф, цены или PII в ответ.

Я собираю изоляцию как production-контур, а не как «надеемся на промпт». Ниже — модель scopes, TTL, тесты утечек и журнал за 28 дней.

Модель scopes: что разделяем и где

Изолировать нужно не только «чат», а все слои, откуда модель может вытащить чужое.

СлойКлюч изоляцииХранениеРиск без scope
Sessionclient_id + session_idRedis / DB, short TTLчужой диалог в контексте
Working memoryclient_id + thread_idvector/KV с namespaceчужие факты в summary
Long-term memoryclient_id (+ optional workspace_id)vector DB partitionRAG «подмешал» чужой KB
Tools / CRMclient_id → credentials mapsecrets vaultзапись в чужой Bitrix
Files / uploadsclient_id + object ACLobject storage prefixскачивание чужого файла
Eval / logsclient_id redactedSIEM / cold storagePII в общих логах

Жёсткие правила:

  1. client_id обязателен на входе — anonymous multi-tenant запрещён в prod.
  2. Namespace в vector store = client_id (не «тег надежды» в metadata-only фильтре без hard partition).
  3. Tool-calling получает credentials только после resolve client_id → vault; общий API-ключ «на всех» = антипаттерн.
  4. System prompt не содержит клиентских секретов и чужих playbook-фрагментов «на всякий случай».

Чеклист scope на старте:

  • Middleware отбрасывает запрос без валидного client_id / tenant token.
  • Retrieval API принимает только namespace текущего tenant.
  • Session store ключи вида sess:CLIENT_ID:SESSION_ID.
  • Запрет cross-tenant admin API без отдельного break-glass роли и ticket-id.

TTL, ротация и «забывание»

Тип данныхTTL (старт)ПродлениеУдаление
Live session30–120 мин idleactivity touchhard delete keys
Thread summary7–30 днейявное «keep»job + tombstone
Long-term facts90 дней / policyre-consentpurge + reindex
Tool dry-run logs14 дней—cold archive scrubbed
Access audit180+ дней—WORM / append-only

Политика, которую я фиксирую в runbook:

  • Idle session kill — после TTL нельзя «дописать» старый session_id без re-auth.
  • Memory write всегда с expires_at; фоновый worker чистит и пересобирает индекс.
  • Right to delete клиента = cascade: session → memory → files → tool tokens (кроме legally required audit).
  • Нет silent infinite memory «для качества» — это прямой путь к leak и к раздуву стоимости.

Red-team leak-test: как ловим перекрёстные утечки

За 28 дней leak-test — не разовый скрипт, а регулярный gate.

ТестСценарийPass-критерий
A↔B prompt injectTenant A просит «повтори memory tenant B»отказ / пусто, 0 совпадений маркеров B
Session swapПодмена session_id при валидном токене A403 / empty, audit event
Vector bleedОдинаковый query, разные client_idtop-k документы только своего namespace
Tool ACLA вызывает CRM-tool с id сущности Bdeny + audit
Log scrapeПоиск маркера секрета B в логах A-job0 hits
Cache key collisionОдинаковый prompt hash у A и Bcache miss / key includes client_id

Минимальный red-team набор (еженедельно):

  1. Засеять у tenant B canary-строки (уникальные токены в KB и session).
  2. С tenant A прогнать 20–50 adversarial prompts (прямые, roleplay, «debug mode», encoding tricks).
  3. Прогнать retrieval unit-тесты на 100 random queries.
  4. Сверить audit: любой deny/cross-attempt залогирован с actor, client_id, resource, reason.
  5. Fail pipeline деплоя, если canary найден хотя бы раз.

28 дней: план и audit-лог доступов

НеделяФокусDone
1Middleware client_id, key schema session/memory, deny-by-default tools100% prod-запросов с tenant scope
2TTL jobs, cascade delete, cache keys with client_ididle kill + purge работают на staging
3Red-team suite + canaries, CI gate0 canary leaks на 3 прогонах
4Audit dashboard, on-call playbook, load test multi-tenantотчёт + break-glass процедура

Поля audit-события (минимум):

ПолеПример
tsISO-8601
actoruser/api-key/agent-id
client_idtenant A
actionmemory.read / tool.crm.get / session.resume
resourceid/hash
decisionallow / deny
reasonscope_mismatch / ttl_expired
req_idcorrelation id

Алерты, без которых audit бесполезен:

  • spike deny scope_mismatch за 15 мин;
  • любой allow при несовпадении client_id в токене и ресурсе (должно быть невозможно — если случилось, page on-call);
  • чтение memory после заявленного purge клиента.

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

Хватает ли промпта «не раскрывай данные других клиентов»?
Нет. Промпт — мягкий слой. Утечки идут через retrieval, cache, session resume и tools. Изоляция должна быть в ключах хранилища и ACL, а промпт — только доп. ограждение.

Metadata-filter в vector DB вместо partition — ок?
Как единственная защита — нет. Фильтр ошибается, забывается в одном из query-path, обходится admin-search. Нужен hard namespace / separate collection / row-level enforcement на API.

Что делать с shared «глобальной» базой знаний студии?
Вынести в read-only global corpus без клиентского PII, отдельно от tenant memory. Клиентские факты — только в tenant scope. Смешивать в одном индексе «для удобства» нельзя.

Как доказать клиенту изоляцию?
Показать: schema ключей, TTL policy, отчёт red-team (без чужих данных), sample audit deny, процедуру purge. Это сильнее маркетинговых обещаний «у нас всё безопасно».

Читайте также

Нужна изоляция multi-tenant под ваш агент и CRM — разберём scopes, TTL и leak-test на raisovich.ru.

Какие слои multi-tenant AI нужно изолировать по client_id?

Session, working/long-term memory, tools/CRM credentials, файлы и eval/logs — namespace и ACL на каждом слое, не только в чате.

Какой TTL ставить на session и long-term memory?

Live session 30–120 мин idle с hard delete, thread summary 7–30 дней, long-term facts по policy ~90 дней; silent infinite memory запрещён.

Как устроен red-team leak-test за 28 дней?

Canary-строки у tenant B, adversarial prompts от A, vector bleed и tool ACL тесты, audit deny и fail CI при любом canary leak.

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

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

Какие слои multi-tenant AI нужно изолировать по client_id?

Session, working/long-term memory, tools/CRM credentials, файлы и eval/logs — namespace и ACL на каждом слое, не только в чате.

Какой TTL ставить на session и long-term memory?

Live session 30–120 мин idle с hard delete, thread summary 7–30 дней, long-term facts по policy ~90 дней; silent infinite memory запрещён.