- Je berekent benodigde, behouden, overtollige en ontbrekende rechten.
- Je onderscheidt aangeboden rechten van bevoegdheid voor de huidige taak.
Je assistent moet een kaart lezen en de kleur aanpassen. Waarom zou dezelfde taak ook mogen publiceren? Een onschuldige fout in een modelvoorstel krijgt grotere gevolgen wanneer de applicatie meer macht aanbiedt dan het werk nodig heeft.
Minimaal benodigde rechten (least privilege) begint daarom bij de gewone taak. We gebruiken alleen eigen toolnamen en kaart-ids als gegevens; geen functie op deze pagina bedient een echte tool. De vertrouwde applicatie bepaalt de taakbehoefte voordat zij modelvoorstellen beoordeelt.
1. Begin bij de taak, niet bij het voorstel
Stel je een sleutelbos voor. Voor één klus heb je twee specifieke sleutels nodig; een tweede vermelding van dezelfde deur vraagt geen extra bevoegdheid. In onze oefening is een sleutel het volledige paar van een tool en een doel.
Een leesrecht voor kaart-a is dus niet hetzelfde als een leesrecht voor kaart-b. Ook kleuren en lezen van dezelfde kaart zijn verschillende paren. Door die twee onderdelen samen te bewaren, voorkom je dat een losse lijst toolnamen ongemerkt toegang tot alle kaarten geeft.
T is de vertrouwde lijst taakstappen en R de verzameling unieke benodigde paren. Unique betekent hier ontdubbelen, zonder toolnamen of doelen te veranderen. De resultaatlijst sorteren we voor een vaste, controleerbare weergave.
Met de hand bevat de taak lezen, kleuren en nogmaals lezen. Je vindt twee verschillende paren, niet drie. Kleuren staat alfabetisch vóór lezen, maar die sorteervolgorde verandert de gewone taak niet.
steps = [
dict(tool="lezen",
target="kaart-a"),
dict(tool="kleuren",
target="kaart-a"),
dict(tool="lezen",
target="kaart-a"),
]
needed = required_permissions(steps)
print(len(needed))
print(needed[0]["tool"])
# 2
# kleuren
012. Onderscheid te veel van te weinig
Nu vergelijken we de benodigde sleutels met de aangeboden sleutelbos. Een ontbrekend recht verhindert gewoon werk; een extra recht maakt onbedoeld werk mogelijk. Die twee problemen vragen verschillende maatregelen.
G is de aangeboden verzameling. K bewaart wat zowel aangeboden als nodig is, E bevat het overschot en M de ontbrekende paren. Het doorsnedeteken ∩ betekent beide verzamelingen; het verschilteken ∖ betekent links zonder rechts.
Voeg publiceren toe aan de twee benodigde rechten. Dan blijven twee paren bruikbaar, is één paar te ruim en ontbreekt niets. We trekken geen recht bij een echte dienst in; de uitkomst beschrijft wat je in het ontwerp moet aanpassen.
extra = dict(tool="publiceren",
target="kaart-a")
granted = needed + [extra]
report = permission_diff(
granted, needed)
print(len(report["kept"]))
print(len(report["excess"]))
print(len(report["missing"]))
# 2
# 1
# 0
02De vaste taak bepaalt wat nodig is. Verander de aangeboden rechten en vergelijk dienstmacht met toestemming voor deze specifieke taak.
Vaste taakstappen
lezen → kaart-akleuren → kaart-a
Unieke benodigde rechten
kleuren → kaart-alezen → kaart-a
Behouden
kleuren → kaart-alezen → kaart-a
Te ruim
kleuren → kaart-blezen → kaart-bpubliceren → kaart-apubliceren → kaart-b
Ontbrekend
Geen.
Dezelfde aanvragen, twee beslisregels
lezen → kaart-a
Alleen dienstrecht: toegestaan
Ook taakgebonden: toegestaan
Toegekend én nodig voor deze taak.
lezen → kaart-b
Alleen dienstrecht: toegestaan
Ook taakgebonden: geweigerd
Dit recht valt buiten de vaste taak.
kleuren → kaart-a
Alleen dienstrecht: toegestaan
Ook taakgebonden: toegestaan
Toegekend én nodig voor deze taak.
kleuren → kaart-b
Alleen dienstrecht: toegestaan
Ook taakgebonden: geweigerd
Dit recht valt buiten de vaste taak.
publiceren → kaart-a
Alleen dienstrecht: toegestaan
Ook taakgebonden: geweigerd
Dit recht valt buiten de vaste taak.
publiceren → kaart-b
Alleen dienstrecht: toegestaan
Ook taakgebonden: geweigerd
Dit recht valt buiten de vaste taak.
lezen → kaart-a
Alleen dienstrecht: toegestaan
Ook taakgebonden: toegestaan
Toegekend én nodig voor deze taak.
Een ontbrekend recht maakt de normale taak onmogelijk. Een overtollig recht geeft de dienst meer macht, maar wordt door de taakgebonden regel geweigerd. Een modelvoorstel kan de vaste taak niet uitbreiden.
Alle kaarten, rechten, routes en kosten zijn eigen oefengegevens. Deze oefening voert geen externe tools uit en verstuurt geen gegevens.
3. Controleer ieder specifiek verzoek
Een modelvoorstel kan nog steeds publiceren vragen. De naïeve controle ziet alleen dat dit in G voorkomt. De verdedigde controle vereist ook lidmaatschap van de apart vertrouwde taakbehoefte R.
A is de toestemmingsbeslissing voor paar p. Beide voorwaarden moeten waar zijn; een onbekend paar wordt door geen van beide kanten toegevoegd. De uitvoer blijft een beslissing over gegevens, geen uitgevoerde handeling.
asks = [steps[0], extra]
answers = compare_authority(
asks, granted, needed)
print(answers[0]["guarded_allowed"])
print(answers[1]["naive_allowed"])
print(answers[1]["guarded_allowed"])
print(answers[1]["reason"])
# True
# True
# False
# outside-task
03Een veelgemaakte fout is alle rechten weghalen en dat een geslaagde verdediging noemen. De gewone leestaak moet beschikbaar blijven. Anders heb je de assistent uitgeschakeld in plaats van zijn macht aan zijn werk aangepast.
denied = compare_authority(
[steps[0]], [], needed)
print(denied[0]["guarded_allowed"])
print(denied[0]["reason"])
# False
# not-granted
De voorbeelden gebruiken volledige paren en vaste sets. Een echt systeem moet die grenzen ook afdwingen bij de onderliggende dienst, waar een actie plaatsvindt. Alleen een kleinere toolbeschrijving aan het model tonen verleent die bescherming niet.
Wat je nu kunt
- Je leidt rechten af uit een afzonderlijk vertrouwde taak.
- Je ziet noodzakelijk, te ruim en ontbrekend als verschillende uitkomsten.
- Je begrenst ieder verzoek zonder de gewone taak weg te nemen.
Hierna onderscheiden we de macht van de assistent van de bevoegdheid van de persoon namens wie hij handelt.
Bronnen
Gecontroleerd op 30 oktober 2026: NIST over least privilege en OWASP 2026 LLM03 over te veel macht en onafhankelijke autorisatie. Sleutelparen, taakstappen en beslissingen zijn eigen oefenmateriaal.