← Projecten

Toegangsbeheer uit Excel: een Django-app voor medewerkers, rechten en audits

Een interne webapplicatie die Excel-formulieren voor in-, door- en uitstroom vervangt: medewerkers, service accounts, rollen, systemen, rechten en assets op één plek, met een auditspoor voor changemanagement en versleutelde documentopslag.

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.