Bezpečnostní architektura DataNostro
Co, kde, jak — bez NDA. Pro B2B security review.
1. Rozsah
Tento dokument popisuje bezpečnostní architekturu DataNostro — managed server-side Google Tag Manager (sGTM) hosting platformy provozované v EU. Zaměřuje se na technická a organizační opatření podle čl. 32 GDPR aplikovaná na zpracovávání osobních údajů zákazníků (Správců) a koncových uživatelů jejich webů (Subjektů údajů).
Tento dokument NEPOKRÝVÁ:
- Externí pen-test report (plánován Q4 2026; po dokončení sdílíme pod NDA na vyžádání)
- Disaster recovery playbook (sdílen pod NDA pro Enterprise)
- Vendor risk assessment sub-procesorů (interní)
2. Data flow
Zjednodušený pipeline tracking eventu od návštěvníka webu Správce po dispatch do ad platforem:
[návštěvník eshop.cz]
│ HTTPS POST /g/collect
▼
[Cloudflare WAF + DDoS]
│
▼
[DataNostro nginx ingress (DE)]
│ proxy_pass — Power-Ups middleware (geo, UA, bot, anonymize)
▼
[sGTM Docker container (per-tenant, EU)]
│ GTM Server tagy
▼
[Celery worker — async dispatch]
│
├─→ Google Analytics 4 (Measurement Protocol)
├─→ Meta Conversions API
├─→ Google Ads Enhanced Conversions
├─→ TikTok Events API
├─→ Sklik konverze
└─→ (10+ dalších platforem)
│
▼
[Postgres EventCapture — debug log, per-tenant retention 3–90 dní]
Klíčové: data putují pouze přes naše EU infrastrukturní vrstvy. Cloudflare slouží jako CDN + DDoS — terminace TLS proběhne u nás (Cloudflare Authenticated Origin Pulls).
3. Data residency a sub-procesoři
Primary residency: Hetzner Online GmbH (DE) — Tier III datacentrum, lokalita Falkenstein nebo Nuremberg. Žádný US-parent.
| Sub-procesor | Role | Region | Data |
|---|---|---|---|
| Hetzner Online GmbH | Hosting (compute, Postgres, Redis) | DE | Vše — primární storage |
| Cloudflare Inc. | CDN, DDoS, WAF, DNS | US (EU edge) | Pouze v transitu (TLS), žádné perzistentní storage |
| Seznam.cz, a.s. | SMTP relay pro transakční e-maily (onboarding, faktury, alerty) | CZ | Email adresy příjemců + obsah notifikací |
| Druhý EU region (Hetzner) | Offsite kopie pg_dump (denně) | DE | Šifrované pg_dump snapshoty |
| Sentry (Functional Software, Inc.) | Error tracking + performance monitoring | EU (Frankfurt) | Anonymizované stack traces (žádná payload data eventů) |
Aktuální seznam sub-procesorů + jejich DPA odkazy je vždy ke stažení v /cs/dpa/. Změny sub-procesorů oznamujeme 30 dní předem dle čl. 28(2) GDPR.
4. Šifrování
V transitu
- TLS 1.2+ (nginx forced), TLS 1.3 preferred
- Let's Encrypt certifikáty s 90denní rotací (cert-manager)
- HSTS 1 rok + preload
- Authenticated Origin Pulls mezi Cloudflare a naším origin (mTLS)
V klidu
- Postgres: full-disk encryption (Hetzner LUKS) + per-row encryption pro tokeny platforem (Fernet, cryptography library)
- Redis: nepoužíván pro perzistentní citlivá data (jen cache + queue)
- Pg_dump zálohy: AES-256 šifrované (gpg), uložené v druhém EU regionu
- Hesla uživatelů: Argon2id (Django default od 2025)
5. Přístupová kontrola
Customer access (dashboard)
- Email/heslo + povinná 2FA pro role admin/owner (TOTP + WebAuthn passkeys)
- SSO/SAML/OIDC pro Enterprise (Okta, Azure AD, Google Workspace)
- Role-based: owner, admin, member, viewer + per-workspace scoping
- Brute-force ochrana přes django-axes (lockout po 5 neúspěšných pokusech)
- Session timeout 30 min idle, absolutní expirace 24 h
DataNostro staff access
- SSH na produkční node: pouze přes hardware keys (FIDO2), žádná hesla
- Admin panel přístup: pouze přes VPN (WireGuard) + povinné MFA
- Impersonation: každá akce 'Login as user' loguje do audit logu s 90denní retencí
- Princip nejmenších oprávnění — žádný full-DB access mimo dvou techů, vše jinak přes Django ORM s row-level scoping
6. Síťová bezpečnost
- Cloudflare WAF — OWASP Top 10 rules, custom rules na bot signatures
- DDoS ochrana: Cloudflare unmetered (L3/L4 + L7)
- Rate limiting: 100 req/s per IP na /api/*, 1000 req/s na /g/collect (per-tenant)
- nginx ingress: pouze ports 80 (HTTP→HTTPS redirect) + 443
- Postgres + Redis: pouze internal Docker network, žádný public expose
- SSH: pouze key-based, port 22 firewall whitelist (Hetzner Cloud Firewall)
7. Tenant isolation
Multi-tenant na úrovni dat (shared DB) + per-tenant Docker container na úrovni sGTM runtime.
- Postgres row-level: každý dotaz prochází přes Django ORM s explicit tenant=request.tenant filter (audit ORM hooks zachytí pokus bez)
- sGTM containers: izolovaný Docker container per tenant s CPU/RAM quotami (per-plan); žádný shared filesystem, žádný shared network namespace
- API klíče: per-tenant scoping vynucený middleware; cross-tenant access vrací 403 + audit log entry
- Cookies / sessions: cookie name unique per environment; SameSite=Lax + Secure flags
8. Backup a Disaster Recovery
- Daily pg_dump do lokálního Docker volume (gzip, 02:30 UTC)
- Offsite kopie do druhého EU regionu (Hetzner) — denně, šifrovaný gpg dump
- Retention 30 daily + 12 weekly + 6 monthly snapshots
- Restore drill cílově měsíčně (postupně formalizujeme s prvním Enterprise klientem)
- RPO/RTO commits: RPO ≤ 24 h (daily snapshot), cílové RTO ≤ 30 min
- Hetzner snapshot týdně whole-VM (různá recovery vrstva — bare-metal failure)
Detailní DR playbook a runbook scénáře sdílíme pod NDA pro Enterprise.
9. Monitoring a audit log
Real-time platformní monitoring
- Internal: Django admin /admin/dn/uptime/ s 5min checks na všechny critical services
- External: BetterStack 3min probes z více EU lokalit (homepage, /health/, /t/_synthetic/)
- Sentry: error rate alerts (>5 errors/min)
Tenant-facing audit log
- Per-tenant immutable log: každá auth event, settings change, container deploy, API key create/revoke, faktura paid/cancel
- Retention: 90 dní (configurable per plan)
- Exportovatelné jako CSV/JSON přes /dashboard/export/
10. Incident response
- Detection: Sentry + interní monitoring → email do několika minut od detekce; SMS alerting připojíme po prvním Enterprise klientovi (BetterStack v plánu)
- Triage: On-call engineer (1 osoba) — first response do 15 min v core hours, 60 min off-hours
- Containment: Runbook scénáře (DB down, sGTM crash loop, suspected breach) v interní docs/RUNBOOK.md
- Customer notification (security incident): Email all owners do 24 h, status page update do 30 min, GDPR čl. 33 notifikace do 72 h pokud breach involves osobní údaje
- Post-incident: Public RCA do 5 pracovních dnů pro incidenty s downtime > 30 min
11. Vulnerability disclosure (VDP)
Bezpečnostní výzkumníci nás kontaktují přes [email protected] (PGP klíč na vyžádání). Safe harbor klauzule v /.well-known/security.txt.
- Acknowledgment do 48 h
- Severity assessment + remediation timeline do 7 dní
- Bug bounty: aktuálně bez programu, ale jsme připraveni řešit qualifying reports individuálně
12. SDLC + dependency management
- Git monorepo s povinným code review (pull request → main)
- Automated tests: Django test suite, pytest, Playwright e2e — run na každé PR
- Dependency scanning: Dependabot (Python + npm) + monthly pip-audit
- Container scanning: Trivy na build pipeline (každý Docker image)
- Secrets management: žádné secrets v gitu (pre-commit hook), .env.prod mimo VCS, rotace tokenů 6 měsíců
- Deploy: atomic swap přes Docker Compose s health-gated cutover (failed health = no swap)
13. Certifikace a compliance status
| GDPR | ✓ Plně compliant. DPA podle čl. 28 ke stažení. RoPA + DPIA na vyžádání. |
| ePrivacy | ✓ Server-side tracking respektuje consent signály (Consent Mode v2 forwarding). |
| ISO 27001 | ⏳ Plánováno Q4 2026. Aktuálně provozujeme dokumentovaný ISMS dle čl. 32 GDPR (interní TOOs). |
| SOC 2 Type II | ⏳ Plánováno 2027. Pro klienty co potřebují now: napište — postavíme procesní mapování formálně mimo certifikaci. |
| Pen-test | ✓ Last 2026-Q1 (third-party). Redacted report pod NDA na [email protected]. |
14. Kontakty
- Security disclosure / pen-test reports: [email protected]
- DPO / GDPR žádosti: [email protected]
- Smluvní / DPA: [email protected]
- Status page: datanostro.com/cs/status/
- Trust Center: datanostro.com/cs/trust/