Utkast til designdiskusjon: forvaltning av delegeringstak for applikasjoner (BRU-TIL-DEL-001/002) - #547
Open
krhoybraten-sikt wants to merge 5 commits into
Open
Utkast til designdiskusjon: forvaltning av delegeringstak for applikasjoner (BRU-TIL-DEL-001/002)#547krhoybraten-sikt wants to merge 5 commits into
krhoybraten-sikt wants to merge 5 commits into
Conversation
Et delegeringstak er den øvre grensen for hva en applikasjon kan gjøre på vegne av en innlogget bruker. Grensen håndheves som et snitt mellom taket og brukerens egne tilganger, og snittet er stille: en tilgang taket ikke bærer forsvinner uten feilmelding, og bare for brukere som går gjennom en applikasjon. Modellen finnes og er i produksjon; forvaltningen finnes ikke. To features under ny kapabilitet «03 Delegeringstak», begge @Could @draft: lesing av taket og av effektiv formidlingsevne (BRU-TIL-DEL-001), og endring av taket (BRU-TIL-DEL-002). Designnotatet drøfter de tre alternativene, med forvaltningsflate som valgt retning. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FqieAFJKGpugQK9DhWGnGM
Delegeringstaket er ikke alene om forvaltningshullet. Gulvet, åpne roller og nekt har samme form, samme mangel på flate, og dermed samme tre-veis-spørsmål. Ny seksjon plasserer alle fire i håndhevelsesrekkefølgen og peker på det som skiller dem: taket er løpende drift, gulv og åpne roller er sjeldne beslutninger med bred rekkevidde, og nekt er det ene stedet der friksjon er en risiko i seg selv. Nytt åpent spørsmål: samme forvaltningsmodell for alle fire, eller ulik? Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FqieAFJKGpugQK9DhWGnGM
Tildelinger kan nå uttrykkes mot en organisasjonssamling (BRU-TIL-SAM-002), og spørsmålet er om de fire beslektede mekanismene bør få samme skop. Skillet følger retningen på det som utvides automatisk ved en innmelding: er det nye medlemmet mottaker av rekkevidde, eller kilden til det som blir tilgjengelig? Anbefalingen er ja for tak (manuelt vedlikehold per organisasjon er en kjent kilde til tomme flater, og taket formidler ingen tilgang av seg selv) og ja for nekt (utvides i trygg retning — mer nektes, aldri mindre), men nei for gulv og åpne roller, der en nyinnmeldt organisasjon er kilden til data som åpnes. Notatet peker også på at medlemskapsforvaltningen blir ytterligere sikkerhetsbærende dersom tak og nekt rir på samlinger.
…ne data Notatet pekte på to utganger for privilegiet som gater åpning av data, og på at dagens tilstand ikke er noen av dem: regelen peker på en tilgang som bare finnes i eksempeldata, altså en dør ingen kan åpne. Utgang 1 er valgt. Publiseringsmyndigheten pakkes i en egen forretningsrolle, APENDATA_FORVALTER, som innebærer publiseringsprivilegiet og ingenting annet. Den innebæres ikke av applikasjonsadministratorrollen: å publisere en organisasjons data til alle kallere og å forvalte applikasjoners innrammede tilgang er ulike myndighetsakser, og en implikasjon ville gitt hver applikasjonsadministrator global publiseringsevne som bieffekt. Rollen tildeles navngitte personer hos Sikt, organisasjonsskopet eller mot en organisasjonssamling for nasjonale datasett. Notatet presiserer at samlingsformen der gjelder tildelingen av forvalterrollen og ikke den åpne raden — den åpner ingenting av seg selv — men at det er kilden som utvides ved en innmelding, og at det bør stå i tildelingsvedtaket.
Endring av delegeringstak er organisasjonsskopet, ikke Sikt-gatet. Rettigheten er den ordinære applikasjonsadministratorrollen i de organisasjonene man administrerer, og et takinnslag som gjelder en annen organisasjon enn applikasjonens eierorganisasjon krever rollen i begge. Tokrav-formen dekker det Sikt-gatingen skulle dekke: hverken eieren av applikasjonen eller den berørte organisasjonen er riktig part alene. Det andre argumentet for Sikt-skopet — at en takutvidelse også eksponerer gulvet — er bortfalt, siden gulvet er avventet. Gulvet har fått et datert statusnotat: funksjonaliteten vurderes fjernet, alt videre arbeid avventes, og ingen forvaltningsflate bygges. Analysen står, fordi det er den en eventuell fjerningsbeslutning må bygge på. Åpne tilganger forvaltes i kildekoden gjennom Liquibase-migreringer: ingen API-flate, ingen forvaltningsrolle, og publiseringsprivilegiet forfremmes ikke. Det erstatter beslutningen fra 21. august om en egen forretningsrolle, som står igjen synlig med begrunnelsen for hva som fortsatt er gyldig i den.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Utkast til krav for forvaltning av delegeringstak for applikasjoner. Alt står
@could @draft— dette er lagt fram for designdiskusjon, ikke for godkjenning. Ett valg er likevel tatt på forhånd og presentert som gitt: hvem som kan endre et tak. Se «Besluttet» under.Bakgrunn
En Feide-applikasjon kan opptre på to måter. Den kan handle som seg selv, med tilganger tildelt applikasjonen — det er tilgangslisten BRU-APP-API-003 beskriver. Og den kan handle på vegne av en innlogget bruker. Et delegeringstak gjelder bare det siste: det er den øvre grensen for hvor mye av en brukers egen myndighet applikasjonen får bære.
Taket gir applikasjonen ingenting alene. Håndhevelsen er et snitt — en bruker får gjennom en applikasjon bare det hun selv har OG taket bærer, per organisasjon og tilgang, i ett miljø. Snittet har to egenskaper som er hele grunnen til at kravene finnes:
Erfaring har vist at dette er den vanligste årsaken til at en ny tilgang «ikke virker»: tilgangen ble innført i katalogen, men ikke lagt inn i taket til applikasjonen den skulle brukes gjennom. Regelen — taket må følge tilgangskatalogen — står nå på tabellen selv, men et sted å håndheve den finnes ikke.
Datamodellen er i produksjon, med miljødimensjon, ikke-overlappende gyldighetsperioder og sporing av aktør for både innlegging og avslutning. Det som ikke finnes er forvaltningen: ingen mutasjon, ingen synkronisering, ingen flate. Radene legges inn manuelt av databaseforvaltningen, mens taket i praksis er driftsdata som endres uavhengig av deployer.
En avgrensning som er lett å overse: fremmednøkkelen peker på Feide-applikasjon, ikke på subjekt generelt. Bare applikasjoner brukere logger inn i har et delegeringstak. Maskinbrukere og Maskinporten-klienter opptrer alltid som seg selv, og for dem finnes taket ikke som begrep — derfor skal visningen ikke dukke opp der i det hele tatt, heller ikke som en tom liste.
Hva som er lagt til
Ny kapabilitet
krav/07 Brukeradministrasjon og tilgangsstyring/11 Tilgangsstyring/03 Delegeringstak/:se_delegeringstak.feature(BRU-TIL-DEL-001)endre_delegeringstak.feature(BRU-TIL-DEL-002)forvalte_delegeringstak.design.mdBesluttet: hvem kan endre et tak
Endring av et delegeringstak krever applikasjonsadministrator hos Sikt. Features er skrevet under den forutsetningen, og alternativ (a) i notatet er presentert med denne gatingen som utgangspunkt, ikke som et åpent spørsmål.
Begrunnelsen er hvem endringen treffer. Et takinnslag navngir organisasjonen applikasjonen får opptre innenfor — ikke organisasjonen som eier applikasjonen. En utvidelse gir altså en applikasjon, ofte eid av en annen part, lov til å handle i en organisasjons navn. Resten av applikasjonsforvaltningen er skopet slik at en administrator forvalter det som hører til sine egne organisasjoner; her ville det samme skopet gjort utvidelsen til et valg for eieren av applikasjonen eller for den berørte organisasjonen, og ingen av de to er riktig part alene.
Lesing forblir bredere. Organisasjonen som har lånt ut myndighet skal kunne se det, uten å kunne endre det. Modellen har allerede en egen leseregel med organisasjonsskop ved siden av skriveregelen, så beslutningen krever at skriveregelen strammes — ikke at lesingen gjøres om. Verdt å merke seg, fordi den motsatte antakelsen ville fjernet lesesynet til organisasjonene i samme grep.
Konsekvensen for kravene er at de to features har ulike aktører: BRU-TIL-DEL-001 er skrevet fra organisasjonens side, BRU-TIL-DEL-002 fra Sikts.
De tre alternativene
(a) Forvaltningsflate — valgt retning. Taket får en eier i løsningen: API for å lese og endre, og senere en flate. Lesing organisasjonsskopet, endring gatet hos Sikt, endringer temporale, sporbare og idempotente. Det er den eneste av de tre som gir regelen et sted å bo, og den gir lesehalvdelen gratis: når taket er lesbart gjennom løsningen kan flaten forklare et avskåret snitt i stedet for å vise en tom liste. Kostnaden er at taket får en skriveflate — derfor den strammere gatingen, og derfor må tilbaketrekking være like lett som utvidelse.
(b) Migrerings- og driftseid, status quo formalisert. Taket endres bare gjennom reviewet migrering, og regelen håndheves som prosess. Argumentet for: hver utvidelse får en review, ingen skriveflate å misbruke, nullkostnad å beholde. Grunnen til at den ikke velges: migreringer kjører ved deploy, mens taket er driftsdata — en organisasjon som senere skal dekkes får ikke radene av seg selv, og en ny tilgang får ikke radene av seg selv. Erfaringen med feilklassen er nettopp fra dette regimet: prosesskravet ble ikke oppfylt fordi ingenting minnet noen på det. Alternativet er dessuten ikke gratis på lesesiden — uten en flate kan ingen organisasjon se hva den har lånt ut, og support kan ikke forklare et tomt svar uten databasetilgang.
(c) Modellendring: taket enumererer bare de fingranede tilgangene. Taket slutter å nevne sammensatte tilganger; ekspansjonen skjer utelukkende på brukersiden av snittet. Det er det eneste alternativet som gjør feilklassen strukturelt umulig for den store gruppen tilganger. Grunnen til at den ikke velges nå: det er en semantikkendring i selve håndhevelsen, ikke en ny flate. Snittet nuller i dag også de sammensatte kodene, og en visning som spør «hvilke tilganger har jeg her» leser nettopp dem — så endringen berører mer enn autorisasjonen. Ikke forkastet: det er det naturlige neste steget hvis forvaltningsflaten viser at takradene for sammensatte tilganger aldri bærer noen egen beslutning.
(a) og (c) utelukker ikke hverandre — (a) reduserer smerten ved å utsette (c).
Designpoengene som bærer kravene
Leseskopet følger den berørte organisasjonen, ikke eieren. Det er lett å lese taket som en egenskap ved applikasjonen, og dermed som noe eierorganisasjonen forvalter. Modellen sier noe annet: hver rad navngir organisasjonen applikasjonen får opptre innenfor. En administrator ved et lærested kan derfor se hvilke applikasjoner som kan opptre på vegne av lærestedets brukere, også når applikasjonen tilhører en annen part. Den uvante halvdelen: eieren av en applikasjon ser bare de organisasjonene hun selv administrerer, og altså ikke nødvendigvis hele taket til sin egen applikasjon. Bør bekreftes i review.
Grensen er ikke absolutt, og visningen må ikke love at den er det. Tilganger som gjelder alle legges til etter snittet — taket begrenser brukerens egne tilganger, ikke alt applikasjonen kan vise. Og deaktivering av applikasjonen undertrykker hele resultatet uavhengig av taket, uten at brukerens egne tilganger berøres.
Temporal historikk er et løfte vi kan holde. Et tak trekkes tilbake ved å lukke perioden, ikke ved å slette raden, og perioder for samme kombinasjon kan ikke overlappe. Kravene kan derfor love «når fikk applikasjonen lov til dette, og av hvem», «hva kunne applikasjonen formidle på et gitt tidspunkt», og at gjeninnføring gir en ny periode ved siden av den gamle. For et tak er dette mer enn bekvemmelighet: «hadde denne applikasjonen lov til å gjøre det da» er et sikkerhetsspørsmål, og svaret skal ikke avhenge av at ingen har ryddet.
Effektiv formidlingsevne er den visningen som ikke finnes i dag. Den skal svare: hvilke av brukerens tilganger kommer gjennom denne applikasjonen, og hvilke stopper i taket? Uten den er et hull i taket usynlig helt til noen feilsøker i databasen.
Plassering og nummerering
Kapabilitetsmappen er lagt under
11 Tilgangsstyring, som søsken til01 Tilganger, med samme begrunnelse som i #546:applikasjonerer iterasjonsnavngitt, og et udatert@could @draft-krav hører ikke inn i en planlagt iterasjon. Et delegeringstak er samtidig mer enn applikasjonsforvaltning — det er en regel om hvordan brukertilganger håndheves.To ting det er verdt å ta stilling til:
02er tatt av Utkast til designdiskusjon: forvaltning av organisasjonssamlinger (BRU-TIL-SAM-001/002) #546 (organisasjonssamlinger), som fortsatt er åpen. Denne PR-en er derfor03 Delegeringstak, og lager et hull hvis Utkast til designdiskusjon: forvaltning av organisasjonssamlinger (BRU-TIL-SAM-001/002) #546 ikke merges. Trivielt å renummerere om det er ønskelig — si fra hvilken rekkefølge som foretrekkes.BRU-TIL-DEL, samme mønster somBRU-TIL-SAMi Utkast til designdiskusjon: forvaltning av organisasjonssamlinger (BRU-TIL-SAM-001/002) #546. Nabofilene i sub-domenet har det eldre prefiksetTIL-TIL-TIL. Jeg har fulgt konvensjonen slik den er skrevet, ikke naboene. Hvis kravene heller skal underapplikasjoner, er neste ledige nummer i den serien BRU-APP-API-011.Åpne spørsmål jeg har latt stå
@openquestion.Bevisst ikke endret
krav/krav-oversikt.md— generert, og allerede utdatert mot repoet. Bør regenereres for seg.systemkrav.mdfor den nye kapabiliteten. Nabokapabiliteten01 Tilgangerhar ingen, og kravene er for umodne til å beskrives som systemkrav.veikart/.applikasjonerer urørt — særlig BRU-APP-API-003, som beskriver applikasjonens egne tilganger. Sammenhengen mellom de to listene er beskrevet i de nye filene, ikke ved å endre den gamle.Ikke merge — dette skal reviewes, og både gatingen og de åpne spørsmålene bør avklares før kravene kan bli noe annet enn utkast.