1. Vertrouwelijkheid
De verwerker drijft een eenmanszaak zonder extra medewerkers met toegang tot gegevens. Alle ingezette subverwerkers (zie verwerkersovereenkomst § 7) zijn tot vertrouwelijkheid verplicht. De eigen apparaten (ontwikkelwerkstations) zijn met FileVault versleuteld, beveiligd met Touch ID en sterke wachtwoorden en voorzien van een automatische schermvergrendeling.
2. Pseudonimisering (art. 32 lid 1 sub a AVG)
- In logs worden e-mailadressen niet in platte tekst, maar
uitsluitend als
tenant_idof geanonimiseerde gebruikers-ID aangeduid (maskering in pino-logs). - IP-adressen worden voor rate limiting gehasht met een geheime
IP_HASH_SALT(HMAC-SHA-256); de oorspronkelijke IP’s worden niet blijvend opgeslagen. - IPv4 wordt genormaliseerd naar /32, IPv6 naar /64, om de herleidbaarheid verder te beperken.
3. Versleuteling (art. 32 lid 1 sub a AVG)
3.1 Versleuteling tijdens transport
- Alle verbindingen: HTTPS / TLS 1.2+ (HSTS ingeschakeld).
- SMTP-verbindingen naar IONOS via STARTTLS, TLS 1.2+ afgedwongen.
- Databaseverbindingen intern via UNIX-socket of TLS.
3.2 Versleuteling in rust
- OAuth-tokens (social media): AES-256-GCM
“envelope encryption” met geversioneerde sleutels
(
ENCRYPTION_KEY,ENCRYPTION_KEY_V2…V16). Formaat:v{N}:iv:tag:ct. De AAD-context is gebonden aantenantId:socialAccountId:platform— manipulatie van de rijcontext laat het ontsleutelen mislukken. - Wachtwoorden: Argon2id met OWASP-2024-parameters
(
m=19456 KiB, t=2, p=1). Legacy-bcrypt-hashes worden bij het inloggen herkend en transparant opnieuw gehasht naar Argon2id. - Versleuteling van VM-schijven: De IONOS-cloudinfrastructuur biedt schijfversleuteling op providerniveau.
- Secrets:
.env-bestanden uitsluitend met bestandsrechten0600, nooit in de Git-repository.
4. Toegangscontrole (fysiek / infrastructuur)
- Het productiesysteem draait in de IONOS-datacenters in Duitsland (gecertificeerd volgens ISO 27001 en ISO 22301). Fysieke toegang is aan de kant van de provider beveiligd (24/7-beveiligingsdienst, biometrie, camerabewaking).
- SSH-toegang tot de servers:
uitsluitend via public key (geen wachtwoordlogin),
via een niet-standaard SSH-poort (2222),
met Fail2ban tegen brute force
en met afdwinging van
IdentitiesOnly=yes. - De firewall (firewalld) beperkt inkomende verbindingen tot poort 2222 (SSH), 80 (HTTP-redirect naar HTTPS) en 443 (HTTPS).
- SELinux in enforcing-modus.
5. Autorisatiecontrole (applicatieniveau)
- Authenticatie: e-mail + wachtwoord (Argon2id)
of SSO (Google / Microsoft / Apple). JWT-gebaseerde sessietokens
met
ES256-handtekeningen enkid-rotatie (CURRENT + optioneel PREVIOUS-sleutelslot voor rotatie zonder downtime). - Refresh-tokenrotatie: family-gebaseerde rotatie
met een grace-venster van 10 seconden in Redis; ≥3 grace-hits van dezelfde
oude token-ID leiden tot
theft_detecteden een family-revoke. - Multi-tenantisolatie via Postgres Row-Level Security (RLS):
App-verbindingen draaien onder de DB-rol
castloop_app(zonder BYPASSRLS). Elke transactie zetapp.tenant_idviaSET LOCAL. Migraties draaien ondercastloop_migrator(met BYPASSRLS). Zelfs een SQL-injectie kan niet buiten de eigen tenantscope komen (defense in depth). - Rate limiting: Redis-Lua-script (atomische check + increment) tegen brute force en misbruik.
- CSRF: SameSite-Strict-cookies + CSRF-tokens.
- CSP: Content-Security-Policy met nonce per request
en
strict-dynamic, voorkomt XSS. - SSH-toegang tot de server: alleen één beheerder (de eigenaar).
6. Scheidingscontrole
- Gescheiden databases per project op de gedeelde server
(eigen Postgres-DB
castloopmet eigen gebruikercastloop_user, geen toegang tot andere DB’s). - Productie-, staging- en ontwikkelomgevingen zijn van elkaar gescheiden; productiesecrets komen nooit in staging/dev terecht.
- Mollie key-strict-modus: in productie uitsluitend
live_*-sleutels, in staging/dev uitsluitendtest_*-sleutels — afgedwongen via zodsuperRefine.
7. Integriteit (art. 32 lid 1 sub b AVG)
- RLS voorkomt manipulatie van gegevens tussen tenants (zie 5).
- Postgres advisory locks (sleutel
821912301) schermen Drizzle-migraties af — twee parallelle deploys kunnen niet tegelijk migreren. - AAD-gebonden versleuteling van OAuth-tokens: manipulatie van de rijcontext laat het ontsleutelen mislukken (integriteitsbescherming via de AES-GCM-tag).
- Idempotentie van Mollie-webhooks: aparte
mollie_webhook_events-tabel met idempotentiesleutel(resource_id, payload_hash)(sha256 over canonical JSON). - Invoervalidatie aan client- en serverzijde (zod-schema’s).
8. Beschikbaarheid
- pm2 auto-restart:
castloop-api,castloop-workerencastloop-appdraaien onder pm2-supervisie en starten bij een crash automatisch opnieuw. - Graceful shutdown: SIGTERM/SIGINT laten
HTTP-requests en BullMQ-jobs leeglopen; hard begrensd door
SHUTDOWN_TIMEOUT_MS. - Healthcheck-endpoint voor monitoring.
- Gegevensback-up: dagelijkse back-up van de database en de opgeslagen bestanden, lokaal 14 dagen bewaard en aanvullend versleuteld (restic) opgeslagen in de objectopslag van IONOS SE (dagelijkse back-ups 14 dagen, wekelijkse 8 weken, maandelijkse 12 maanden). Mislukte of uitblijvende back-ups leiden tot een alarmmail. Daarnaast zijn er dagelijks roterende VM-snapshots (door IONOS beheerd).
9. Veerkracht
- Rate limiting beschermt tegen overbelasting.
- BullMQ met retrymechanismen (exponential backoff) voor het renderen van clips en platformpublicatie.
- Mollie-ingest orphan-sweeper (interval 60 s, grace 120 s, BullMQ-jobId=eventId-dedupe) voorkomt betalingsdrift bij uitgevallen webhooks.
- Onafhankelijke ioredis-verbindingen voor BullMQ en app-code voorkomen key-prefixbotsingen.
10. Herstelbaarheid (art. 32 lid 1 sub c AVG)
- Dagelijkse, versleutelde database- en bestandsback-ups met geteste herstelprocedure, plus dagelijks roterende VM-snapshots (door IONOS beheerd).
- Deployment via Git + rsync maakt een rollback naar een eerdere commit binnen enkele minuten mogelijk.
- Idempotente migraties met advisory lock maken een veilige herhaling mogelijk bij gedeeltelijke uitval.
11. Procedure voor regelmatige toetsing
- Dependency-updates (
npm audit, Dependabot) ten minste maandelijks. - OS-patches (AlmaLinux) ten minste maandelijks.
- Logmonitoring: pino-logs met maskering van gevoelige velden
(wachtwoorden, tokens, JWT’s,
authorization/cookie-headers, API-sleutels,DATABASE_URL,REDIS_URL,SMTP_PASS). - Jaarlijkse interne TOM-review, zo nodig aanpassing aan de stand van de techniek.
- Indien nodig / op verzoek van de klant externe penetratietests.
12. Opdrachtcontrole
- Schriftelijke verwerkersovereenkomsten met alle ingezette subverwerkers (zie verwerkersovereenkomst § 7), voor zover zij privacyrechtelijk als verwerker moeten worden aangemerkt.
- Gedocumenteerde instructiekanalen: klantdashboard, contractpakket algemene voorwaarden/verwerkersovereenkomst, vormvrije e-mail aan info@castloop.de.
- Geen inzet van andere subverwerkers zonder aankondiging aan de klant 30 dagen van tevoren (zie verwerkersovereenkomst § 7).