Deze sectie beschrijft de infrastructuurkeuzes die specifiek zijn voor de Profiel Service. Voor de algemene MOZa-infrastructuur (Standaard Platform van Logius, Kubernetes, klantomgeving, multi-DC) wordt verwezen naar het systeemwijde §09 Infrastructuur Architectuur.
De Profiel Service draait op het Standaard Platform van Logius. Concrete cluster- en namespace-toewijzing staat beschreven in §10 Deployment. Deze sectie richt zich uitsluitend op infrastructuurelementen die voor de Profiel Service architectonisch significant zijn.
Toegang tot de Profiel Service is op twee niveaus geauthenticeerd:
De aanroeper staat dus in voor de eigen identiteit (afgedwongen door de gateway); een eventuele eindgebruikersidentiteit wordt onafhankelijk door de Profiel Service geverifieerd voordat er namens die eindgebruiker een gegevensbewerking plaatsvindt. Autorisatie volgt uit beide identiteiten samen: de organisatie-identiteit bepaalt welke dienstverlener handelt en dus welke gegevens binnen bereik liggen, de eindgebruikersidentiteit bepaalt namens welke partij gehandeld wordt.
De service is voorzien om gehost te worden in de Logius Private Cloud (LPC). Op netwerkniveau hanteert LPC een whitelist: alleen verbindingen die binnenkomen via een FTV-gevalideerde aanroep worden toegelaten. Verkeer dat niet via FTV is geauthenticeerd komt het cluster überhaupt niet binnen, los van wat de gateway en de service zelf doen. Hiermee zit FTV op twee niveaus in de toegangsbeslissing: als netwerkfilter op de LPC-rand en als applicatieve tokenvalidatie op de gateway.
De gateway valideert vervolgens op basis van:
Elke aanroep van de Profiel Service is daarmee een service-to-service-aanroep, ook wanneer er uiteindelijk een ingelogde eindgebruiker achter zit. Twee typen aanroepers zijn relevant:
In beide gevallen handhaaft de gateway op basis van het FSC-contract van de aanroepende partij en het bijbehorende FTV-token. De Profiel Service zelf maakt geen onderscheid op netwerkniveau tussen "portaalverkeer" en "dienstverlenerverkeer".
Een uitgebreide beschrijving van FSC, FTV en hun samenhang met FDS en LDV staat in de bijlage Logging, Toegang en Doelbinding.
De gegevens in de Profiel Service zijn per dienstverlener gescheiden: toewijzingen en voorkeuren die binnen de scope van de ene dienstverlener vallen, zijn voor een andere dienstverlener niet benaderbaar. De Profiel Service dwingt die scheiding zelf af:
Het FSC-access-token bevat de organisatie-identiteit als geverifieerde claim (sub = PeerID = OIN), gebonden aan het PKIoverheid-certificaat van de aanroeper. De gateway geeft het gevalideerde token door aan de Profiel Service; de fsc-core-specificatie (v2.0.0, §4.7.1.3 Routing) schrijft voor dat de Inway de Fsc-Authorization-header niet verwijdert bij het doorsturen naar de service. De service hervalideert het token per request (handtekening, iss, exp/nbf) en leest de OIN uit de sub-claim; het token is ondertekend door de Manager aan aanbiederszijde, dus die validatie kent geen externe sleutelafhankelijkheid. De certificaatbinding (cnf) wordt op de gateway afgedwongen, waar de mTLS-verbinding termineert.
Kanttekening: voor een toekomstige versie worden quota en anomaliedetectie per OIN op de GET-endpoints overwogen, om grootschalig uitlezen door een gecompromitteerd afnemersysteem te begrenzen en vroegtijdig te signaleren. De LDV-verslaglegging maakt zulk gebruik al per aanroep herleidbaar.
Wanneer een aanroep namens een eindgebruiker plaatsvindt, stuurt de aanroeper een JWT mee dat die eindgebruiker identificeert. De Profiel Service valideert dit JWT dan lokaal tegen de JSON Web Key Set (JWKS) van de uitgevende identity provider en gebruikt het gevalideerde subject (BSN, KvK of RSIN) als sleutel voor de gegevensbewerking. Aanroepen die een dienstverlener op eigen titel doet, bevatten geen subject-JWT.
aud-claim de Profiel Service-identifier bevat. Dit voorkomt dat een token dat een eindgebruiker bij een andere dienst heeft verkregen, door die partij bij de Profiel Service wordt hergebruikt. Een token uit de inlogflow van een eigen portaal van een dienstverlener is uitgegeven aan die portaal-client en voldoet daar niet vanzelf aan; hoe zo'n portaal een voor de Profiel Service geldig token verkrijgt (bijvoorbeeld token exchange bij de makelaar) wordt nog uitgewerkt.iss-waarde en de bijbehorende JWKS-URL. De iss-claim in het binnenkomende JWT bepaalt welke JWKS gebruikt wordt voor signature-verificatie.iss tegen de configuratielijst, de aud op aanwezigheid van de Profiel Service-identifier, en exp/nbf op tijdsgeldigheid. Een ongeldig JWT wordt altijd afgewezen met HTTP 401. Voor aanroepen die namens een eindgebruiker plaatsvinden is een geldig JWT verplicht; ontbreekt het daar, dan wordt het verzoek eveneens afgewezen.quarkus-smallrye-jwt levert signature-verificatie, JWKS-caching en claim-extractie. Voor automatische tests gebruiken we quarkus-test-security-jwt om JWT's lokaal te genereren zonder een echte IdP-roundtrip.Subject-validatie geldt voor elke aanroep die namens een eindgebruiker plaatsvindt, ongeacht of het om een lees- of schrijfendpoint gaat. Wijzigingen van partijgegevens gebeuren altijd namens een eindgebruiker en dragen dus altijd een subject-JWT. Aanroepen die een dienstverlener op eigen titel doet, kennen geen subject-JWT en worden uitsluitend op aanroeperniveau geautoriseerd (FSC/FTV en de autorisatie op dienstverlenerniveau).
iss-waarden of JWKS-URLs gaan via configuratie, niet via codewijzigingen.De Profiel Service maakt gebruik van enkele soorten Kubernetes Secret-resources:
IDENTIFICATIE.IdentificatieNummer en CONTACTGEGEVEN.Waarde (zie §08 Data, Encryptie en opslag).Al deze secrets worden opgeslagen als Sealed Secrets in de infrastructuur-repository van het Standaard Platform op GitLab. De werking is als volgt:
Secret-manifest met de gewenste waarde.kubeseal CLI tot een SealedSecret. De waarde is hierna uitsluitend in versleutelde vorm aanwezig en buiten het cluster nergens leesbaar.SealedSecret-manifest naar de GitLab infrastructuur-repository.SealedSecret uit naar het cluster.Secret, die als environment variable of mounted volume aan de Profiel Service-pod beschikbaar komt.Implicaties:
SealedSecret te genereren met de bijgewerkte waarde, deze te committen en de Profiel Service opnieuw uit te rollen.Op dit moment is er nog geen rotatiebeleid voor de Profiel Service-secrets. Dit wordt in de toekomst in samenwerking met Logius ingevuld, aansluitend op hun infrastructuur.
Een ruw BSN komt niet voor in de database. De Profiel Service ontvangt of haalt een BSN op, pseudonimiseerde deze met behulp van de BSNk-module (BSN-koppelnummer), en bewaart vervolgens uitsluitend het sectorale pseudoniem.
sequenceDiagram
participant Bron as Bron
participant PS as Profiel Service
participant BSNk as Logius BSNk
participant DB as Database
Bron->>PS: Inkomende request met BSN
activate PS
PS->>BSNk: Vraag pseudoniem op voor BSN
activate BSNk
BSNk-->>PS: Sectoraal pseudoniem
deactivate BSNk
PS->>DB: INSERT/UPDATE IdentificatieNummer = pseudoniem (versleuteld)
deactivate PS
Voor andere identificatienummers (KVK, RSIN, ...) wordt onderzocht in welke mate dezelfde aanpak toepasbaar is. Tot die beslissing genomen is, worden deze nummers wel versleuteld maar niet gepseudonimiseerd opgeslagen.
De Profiel Service verwerkt persoonsgegevens en valt daarmee onder de Baseline Informatiebeveiliging Overheid (BIO). Voor zowel beschikbaarheid (B), integriteit (I) als vertrouwelijkheid (V) wordt een BBN-classificatie (Basis Beveiligingsniveau) bepaald.
| Aspect | Indicatieve BBN | Toelichting |
|---|---|---|
| Beschikbaarheid | TBD | Afhankelijk van de SLA-afspraken met aangesloten dienstverleners; richtinggevend BBN 1 of BBN 2. |
| Integriteit | TBD | Foutieve contactgegevens leiden tot foutieve afhandeling bij dienstverleners; richtinggevend BBN 2. |
| Vertrouwelijkheid | TBD | BSN en contactgegevens zijn persoonsgegevens met verhoogd risicoprofiel; richtinggevend BBN 2. |
De definitieve classificatie volgt uit de DPIA (zie §08 Data, Doelbinding en grondslag) en uit de risicoanalyse die conform BIO wordt uitgevoerd. De uitkomsten worden vastgelegd in een ADR en gepubliceerd bij het verwerkingsregister.
TBD: definitieve BBN-classificatie per aspect, plus de bijbehorende maatregelenmatrix.