Безопасность
Безопасность как инвариант, не как фича.
Multi-tenancy boundary на AST. mTLS-агенты с авторотацией. Audit log без редактирования. Подробности — ниже.
Архитектурные инварианты
- Каждый VM query проходит через composeQuery или rewritePromQL.Оба инжектят organization_id как mandatory matcher. Raw-query path для user input отсутствует. Bypassing leaks data across tenants — этого не может произойти.
- Embed JWT model. API keys (mk_*) выпускают короткоживущие JWT, в claims которых зашиты mandatory filters. Embed query handlers извлекают filters из claims, никогда не из URL params. Spoof через crafted URL структурно невозможен.
- Secrets via SecretBox (AES-256-GCM). OAuth tokens, channel signing secrets, embed signing keys хранятся зашифрованными мастер-ключом из
${CA_DIR}/secrets.key. Plaintext не попадает в логи. - Agent identity = verified peer cert. Не header, не body. mTLS-валидация на уровне server TLS config, не в application коде.
- JWT keys ротируются с kid header. Несколько signing keys одновременно в памяти при rotation. KeyRevocator инвалидирует выпущенные JWT преждевременно при необходимости.
- Public dashboard tokens никогда не принимают org_id из URL.Org_id резолвится server-side из token row. Hand-crafted URLs не могут pivot между orgs.
- 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