Flexible Autorisierung mit dem Open Policy Agent

Was ein Anwender in einer Software darf, wird meist anhand eines Rollenmodells entschieden. Mit dem Open Policy Agent steuern Sie flexibler, wer was darf.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
Flexible Autorisierung mit dem Open Policy Agent

(Bild: Albert Hulm)

Lesezeit: 15 Min.
Von
  • Jan Mahn
Inhaltsverzeichnis

Jede Anwendung, auf die mehr als ein Anwender zugreifen soll, muss immer wieder die folgende, alles entscheidende Frage beantworten: Darf dieser Benutzer die gewünschte Aktion wirklich ausführen? In Unternehmensanwendungen hängt von der richtigen Beantwortung dieser Frage viel ab. Wer was darf, entscheidet meist nicht der Entwickler der Software selbst – er bekommt vielmehr die Regeln, die im Unternehmen gelten, in ganzen Sätzen auf den Tisch und hat die Aufgabe, sie für die Anwendung zu übersetzen. Solche Regeln können etwa so aussehen:

  • Mitarbeiter aus der Einkaufsabteilung dürfen Aufträge bis 1000 Euro freigeben.
  • Der stellvertretende Leiter darf bis 10.000 Euro freigeben.
  • Der Leiter der Einkaufsabteilung darf alles freigeben.

Um sich dem Problem zu nähern, greift man meist zu einem Modell, das solche Berechtigungen vereinfacht. Viele Entwickler entscheiden sich für ein rollenbasiertes Modell (Role Based Access Control, RBAC). In einem solchen System gibt es Benutzer, Gruppen und Rollen. Ein Nutzer kann Mitglied mehrerer Gruppen sein. Benutzern und Gruppen kann man Rollen zuweisen – die Anwendung entscheidet dann jeweils, ob die Rolle vorhanden ist, die zum Ausführen einer Aktion notwendig ist. Im besten Fall kann man die Berechtigungsprüfung sogar an eine eigene RBAC-Komponente auslagern, sodass sich Code der Anwendung und die Regeln des Unternehmens nicht vermischen.

Für die drei oben formulierten Regeln bräuchte man bereits drei Rollen, zum Beispiel purchase_employee, purchase_deputy und purchase_head. An die Grenzen von RBAC stößt man aber spätestens, wenn sich die Entscheider eine weitere Regel ausgedacht haben und sie dem Entwickler auf den Tisch legen: