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:
- eine Liste am Rollenkatalog: wer die Rolle vergeben darf
- pro Installation einstellbar
- schützt davor, dass jede Person Rechte weiterreicht
- 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.
| Delegation erlaubt es? | Im eigenen Mandanten? | Hält sie die Rolle selbst? | Ergebnis |
|---|---|---|---|
| nein | – | – | 403 |
| ja | nein | – | 403 |
| ja | ja | nein | 403, die Obergrenze greift |
| ja | ja | ja | Rolle 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:
-
CIASPersonGehört das Token zu einer Person, die CIAS kennt?↳ nein du hältst nichts
-
CIASVergabenWelche deiner Rollenvergaben sind jetzt aktiv und gelten global oder in genau diesem Mandanten?
-
CIASGruppenIn welchen Gruppen bist du Mitglied? Deren Rollen zählen mit
-
CIASAttributeWelche Attributwerte hast du in genau diesem Mandanten?
- 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
Wann: Jemand vergibt eine Rolle von Hand.
-
1Admin→CIASvergibt
cdms-backend/hr-employee-editan eine Person im Mandantennordbau -
2CIASIst die Rolle eine Plattformrolle? Dann darf nur ein Plattform-Administrator
-
3CIASSteht der Aufrufer auf der Delegationsliste der Rolle?
-
4CIASIst
nordbauder Mandant aus seinem Token? -
5CIASHält er
cdms-backend/hr-employee-editselbst innordbau? -
6CIAS→Keycloakschreibt 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.
-
1CIASIst das Attribut im Katalog angemeldet? Wenn nicht, darf es niemand schreiben
-
2CIASErlaubt die Delegation des Attributs dem Aufrufer das Schreiben?
-
3CIASLiegt jeder geschriebene Wert in seinem eigenen Wert in diesem Mandanten?
-
4CIASspeichert 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“.
| eigener Wert | geschriebener Wert | Ergebnis |
|---|---|---|
alpha, beta | alpha | erlaubt, alpha ist enthalten |
alpha, beta | beta, alpha | erlaubt, die Reihenfolge zählt nicht |
alpha, beta | gamma | abgelehnt |
alpha, beta | * | abgelehnt, * ist mehr als alles Einzelne |
* | beliebig | erlaubt |
| keiner | alpha | abgelehnt, wer nichts hat, gibt nichts |
| – | leer | erlaubt: Leeren nimmt Reichweite weg. Die Delegation muss trotzdem zustimmen |
Wo die Obergrenze greift
| Weg | Wer ihn gehen darf | Obergrenze |
|---|---|---|
| Rolle von Hand vergeben | laut Delegation, im eigenen Mandanten | ja, als letzte Prüfung |
| Regel für die Startrollen der Registrierung schreiben | laut Delegation | ja: Wer eine Regel schreibt, muss jede Rolle darin selbst halten |
| Attributwert pro Mandant schreiben | laut Delegation des Attributs | ja, mit dem Vergleich der Werte oben |
| Gruppen anlegen, ändern, Mitglieder aufnehmen | Plattform-Administrator | besteht immer |
| Attributwert an der Person schreiben (Profil in Keycloak) | Plattform-Administrator | besteht immer |
Weiter
- Eine Rolle vergeben
- Wer ein Attribut schreiben darf
- Die zwei Rechte-Matrizen: wie ein Recht getragen wird