Het probleem
Wie krijgt welke rechten op welk systeem, wie heeft dat goedgekeurd, en zijn die rechten weer ingetrokken toen iemand vertrok? Dat stond in Excel-formulieren: per medewerker een bestand, per wijziging een nieuwe versie. Voor een audit betekende dat dagen zoeken, en een service account zonder eigenaar viel nergens op.
De applicatie
Een Django-applicatie (5.2) met PostgreSQL en server-rendered templates, bewust zonder JavaScript-framework: snel, toegankelijk en makkelijk te onderhouden.
- Stamgegevens: medewerkers, service accounts, rollen, systemen, rechten en assets, met relaties ertussen.
- Mutaties als auditspoor: toekenningen, wijzigingen en intrekkingen worden vastgelegd als auditmutaties voor changemanagement. Dat is wat een auditor wil zien.
- Periodieke reviews: importsjablonen om een autorisatiereview in te lezen, en per systeem te zien welke rechten zijn bevestigd of ingetrokken.
- Documenten bij personen en assets, versleuteld opgeslagen.
Versleutelde documentopslag
Geüploade documenten worden door de applicatie zelf versleuteld (Fernet), voordat ze op schijf of in objectopslag terechtkomen. Bij bekijken, downloaden en previewen ontsleutelt de app ze automatisch.
- Lokaal: filesystem storage.
- In Kubernetes: dezelfde versleutelde opslag bovenop S3. De objectopslag ziet alleen versleutelde bytes, dus ook wie bij de bucket kan, kan de documenten niet lezen.
- Een vaste sleutel via een Kubernetes Secret, niet afgeleid van de Django-sleutel. Wie die later wijzigt, sluit zichzelf anders buiten.
- Een migratiecommando dat bestaande plaintext-documenten versleutelt, met eerst een
--dry-run.
Uitrol
Docker Compose voor lokaal ontwikkelen, een image uit GitLab CI, en de runtime-secrets als Kubernetes Secret, nooit in Git of in .env.example. Dezelfde opzet werd later het sjabloon voor andere interne applicaties.
Waarom dit telt
Toegangsbeheer is waar security, audit en dagelijks beheer samenkomen. Een eenvoudige applicatie met een goed datamodel maakt van "zoeken in Excel" een query, en van een audit een export.