Безопасность

Безопасность как инвариант, не как фича.

Multi-tenancy boundary на AST. mTLS-агенты с авторотацией. Audit log без редактирования. Подробности — ниже.

Архитектурные инварианты

  1. Каждый VM query проходит через composeQuery или rewritePromQL.Оба инжектят organization_id как mandatory matcher. Raw-query path для user input отсутствует. Bypassing leaks data across tenants — этого не может произойти.
  2. Embed JWT model. API keys (mk_*) выпускают короткоживущие JWT, в claims которых зашиты mandatory filters. Embed query handlers извлекают filters из claims, никогда не из URL params. Spoof через crafted URL структурно невозможен.
  3. Secrets via SecretBox (AES-256-GCM). OAuth tokens, channel signing secrets, embed signing keys хранятся зашифрованными мастер-ключом из ${CA_DIR}/secrets.key. Plaintext не попадает в логи.
  4. Agent identity = verified peer cert. Не header, не body. mTLS-валидация на уровне server TLS config, не в application коде.
  5. JWT keys ротируются с kid header. Несколько signing keys одновременно в памяти при rotation. KeyRevocator инвалидирует выпущенные JWT преждевременно при необходимости.
  6. Public dashboard tokens никогда не принимают org_id из URL.Org_id резолвится server-side из token row. Hand-crafted URLs не могут pivot между orgs.
  7. SCIM-managed users не удаляются из cabinet UI. Иначе IdP re-provisionил бы их на следующем sync — бесконечный цикл. Флаг memberships.scim_managed enforces это.

Authentication

  • Cookie sessions с CSRF double-submit pattern
  • Password + bcrypt для базового login
  • TOTP 2FA через RFC 6238
  • WebAuthn passkeys (go-webauthn)
  • OAuth: GitHub, Google, Apple Sign-In
  • Magic link для passwordless
  • SCIM 2.0 для автопровизионинга из IdP

Transport security

  • Cabinet HTTPS — TLS 1.2+, HSTS включён в production
  • mTLS ingest — отдельный listener, обязательная клиентская аутентификация
  • Сертификаты агентов — TTL 24 часа, авторотация
  • CA для агентов — встроенный, не публичный CA

Data at rest

  • Postgres — encryption-at-rest на уровне диска (managed-предложение) или приложения (SecretBox для секретов)
  • VictoriaMetrics — encryption-at-rest на уровне диска (LUKS / cloud KMS)
  • Backup — encrypted с собственным ключом, не shared

Compliance

Managed-предложение работает над SOC2 Type II (ожидаемое завершение Q4 2026) и ISO 27001 (Q2 2027). DPA доступен по запросу для всех платных тарифов. BAA для healthcare-клиентов — на Enterprise.

Disclosure policy

Если вы нашли уязвимость, пишите на [email protected]. PGP-fingerprint доступен по запросу. Мы отвечаем в течение 48 часов.

  • Critical / RCE / data leak / auth bypass — patch в течение 7 дней
  • High — patch в течение 30 дней
  • Medium — patch в течение 90 дней
  • Low — в ближайший release

Public disclosure — после release fix. С вашим credit, если хотите. Bounty выплачивается за серьёзные находки.

Subprocessors

Managed Unimoni использует следующих subprocessors. Полный список с purpose и data scope — в DPA-документе.

  • AWS — инфраструктурный hosting (US, EU regions)
  • Stripe — payment processing
  • SES — transactional email
  • Cloudflare — CDN + DDoS protection
  • Postmark — backup transactional email