AI CPO — Техническая документация по безопасности

Для ИБ-отделов, архитекторов и технических руководителей

Поле Значение
Версия 2.0
Дата 2026-04-03
Классификация Конфиденциально — для потенциальных клиентов
Контакт roman.neverov@aicpo.ru

1. Архитектура платформы

1.1 Стек

Компонент Технология Версия
Backend Ruby on Rails 8.1
Runtime Ruby 3.3.8
Web server Puma (multi-threaded) 6.x
БД (Cloud/Encrypted) PostgreSQL 16+
БД (Private) PostgreSQL (клиентский) 14+
Кэш Redis 7+
Фоновые задачи SolidQueue
WebSocket ActionCable (Redis adapter)
Assets Propshaft (без Node.js)
Контейнеризация Docker (multi-stage) 24+
Оркестрация docker-compose / Kubernetes

1.2 Архитектурная схема

┌──────────────────────────────────────────────────────────┐
│                    КЛИЕНТСКИЙ КОНТУР                      │
│  (Tier 4: всё внутри / Tier 3: только БД внутри)        │
│                                                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────────┐   │
│  │PostgreSQL│  │  Redis   │  │  LLM (Ollama/vLLM)  │   │
│  │(данные)  │  │ (кэш)   │  │  (клиентская модель) │   │
│  └────┬─────┘  └────┬─────┘  └──────────┬───────────┘   │
│       │              │                    │               │
│       └──────────────┼────────────────────┘               │
│                      │                                    │
│              ┌───────┴────────┐                           │
│              │  AI Product    │                           │
│              │  Builder App   │                           │
│              │  (Docker)      │                           │
│              │                │                           │
│              │ ┌────────────┐ │                           │
│              │ │ Encrypted  │ │                           │
│              │ │ Prompts    │ │                           │
│              │ └────────────┘ │                           │
│              │ ┌────────────┐ │                           │
│              │ │ License    │ │                           │
│              │ │ Validator  │ │                           │
│              │ └────────────┘ │                           │
│              └───────┬────────┘                           │
│                      │                                    │
│              ┌───────┴────────┐                           │
│              │  Reverse Proxy │                           │
│              │  (nginx)       │                           │
│              └───────┬────────┘                           │
│                      │                                    │
└──────────────────────┼────────────────────────────────────┘
                       │
               ┌───────┴────────┐
               │  Браузер       │
               │  (TLS/HTTPS)   │
               └────────────────┘

1.3 Потоки данных по тирам

Tier 2: Encrypted

Браузер ──TLS──→ App Server ──→ AR::Encryption ──→ PostgreSQL (AES-256 at rest)
                     │
                     ├──→ Redis (TTL-limited, no PII)
                     │
                     ├──→ LLM API (OpenRouter/Groq/Anthropic)
                     │    ⚠ Данные отправляются в зашифрованном виде
                     │    ⚠ Отключаемо: DATA_TIER=encrypted → sanitized context
                     │
                     └──→ File Storage (AES-256 encrypted at rest)

Tier 3: Hybrid

Браузер ──TLS──→ App Server (наш контур) ──VPN/WireGuard──→ PostgreSQL (контур клиента)
                     │
                     ├──→ Redis (наш контур, no PII, TTL)
                     │
                     ├──→ LLM API (настраиваемый endpoint)
                     │
                     └──→ File Storage (S3/NFS клиента)

Tier 4: Private (air-gap capable)

Браузер ──TLS──→ nginx ──→ App (Docker) ──→ PostgreSQL (локальный)
                                │
                                ├──→ Redis (локальный)
                                │
                                ├──→ LLM (Ollama/vLLM, локальный)
                                │    ✅ Ноль данных наружу
                                │
                                └──→ File Storage (локальный volume)

Внешние подключения: НОЛЬ (при air-gap)
Опциональные: license server ping (отключаемо, grace 30 дней)

2. Шифрование данных

2.1 Encryption at Rest

Слой Метод Ключ Ротация
Данные в БД ActiveRecord::Encryption, AES-256-GCM ENCRYPTION_PRIMARY_KEY (ENV, предоставляет клиент) Поддержка previous_encryption_key для бесшовной ротации
Файлы AES-256 через ActiveStorage custom service Тот же ENCRYPTION_PRIMARY_KEY При ротации — фоновая перешифровка
Промпты (Tier 4) AES-256-CBC Ключ из JWT лицензии При обновлении лицензии
Redis кэш Не шифруется (не содержит PII, TTL ≤24ч)

2.2 Шифруемые поля

Модель Поля Тип шифрования
workspace_messages content Non-deterministic
workspace_context_facts content Deterministic (для поиска)
workspace_artifacts content Non-deterministic
workspace_project_contacts value Deterministic
workspace_artifact_comments content Non-deterministic
email_messages body Non-deterministic
users email, name Deterministic
crm_leads notes Non-deterministic
workspace_projects name Deterministic
workspace_custom_artifact_requests description Non-deterministic
workspace_org_invites email Deterministic
workspace_artifact_tasks title Non-deterministic
workspace_audit_logs metadata Non-deterministic

Deterministic = можно искать по точному совпадению (WHERE field = value). Non-deterministic = нельзя искать, максимальная безопасность.

2.3 Encryption in Transit

Канал Протокол Сертификат
Браузер → App TLS 1.3 Let's Encrypt (Cloud) / клиентский CA (Private)
App → PostgreSQL TLS (опционально) / VPN (Tier 3)
App → Redis Localhost (Tier 4) / TLS (Tier 2-3)
App → LLM TLS 1.3 Провайдер (Cloud) / localhost (Tier 4)
WebSocket (ActionCable) WSS (TLS) Тот же сертификат

2.4 Ключевое: Zero-Knowledge архитектура (Tier 2+)

При Tier 2+: - Ключ шифрования предоставляет клиент через ENV - Мы не имеем доступа к ключу - Дамп БД без ключа = нечитаемые данные - Бэкапы зашифрованы тем же ключом - При потере ключа данные невосстановимы (by design)


3. Управление доступом

3.1 Аутентификация

Метод Tier 1-2 Tier 3-4 Детали
Email + пароль bcrypt, минимум 8 символов
Google OAuth 2.0 Опционально Требует интернет
Telegram Login Опционально Через Cloudflare Worker relay
SAML 2.0 Roadmap Roadmap Для интеграции с корп. IdP
OIDC Roadmap Roadmap
Domain auto-join Все с @company.ru автоматически в организацию

3.2 Авторизация (RBAC)

Organization
  ├── Owner (1)     — полный контроль вкл. биллинг и удаление
  ├── Admin (N)     — управление командой, инвайты, все проекты
  ├── Editor (N)    — CRUD проектов, артефактов, комментариев, чат с AI
  └── Viewer (N)    — только чтение + комментирование

Проверка доступа: Teams::PermissionService.can?(user, action, resource) — единая точка на уровне контроллера. Скоупинг запросов через organization_id — невозможно получить данные чужой организации.

3.3 Матрица пермишенов

Действие Owner Admin Editor Viewer
Управление организацией
Биллинг
Инвайт/удаление участников
Настройка скоупа проекта
Создание проектов
Чат с AI
Генерация артефактов
Комментирование
@AI в комментариях
Просмотр артефактов
Просмотр аудит-лога
Экспорт данных

3.4 Изоляция данных

Уровень Механизм
Между организациями organization_id скоупинг на уровне SQL. Row-level фильтрация. Невозможно получить данные чужой организации через API
Между проектами в орг visibility: private (только автор), org (вся организация), public
Между юзерами Соло-проекты (organization_id = NULL) изолированы по user_id
Research cache Глобальный shared (ниши, каналы, статьи). НЕ содержит данные организаций. Только публичная информация
Анонимные юзеры Изоляция по session_id. Нет доступа к данным других сессий

4. Аудит и мониторинг

4.1 Аудит-трейл

При audit_enabled = true (Tier 2+):

Что логируется Поля
Каждый CRUD на орг-ресурсах user_id, action (create/read/update/delete), resource_type, resource_id
Контекст ip_address, user_agent, timestamp
Метаданные JSON: старое значение → новое значение (для update)
Иммутабельность Soft-delete only. Записи аудит-лога нельзя удалить или изменить

Хранение: таблица workspace_audit_logs. Экспорт: CSV / JSON. Roadmap: SIEM integration (Splunk, ELK).

AI-трансформация: все AI-взаимодействия (чат, генерация артефактов, @AI комментарии) логируются в аудит-лог. Контролируемая точка входа в AI вместо хаотичного использования ChatGPT сотрудниками.

4.2 Логирование

Уровень Что логируется PII
Production (INFO) HTTP запросы, job execution, errors Редактировано: email → ***@***.ru, content → [REDACTED]
Error Stack traces, exception details Без чувствительных данных в бэктрейсах
Audit Все CRUD операции Только resource_id, не содержимое

4.3 Мониторинг (Tier 4)

Эндпоинт Назначение
GET /up Health check: БД connection + Redis ping
GET /admin/health Детальный статус: jobs queue, disk space, DB size, последний бэкап
ActionCable Websocket status: connected clients

4.4 Штрафы ФЗ-152 (с мая 2025)

С 30 мая 2025 года вступили в силу значительно ужесточённые штрафы за нарушения в области персональных данных:

Нарушение Штраф
Утечка 1K-10K субъектов 3-5 млн ₽
Утечка 10K-100K субъектов 5-10 млн ₽
Утечка 100K+ или биометрия 15-20 млн ₽
Повторная утечка 1-3% годовой выручки (мин 20M, макс 500M ₽)
Обработка без согласия 150-300K ₽ первый раз, 300-500K ₽ повтор
Без уведомления РКН 100-300K ₽
Без уведомления об утечке 1-3 млн ₽

AI CPO Tier 3-4 обеспечивает полное соответствие ФЗ-152: данные не покидают РФ (Tier 3) или контур клиента (Tier 4). Это не абстрактная безопасность — это защита от оборотных штрафов до 500M ₽.


5. LLM и обработка данных

5.1 Централизованный LLM-клиент

Все вызовы LLM проходят через единый LlmGateway:

LlmGateway.complete(
  prompt: "...",
  model: "sonnet",       # alias, routing is automatic
  max_tokens: 2048,
  system: "...",
  temperature: 0.7
)

При установке переменной LLM_BASE_URL все вызовы автоматически направляются на локальный LLM-сервер (Ollama, vLLM, LocalAI) через OpenAI-совместимый API:

Переменная Назначение Пример
LLM_BASE_URL Base URL самохостного LLM http://ollama:11434/v1
LLM_MODEL Имя модели на локальном сервере llama3, qwen2.5, mistral
LLM_API_KEY API-ключ (если требуется сервером) Опционально

5.2 Конфигурация LLM по тирам

Параметр Tier 1 (Cloud) Tier 2 (Encrypted) Tier 3 (Hybrid) Tier 4 (Private)
LLM endpoint OpenRouter (внешний) OpenRouter (внешний) Настраиваемый Локальный (Ollama/vLLM)
Данные в запросе Plaintext Sanitized context Sanitized context Полный контекст (локально)
API ключ Наш Наш Клиентский Клиентский (или без ключа)
Модели Qwen, Gemini, Claude То же То же + клиентские Любые: Llama, Qwen, Mistral, etc.

Важно: на Tier 1-2 данные обрабатываются через API OpenRouter/Groq (серверы в США/ЕС). Системные промпты (методология) не содержат пользовательских данных. Для Tier 2: контент санитизируется перед отправкой (PII redaction). Для полного контроля над данными — Tier 3 (свой LLM endpoint) или Tier 4 (локальные модели, air-gap).

5.3 Какие данные отправляются в LLM

Тип данных Cloud Encrypted+
Системный промпт (методология) ✅ (не содержит user data)
Последние 10 сообщений чата 🔶 Sanitized (без PII)
Извлечённые факты (для артефактов) 🔶 Anonymized
Имя проекта ❌ Masked
Контакты (email, phone) ❌ Никогда ❌ Никогда
Загруженные файлы (содержимое) ✅ (для анализа) 🔶 Только при явном запросе

5.4 Data Processing Agreement

Для Tier 2+: - Подписываем DPA с клиентом - Данные обрабатываются только для предоставления сервиса - Не используем данные клиента для обучения моделей - Данные удаляются по запросу (GDPR Art. 17) - Подпроцессоры: OpenRouter, Groq, Anthropic (только для Tier 1-2, отключаемо) - Для Tier 4: подпроцессоров НЕТ — всё на инфре клиента

5.5 Подготовка к ограничениям иностранных AI-моделей

В России обсуждается ограничение доступа к проприетарным иностранным AI-моделям (ChatGPT, Claude, Gemini). AI CPO готов к любому сценарию:

Сценарий Tier 1-2 Tier 3 Tier 4
Текущее состояние (API доступен) ✅ Groq/OpenRouter ✅ Настраиваемый endpoint ✅ Локальные модели
Блокировка проприетарных моделей ⚠️ Переключение на open-source (Qwen, Llama, Mistral) ✅ Свой endpoint ✅ Полная автономность
Полный air-gap (требование регулятора) ✅ Ноль зависимостей

Tier 4 — единственный вариант, который работает при ЛЮБОМ сценарии ограничений. Рекомендуется для компаний, планирующих на 3+ лет.


6. Защита интеллектуальной собственности (Tier 4)

6.1 Docker image

Защита Что делает
Multi-stage build Финальный image содержит только скомпилированный код (bootsnap cache) + precompiled assets. Нет .rb файлов
Encrypted prompts 44 шаблона промптов зашифрованы AES-256. Дешифровка при запуске ключом из JWT лицензии
No source code Методология Product DNA не доступна в виде читаемого кода
Image signing Docker Content Trust (Notary). Модифицированный image не запустится

6.2 Лицензирование

Параметр Значение
Формат JWT (JSON Web Token), подписанный RS256
Содержимое client_id, max_users, expires_at, data_tier, features[]
Проверка При запуске + каждые 24ч
Offline grace 30 дней без подключения к license server
Hardware bind MAC + hostname при первом запуске. Другой сервер = новый ключ
Обновление Новый JWT доставляется с обновлённым Docker image

7. Развёртывание Tier 4

7.1 Системные требования

Ресурс Минимум Рекомендовано
CPU 4 cores 8 cores
RAM 8 GB 16 GB
Disk 50 GB SSD 100 GB SSD
OS Linux (Ubuntu 22.04+, RHEL 8+) Ubuntu 24.04 LTS
Docker 24.0+ latest
Docker Compose 2.20+ latest

Для локального LLM (Ollama с 7B моделью): дополнительно 16 GB RAM + GPU (опционально, NVIDIA).

7.2 Установка

# 1. Получить docker-compose.yml и .env.template от вендора
# 2. Настроить .env
cp .env.template .env
# Обязательные переменные:
#   APP_DOMAIN=product.yourcompany.ru
#   ENCRYPTION_PRIMARY_KEY=<ваш_ключ_256_bit>
#   LICENSE_JWT=<лицензионный_токен>
#   LLM_BASE_URL=http://ollama:11434/v1  (или ваш endpoint)
#   SECRET_KEY_BASE=<rails_secret>

# 3. Запуск
docker-compose up -d

# 4. Инициализация БД
docker-compose exec app bin/rails db:create db:migrate db:seed

# 5. Проверка
curl -k https://product.yourcompany.ru/up
# → 200 OK

7.3 Обновление

# 1. Получить новый image от вендора
docker-compose pull

# 2. Обновить (zero-downtime)
docker-compose up -d --no-deps app

# 3. Миграции (если есть)
docker-compose exec app bin/rails db:migrate

7.4 Бэкап

# PostgreSQL dump (ежедневно, рекомендовано)
docker-compose exec db pg_dump -U postgres ai_product_builder > backup_$(date +%Y%m%d).sql

# Файлы (загрузки пользователей)
docker cp $(docker-compose ps -q app):/rails/storage ./backup_storage/

8. Инцидент-респонс

8.1 Классификация

Severity Описание SLA ответа Пример
P1 Critical Полная недоступность / утечка данных 30 мин (Tier 4 TAM) App не запускается, данные доступны извне
P2 High Частичная недоступность / потеря функционала Генерация артефактов не работает, но чат работает
P3 Medium Деградация производительности 8 раб. ч Медленная генерация, задержки WebSocket
P4 Low Косметические дефекты 1-2 раб. дня Ошибка в UI, опечатка

8.2 При обнаружении уязвимости

  1. Уведомление клиента в течение 24ч
  2. Патч в течение 72ч (P1) / 7 дней (P2) / 30 дней (P3-P4)
  3. Обновлённый Docker image доставляется в private registry клиента
  4. Post-mortem с root cause analysis

9. Roadmap безопасности

Фича Срок Описание
SSO/SAML 2.0 Q2-Q3 2026 (в разработке) Интеграция с корпоративными IdP (Okta, Azure AD, Keycloak)
SCIM provisioning Q2-Q3 2026 (в разработке) Автоматическое создание/удаление юзеров из IdP
IP whitelist Q2-Q3 2026 (в разработке) Ограничение доступа по IP-адресам
MFA (TOTP) Q2-Q3 2026 (в разработке) Двухфакторная аутентификация
SOC 2 Type II Planned Q4 2026 Сертификация (планируется)
Custom roles Q3 2026 Настраиваемые роли сверх 4 стандартных
SIEM integration Q3 2026 Экспорт аудит-логов в Splunk, ELK, QRadar
Key management Q3 2026 Интеграция с HashiCorp Vault / AWS KMS
Реестр Минцифры В планах Подача заявки. После включения: освобождение от НДС, преференция в госзакупках

10. FAQ для ИБ

Q: Где хранятся данные? A: Зависит от тира. Tier 4: исключительно на вашей инфраструктуре. Ноль данных покидает ваш контур.

Q: Используете ли вы данные клиентов для обучения AI? A: Нет. Мы не обучаем модели на данных клиентов. При Tier 4 мы вообще не имеем доступа к данным.

Q: Что происходит при расторжении контракта? A: Tier 1-3: данные удаляются в течение 30 дней. Экспорт доступен до удаления. Tier 4: Docker image перестаёт работать после истечения лицензии. Данные остаются у клиента в PostgreSQL (вы владеете своими данными).

Q: Можно ли использовать без интернета? A: Tier 4: да, полный air-gap. LLM работает локально (Ollama/vLLM). Offline grace лицензии 30 дней. Ресёрч (поиск в интернете) будет недоступен — только manual input.

Q: Какие подпроцессоры задействованы? A: Tier 1-2: OpenRouter (LLM), Groq (LLM), Anthropic (LLM), российский хостинг-провайдер. Tier 3: только LLM-провайдер по выбору клиента. Tier 4: подпроцессоров нет.

Q: Как проходит обновление? A: Новый Docker image доставляется в private registry клиента. docker-compose pull && docker-compose up -d. Миграции БД автоматические. Rollback: docker-compose up -d --force-recreate с предыдущим image.

Q: Есть ли пентест? A: Планируется Q2 2026. До этого — внутренний security audit + автоматизированные проверки (Brakeman, bundler-audit).


Документ подготовлен для технической оценки. Для демонстрации платформы свяжитесь: roman.neverov@aicpo.ru