CodamAIDocs
Themafertig

Die Obergrenze: niemand vergibt mehr, als er hat

Die Regel über allen Schreibwegen: Eine Vergabe übersteigt nie den Vergebenden. Was sie für Rollen, Gruppen und Attribute bedeutet und wie sie sich von der Delegation unterscheidet.

Ausprägungen
RollenGruppen (über ihre Rollen)Attribute (Wertebereich)platform-admin

Worum es geht

Über allen Wegen, auf denen CIAS Rechte vergibt, steht eine Regel:

Die Obergrenze ist keine Einstellung. Es gibt keinen Schalter, keine Rolle und keinen Eintrag im Rollenkatalog, der sie abschaltet.

Warum braucht es das? Ohne Obergrenze könnte eine Mandanten-Administratorin einer neuen Kollegin, oder sich selbst, eine Rolle geben, die sie selbst nie hatte. Ein einziger unbedachter Eintrag im Katalog wäre dann ein Weg zu jedem Recht der Installation.

Das Mengenbild

Stell dir die Rechte einer Person als Menge vor. Was sie vergibt, muss ganz in dieser Menge liegen.

flowchart LR
    subgraph H["Was Anna im Mandanten nordbau hält"]
      direction TB
      R1["hr-employee-read"]
      R2["hr-employee-edit"]
      A1["Attribut projects = alpha, beta"]
    end
    V1["vergibt hr-employee-read"] -- "enthalten ✔" --> R1
    V2["vergibt projects = alpha"] -- "enthalten ✔" --> A1
    V3["vergibt hr-salary-read"] -. "nicht enthalten ✘" .-> H
    V4["vergibt projects = gamma"] -. "nicht enthalten ✘" .-> H

Anna darf weitergeben, was im Kasten liegt, und nichts darüber hinaus. Ob Anna das überhaupt darf, entscheidet zusätzlich die Delegation.

Delegation und Obergrenze sind zwei Fragen

Leicht verwechselt:

Delegation
darfst du das überhaupt weitergeben?
  • eine Liste am Rollenkatalog: wer die Rolle vergeben darf
  • pro Installation einstellbar
  • schützt davor, dass jede Person Rechte weiterreicht
Obergrenze
hast du mindestens so viel?
  • vergleicht mit dem, was du selbst hältst
  • nicht einstellbar
  • schützt davor, dass jemand ein Konto stärker macht als sich selbst

Beide müssen zustimmen. Keine ersetzt die andere: Wer eine Rolle hat, darf sie deshalb noch nicht weitergeben. Und wer auf der Delegationsliste steht, darf nur vergeben, was er selbst hat.

Eine Mandanten-Administratorin will eine Rolle vergeben
Delegation erlaubt es?Im eigenen Mandanten?Hält sie die Rolle selbst?Ergebnis
nein––403
janein–403
jajanein403, die Obergrenze greift
jajajaRolle wird vergeben

Bei einer Rollenvergabe sehen alle Ablehnungen gleich aus: 403 mit dem Text not permitted, ohne Grund. So kann niemand durch Ausprobieren herausfinden, wie die Regeln der Installation aussehen. Den genauen Grund schreibt CIAS ins Log. Siehe Ablehnungen, die nichts verraten.

Was du hältst, bestimmt CIAS

Die naheliegende Idee wäre, die Rollen im Token des Aufrufers zu vergleichen. Das geht nicht. Im Token steht nur der Client dieses Deployments, und die Rollennamen stehen dort ohne ihren Client. cdms-backend / model-editor und crms-backend / model-editor sähen gleich aus.

Deshalb rechnet CIAS aus seinen eigenen Datensätzen, was du hältst:

So entsteht deine Obergrenze im Mandanten
  1. CIAS
    Person
    Gehört das Token zu einer Person, die CIAS kennt?
    ↳ nein du hältst nichts
  2. CIAS
    Vergaben
    Welche deiner Rollenvergaben sind jetzt aktiv und gelten global oder in genau diesem Mandanten?
  3. CIAS
    Gruppen
    In welchen Gruppen bist du Mitglied? Deren Rollen zählen mit
  4. CIAS
    Attribute
    Welche Attributwerte hast du in genau diesem Mandanten?
  5. Deine Obergrenze, genau nach Client und Schlüssel

Daraus folgt:

  • Eine Vergabe, die erst später beginnt oder abgelaufen ist, zählt nicht.
  • Eine Rolle, die du in einem anderen Mandanten hast, zählt hier nicht.
  • Eine Rolle, die jemand von Hand in der Keycloak-Konsole vergeben hat, zählt nicht. CIAS kennt sie nicht. Du kannst dann weniger weitergeben, als du tatsächlich hast. Das ist die sichere Richtung.

Das funktioniert nur, weil nur CIAS Rechte nach Keycloak schreibt. Siehe Die Schreibrichtung.

Jede Ausprägung

Obergrenze für Rollen, Gruppen, Attribute und den Plattform-Administrator

Wann: Jemand vergibt eine Rolle von Hand.

  1. 1
    Admin→CIAS
    vergibt cdms-backend / hr-employee-edit an eine Person im Mandanten nordbau
  2. 2
    CIAS
    Ist die Rolle eine Plattformrolle? Dann darf nur ein Plattform-Administrator
  3. 3
    CIAS
    Steht der Aufrufer auf der Delegationsliste der Rolle?
  4. 4
    CIAS
    Ist nordbau der Mandant aus seinem Token?
  5. 5
    CIAS
    Hält er cdms-backend / hr-employee-edit selbst in nordbau?
  6. 6
    CIAS→Keycloak
    schreibt die Vergabe

Ergebnis: Vergeben, oder 403 bei der ersten Prüfung, die nicht besteht.

Wann: Es geht um Gruppen, als Quelle deiner Rechte oder als etwas, das vergeben wird.

Für deine Obergrenze zählen die Rollen deiner Gruppen, nicht die Mitgliedschaft. Mitglied einer Gruppe zu sein ist kein eigenes Recht. Wer eine Person in eine Gruppe aufnimmt, gibt ihr alle Rollen der Gruppe auf einmal. Gruppen und Mitglieder verwaltet nur ein Plattform-Administrator, und der hält jedes Recht.

Ergebnis: Gruppenrollen zählen zu dem, was du hältst.

Wann: Jemand schreibt einen Attributwert pro Mandant, etwa projects für eine Person in nordbau.

  1. 1
    CIAS
    Ist das Attribut im Katalog angemeldet? Wenn nicht, darf es niemand schreiben
  2. 2
    CIAS
    Erlaubt die Delegation des Attributs dem Aufrufer das Schreiben?
  3. 3
    CIAS
    Liegt jeder geschriebene Wert in seinem eigenen Wert in diesem Mandanten?
  4. 4
    CIAS
    speichert die Werte, alle oder keinen

Ergebnis: Geschrieben, oder 403. Prüft ein Wert nicht, wird gar nichts geschrieben.

Wann: Der Aufrufer hat die Rolle platform-admin.

Ein Plattform-Administrator legt Rollen an, pflegt die Delegation und kann so ohnehin jedes Recht erreichen. Seine Obergrenze ist deshalb jedes Recht. Das ist keine Ausnahme von der Regel, sondern ihre Anwendung: Er hält alles, also darf er alles vergeben. Ohne das könnte eine frische Installation nie in Betrieb gehen, denn der erste Administrator könnte niemandem etwas geben.

Ergebnis: Besteht die Obergrenze immer.

Attribute: wann ein Wert „enthalten“ ist

Ein Attributwert schneidet in CDMS Zeilen zu. Ein Wert mehr ist mehr Reichweite, und * schaltet den Filter ab. CIAS vergleicht deshalb genau so, wie der Filter die Werte liest: an Kommas getrennt, Leerzeichen abgeschnitten, * als „alles“.

Darf jemand mit diesem eigenen Wert jenen Wert schreiben?
eigener Wertgeschriebener WertErgebnis
alpha, betaalphaerlaubt, alpha ist enthalten
alpha, betabeta, alphaerlaubt, die Reihenfolge zählt nicht
alpha, betagammaabgelehnt
alpha, beta*abgelehnt, * ist mehr als alles Einzelne
*beliebigerlaubt
keineralphaabgelehnt, wer nichts hat, gibt nichts
–leererlaubt: Leeren nimmt Reichweite weg. Die Delegation muss trotzdem zustimmen

Wo die Obergrenze greift

WegWer ihn gehen darfObergrenze
Rolle von Hand vergebenlaut Delegation, im eigenen Mandantenja, als letzte Prüfung
Regel für die Startrollen der Registrierung schreibenlaut Delegationja: Wer eine Regel schreibt, muss jede Rolle darin selbst halten
Attributwert pro Mandant schreibenlaut Delegation des Attributsja, mit dem Vergleich der Werte oben
Gruppen anlegen, ändern, Mitglieder aufnehmenPlattform-Administratorbesteht immer
Attributwert an der Person schreiben (Profil in Keycloak)Plattform-Administratorbesteht immer

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/CLAUDE.md – §13.3 Die Obergrenze
  • CIAS/cias-authorization/docs/adr – ADR-043, ADR-048
  • CIAS/cias-authorization – ConferralCeiling, AttributeContainment, AttributeWritePermission, RoleAssignmentService.authorize, AuthorizationExceptionHandler
  • CIAS/cias-registration – RegistrationRoleRuleService, ConferralCeilingPort
  • CIAS/cias-user – TenantBoundAttributeService, UserExceptionHandler
Suchen