Technische richtlijnen security & privacy
Hoe Aanvraagwijzer uw gegevens beschermt, hoe dat technisch is ingericht, en wat nog niet af is. We beschrijven alleen wat er nu werkelijk is; wat nog komt, staat er zo bij.
Bijgewerkt op 4 november 2026.
Samenvatting
In het kort
- Alle gegevens staan bij Amazon Web Services (AWS) in Frankfurt (eu-central-1). Een kopie van de back-ups staat in Ierland (eu-west-1). Beide in Europa.
- Versleuteld onderweg (HTTPS met HSTS) en in opslag (AES-256).
- Inloggen met een code per e-mail, een wachtwoord, een passkey of Microsoft (Entra ID). Een organisatie kan voor haar medewerkers een passkey of Microsoft verplicht stellen.
- Elk uur een back-up van de database, 35 dagen beschermd tegen wissen. Hersteldoel: hooguit 1 uur aan gegevens kwijt, binnen 4 uur weer in de lucht.
- AI doet een eerste controle van documenten; een medewerker van de gemeente beslist. Ook de AI-verwerking gebeurt in Europa.
- We gebruiken ISO 27001:2022 en de Baseline Informatiebeveiliging Overheid (BIO) als leidraad. Aanvraagwijzer is niet gecertificeerd.
Identiteit en toegang
Manieren van inloggen
- Code per e-mail: zes cijfers, 15 minuten geldig, één keer te gebruiken, maximaal 5 pogingen. Een aanvrager heeft geen wachtwoord nodig.
- Wachtwoord (optioneel): opgeslagen als Argon2id-hash met een eigen salt en een geheime pepper die niet in de database staat. Wachtwoorden die in bekende datalekken voorkomen worden geweigerd; daarvoor verlaten alleen de eerste 5 tekens van de SHA-1-hash de server (k-anonimiteit).
- Passkey (WebAuthn): gebonden aan aanvraagwijzer.nl, dus niet bruikbaar op een nagemaakte site.
- Microsoft Entra ID (OpenID Connect met PKCE), per organisatie: alleen de Microsoft-omgeving die aan de organisatie is gekoppeld, en alleen voor medewerkers die een account of uitnodiging hebben. Een Microsoft-sessie duurt hooguit 12 uur, zodat wie in Entra wordt uitgeschakeld dezelfde dag geen toegang meer heeft.in voorbereiding
Wat een organisatie kan instellen
- “Inloggen met passkey of Microsoft verplicht” voor medewerkers. Wie nog geen passkey heeft, voegt er eerst een toe en heeft tot dan geen medewerkersrechten.
- Inloggen alleen via Microsoft, als de organisatie dat wil.
- Rollen: beheerder en medewerker van de gemeente, en aanvrager. Een aanvrager ziet alleen de eigen aanvragen; medewerkers zien alleen de aanvragen van hun eigen gemeente. Rechten worden op de server gecontroleerd, niet alleen in de browser.
Sessies en misbruik
- De sessie staat in een cookie die alleen de server kan lezen (HttpOnly, Secure, SameSite). In de database staat alleen een hash van het sessietoken. Uitloggen beëindigt de sessie op de server.
- Pogingen zijn beperkt per account en per netwerkadres, bijvoorbeeld 5 wachtwoordpogingen per 15 minuten per account. Wordt een limiet bereikt, dan krijgt ons beheerteam een melding.
- Komt er een passkey of authenticator-app bij een account, dan krijgt de eigenaar daarover direct een e-mail.
- Een e-mail bij inloggen op een nieuw apparaat.
Toegang door ons
- Platformbeheer (wij, over alle organisaties heen) vraagt naast het inloggen een tweede factor: een authenticator-app of passkey, in elke sessie opnieuw, en opnieuw voor gevoelige handelingen als de laatste bevestiging ouder is dan 15 minuten.
- Meekijken in een organisatie (voor ondersteuning) duurt hooguit 2 uur, wordt vastgelegd in het logboek en direct gemeld aan het beheerteam.
- Het AWS-hoofdaccount (root) heeft MFA en geen toegangssleutels.
Opslag en versleuteling
Waar en hoe
- Database (PostgreSQL) op een server in AWS Frankfurt, op een versleutelde schijf (EBS, AES-256). Ook de dagelijkse snapshots van die schijf zijn versleuteld.
- Documenten in Amazon S3 in Frankfurt, versleuteld (AES-256) en zonder publieke toegang. Een bestand is alleen via het portaal op te halen, na controle van de rechten.
- Van elk bestand wordt een SHA-256-vingerafdruk vastgelegd, zodat te bewijzen is dat het niet is veranderd.
- Geheimen (sleutels en wachtwoorden van systemen) staan in AWS Systems Manager Parameter Store, versleuteld met AWS KMS; elke wijziging staat in CloudTrail. Ze staan niet in de code; een scan op elke wijziging controleert dat.
- De geheime sleutel van een authenticator-app wordt versleuteld opgeslagen (AES-256-GCM).
Uploads
- Tot 150 MB per bestand, alleen toegestane bestandstypen. Zip-bestanden worden uitgepakt met grenzen aan grootte en aantal.
- Bestanden worden gelezen in een afgeschermde container zonder internettoegang, zonder toegang tot AWS-rechten en met een alleen-lezen bestandssysteem.
Netwerk
Wat er openstaat
- Alleen poort 443 (HTTPS) en poort 80 (doorsturen naar HTTPS en het vernieuwen van certificaten). Geen SSH: beheer van de server loopt via AWS Systems Manager.
- HTTPS met certificaten van Let's Encrypt en HSTS (1 jaar, inclusief subdomeinen).
- Beveiligingsheaders op elke pagina: Content-Security-Policy, framen door andere sites geweigerd, nosniff, Referrer-Policy, en geen toegang tot camera, microfoon of locatie.
- Verzoeken mogen hooguit 10 MB zijn, behalve op de uploadadressen.
Op de server
- Instance-metadata alleen via IMDSv2.
- Elk onderdeel draait in een eigen container met zo min mogelijk rechten (geen extra Linux-rechten, geen rechtenverhoging) en een geheugengrens.
Wat eraan komt
- AWS CloudFront met AWS WAF voor de site: filters van AWS tegen bekende aanvalspatronen en adressen met een slechte reputatie, en een limiet op het aantal verzoeken per adres, strenger op de inlogpagina. Daarna is de server alleen via CloudFront bereikbaar.in uitrol
- VPC Flow Logs: een registratie van het netwerkverkeer van de server.
Logging en monitoring
In het portaal
- Per project en per organisatie een logboek: wie wat indiende, controleerde, besloot of wijzigde, en wanneer.
- Bij inloggen en bij handelingen van platformbeheer wordt het netwerkadres bewaard, voor onderzoek na een incident. Na 90 dagen wordt het adres verwijderd.
- Vastleggen wie een document bekijkt of downloadt.
Op de server en in AWS
- De logs van alle onderdelen gaan naar Amazon CloudWatch Logs en worden 1 jaar bewaard. De server kan er alleen aan toevoegen, niet in wissen.
- Een log van elk verzoek aan de webserver, zonder cookies, inloggegevens en adres van de pagina, en met een ingekort netwerkadres (alleen het netwerk, niet het volledige adres).
- AWS CloudTrail legt elke handeling in het AWS-account vast, in alle regio's, met een controle dat de logbestanden niet zijn aangepast. 1 jaar bewaard.
- Amazon GuardDuty zoekt naar verdachte activiteit. Bevindingen en elke login met het AWS-hoofdaccount gaan direct per e-mail naar het beheerteam.
- Elke 10 minuten een automatische controle of het portaal werkt en of de laatste back-up recent is.
- Foutmeldingen gaan naar Sentry (opslag in Frankfurt), met zo min mogelijk persoonsgegevens: geen gebruikers, cookies, headers, formulierinhoud of AI-invoer, en e-mailadressen worden gemaskeerd.
- Volledige netwerkadressen komen niet in de serverlogs en niet in meldingen aan het beheerteam; alleen in het logboek van het portaal, 90 dagen.
Back-up en herstel
Wat we bewaren
- De database elk uur (2 dagen bewaard) en elke dag (35 dagen bewaard, daarna binnen 36 dagen definitief gewist), in een aparte S3-bucket in Frankfurt.
- Die back-ups zijn 35 dagen vergrendeld (S3 Object Lock). De server kan back-ups alleen toevoegen, niet lezen of wissen; wie de server overneemt, kan de back-ups dus niet weggooien.
- Een kopie van elke back-up in Ierland (eu-west-1), met dezelfde bescherming, voor als Frankfurt in zijn geheel uitvalt.
- Documenten: S3 bewaart ze in meerdere datacenters; een gewiste of overschreven versie is 30 dagen terug te halen.
- Elke nacht een snapshot van de serverschijf, 7 bewaard.
Herstel
- Doelen: hooguit 1 uur aan databasegegevens kwijt (RPO), en binnen 4 uur weer in de lucht (RTO).
- Een schriftelijk herstelplan voor drie gevallen: een fout in de gegevens, een kapotte of overgenomen server, en uitval van heel Frankfurt. In dat laatste geval zijn documenten pas weer te openen als Frankfurt terug is.
- Elk kwartaal een hersteltest: de nieuwste back-up terugzetten in een aparte database en per tabel het aantal rijen vergelijken. Laatste test: 4 november 2026, geslaagd, terugzetten in 7 seconden. De eerste poging die dag vond een fout in het ophalen van back-ups; die is opgelost en daarna opnieuw getest.
Ontwikkeling en uitrol
Van wijziging naar productie
- Elke wijziging gaat door een typecontrole, automatische tests en een controle op kwetsbare afhankelijkheden. Een kritieke kwetsbaarheid houdt de uitrol tegen.
- Uitrollen gebeurt via GitHub Actions met kortlevende AWS-rechten (OpenID Connect). Er staan geen AWS-sleutels in GitHub. De server haalt de nieuwe versie op via AWS Systems Manager, niet via SSH.
Scans en updates
- Bij elke wijziging en elke week: npm audit en pip-audit (bekende kwetsbaarheden), gitleaks (per ongeluk opgeslagen geheimen, over de hele geschiedenis) en Trivy (afhankelijkheden en de instellingen van Docker en Terraform).
- Dependabot stelt elke week updates van afhankelijkheden, images en GitHub Actions voor.
- Basis-images van containers en de gebruikte GitHub Actions zijn vastgezet op een exacte versie (digest of commit), zodat er niet ongemerkt iets anders wordt gebruikt.
Infrastructuur als code
- De AWS-inrichting (server, netwerkregels, rechten, opslag, monitoring) is beschreven in Terraform.
- Elke wijziging aan de infrastructuur alleen nog via Terraform, met een vooraf beoordeeld plan.in uitrol
AI
Wat AI doet
- Claude (van Anthropic) doet een eerste controle van een document en laat zien wat er nog mist. Een medewerker van de gemeente beslist altijd; dat wordt per document vastgelegd.
- De AI-verwerking gaat via Amazon Bedrock (AWS), met de EU-variant van de modellen: alleen in AWS-regio's in Europa. Bedrock bewaart verzoeken niet (afgezien van de geautomatiseerde misbruikdetectie van AWS) en Anthropic krijgt ze niet te zien.
- Wat er naar het model gaat, hoe fouten worden opgevangen en meer: zie het AI-beleid.
Privacy (AVG)
Rollen en afspraken
- De organisatie die Aanvraagwijzer gebruikt (bijvoorbeeld een gemeente) is verwerkingsverantwoordelijke; wij verwerken de gegevens in haar opdracht.
- Een verwerkersovereenkomst is op aanvraag beschikbaar.
Welke gegevens
- Van gebruikers: naam, e-mailadres, en als ze die invullen telefoonnummer en bedrijf.
- Van projecten: het intakeformulier, de aangeleverde documenten, controles, besluiten en berichten.
- Alleen cookies die nodig zijn om het portaal te laten werken; daarvoor is geen toestemming nodig. Geen advertentie- of volgcookies, geen bezoekersstatistieken van derden.
Cookies
- tng_session: houdt u ingelogd (tot u uitlogt of de sessie verloopt).
- tng_locale: onthoudt of u het portaal in het Nederlands of Engels gebruikt.
- tng_device: een willekeurig nummer voor deze browser (2 jaar), zodat u een e-mail krijgt als iemand op een nieuw apparaat met uw account inlogt.
- tng_pending, tng_after_login, tng_passkey, tng_reconfirmed, tng_broker, tng_entra en tng_broker_link: houden een inlogstap of bevestiging een paar minuten vast.
- tng_platform_look en tng_demo_back: alleen voor ons beheerteam, als het voor ondersteuning meekijkt.
Subverwerkers
Wie Waarvoor Waar Grondslag bij doorgifte Amazon Web Services EMEA SARL (Luxemburg) Hosting, opslag, back-ups, e-mail versturen (SES) en de AI-controle (Bedrock) Frankfurt; back-upkopie in Ierland; AI in AWS-regio's in Europa Moederbedrijf in de VS: de AWS-verwerkersovereenkomst met standaardcontractbepalingen (SCC) en het EU-VS Data Privacy Framework Functional Software, Inc. (Sentry) Foutmeldingen, met zo min mogelijk persoonsgegevens Frankfurt (EU-regio van Sentry) Bedrijf in de VS: SCC en het EU-VS Data Privacy Framework (te bevestigen in de Sentry-overeenkomst) Google Cloud EMEA Ltd (Google Workspace) De mailbox van ons contactadres: vragen, meldingen en automatische storingsmeldingen Opslaglocatie volgens Google Workspace (te bevestigen) Moederbedrijf in de VS: SCC en het EU-VS Data Privacy Framework Mistral AI SAS (Parijs) Alleen als een organisatie kiest voor een uitsluitend Europese AI-aanbieder (in voorbereiding) Europa Binnen de EER; geen doorgifte Ons eigen beheer (directeur in het Verenigd Koninkrijk) Ondersteuning en beheer: toegang tot het portaal en de servers op afstand, met een tweede factor Toegang vanuit het Verenigd Koninkrijk; de gegevens blijven in Frankfurt Adequaatheidsbesluit van de Europese Commissie voor het Verenigd Koninkrijk - E-mail van het portaal is ondertekend met DKIM en gecontroleerd met SPF en DMARC.
- Het zoeken van een adres gaat vanuit uw browser rechtstreeks naar de PDOK Locatieserver van de Nederlandse overheid (Kadaster); dat is geen subverwerker van ons.
- Een nieuwe subverwerker melden we vooraf aan de organisaties die het portaal gebruiken, zoals de verwerkersovereenkomst bepaalt.
Bewaartermijnen
- Projecten: standaard 730 dagen na de laatste activiteit (upload, besluit of reactie). De beheerders krijgen 30 dagen vooraf bericht; daarna gaat het project naar de prullenbak en wordt het na 30 dagen met alle bestanden gewist. Per organisatie instelbaar.
- Projecten in de prullenbak: na 30 dagen definitief gewist.
- Netwerkadressen bij inloggen en platformbeheer, in het logboek van het portaal: 90 dagen.
- Verzonden e-mails in ons e-maillogboek: 30 dagen.
- Afgeronde achtergrondtaken (zoals een controle of e-mail): 30 dagen.
- Mislukte achtergrondtaken, met hun foutmelding: 90 dagen.
- Gelezen meldingen in het portaal: 180 dagen.
- Ongelezen meldingen in het portaal: 365 dagen.
- Inlogregels in het logboek (wie wanneer inlogde of het probeerde): 365 dagen.
- Tellingen van AI-gebruik (zonder documentinhoud), voor de jaarafrekening: 395 dagen.
- Vragen en meldingen via de hulppagina: 730 dagen.
- Accounts zonder toegang tot een organisatie of project en zonder activiteit: daarna geanonimiseerd: 365 dagen.
- Serverlogs en AWS-logs: 1 jaar, met ingekorte netwerkadressen.
- Wissen in het portaal haalt gegevens niet meteen uit de back-ups; die verlopen vanzelf en zijn na hooguit 71 dagen definitief weg (35 dagen bewaard, daarna nog tot 36 dagen als oude versie). Een gewiste versie van een bestand is na ongeveer 30 dagen weg.
Rechten van betrokkenen
- Vraagt iemand om inzage in of verwijdering van zijn gegevens, dan helpen wij de organisatie die het portaal gebruikt dat te beantwoorden.
- Een beheerder van de organisatie exporteert alle gegevens over één persoon in één bestand, en kan die persoon wissen, als die persoon alleen voor deze organisatie in het portaal staat. Werkt iemand ook met een andere organisatie, dan regelt ons beheerteam het verzoek met beide.
- Wissen haalt alles weg waaraan iemand te herkennen is: naam, e-mailadres, telefoon, bedrijf, inlogmiddelen, meldingen en de persoonsgegevens in het logboek. Wat iemand in een project deed (een upload, een besluit, een bericht) blijft bij dat project staan als 'Verwijderde gebruiker', zodat het dossier compleet blijft; dat verdwijnt met het project.
Exit: aan het einde van het contract
- Een beheerder exporteert zelf alle gegevens van de organisatie in één zip: alle projecten machine-leesbaar (JSON), elk dossier leesbaar (HTML), en elke versie van elk bestand ongewijzigd, met SHA-256 als bewijs.
- Op de einddatum stopt de toegang. 30 dagen later wissen we alle gegevens, tenzij anders afgesproken, en sturen we een schriftelijke bevestiging.
Wat we nog doen
Eerlijk over wat nog niet af is:
Nu in uitrol
- AWS CloudFront en AWS WAF voor de site.
- Alle wijzigingen aan de infrastructuur via Terraform, met review.
In voorbereiding
- Inloggen met Microsoft wordt per organisatie ingericht.
- Beheertoegang tot AWS via IAM Identity Center met verplichte MFA, zodat er geen vaste toegangssleutels meer nodig zijn.
- Een vaste procedure (script) voor het wissen van een hele organisatie bij vertrek; nu voert een ontwikkelaar dit uit en legt vast wie het deed en wanneer.
- Kleinere aanscherpingen uit onze eigen controle, zoals nauwere rechten voor de server en bescherming tegen het per ongeluk verwijderen van de server.
Niet gedaan
- Aanvraagwijzer heeft geen ISO 27001-certificaat.
- Er is nog geen onafhankelijke penetratietest uitgevoerd.
Contact
Vragen
- Over beveiliging, privacy of de verwerkersovereenkomst: info@aanvraagwijzer.nl.
- Vragen over uw eigen aanvraag stelt u aan uw gemeente.
Kwetsbaarheid gevonden?
- Mail het naar info@aanvraagwijzer.nl, met wat u deed en wat u zag. We reageren binnen 5 werkdagen.
- Bekijk of wijzig geen gegevens van anderen, verstoor de dienst niet, en maak de kwetsbaarheid niet openbaar voordat we die hebben kunnen oplossen.
- Ook te vinden in /.well-known/security.txt.