Als Uber 2022 angegriffen wurde und jemand in das interne Netzwerk des Unternehmens eindrang und auf seine Tools zugriff, lernte die Branche etwas Wichtiges: Es geht nicht darum, auf eine Kompromittierung der Sicherheit zu reagieren – sondern darum, sie zu verhindern. Ein wichtiger Schritt, den Unternehmen in diese Richtung gehen können, besteht in der Anwendung von Zugriffskontrollrichtlinien auf Software und in der kontinuierlichen Überprüfung von Zugriff und Aktionen.

Dafür sind auf dem Markt heute verschiedenste Zugriffskontrollmechanismen verfügbar, unter anderem die rollenbasierte Zugriffskontrolle (RBAC). Dieser Beitrag stellt die Vorteile von RBAC für Betriebsfähigkeit und Sicherheit vor, beschreibt die Implementierung anhand eines Schemas und erläutert, wie sich Vorschriften damit leichter einhalten lassen. Außerdem geht es auch um eine Reihe weiterer Zugriffskontrollmechanismen, deren Funktionsweise wir erklären.

Grundlagen zu RBAC

Die rollenbasierte Zugriffskontrolle (Role-based Access Control, RBAC) ist ein Mechanismus, bei dem Benutzer abhängig von Berechtigungen auf bestimmte Ressourcen zugreifen dürfen und die Berechtigungen für die Rollen definiert sind, denen sie zugeordnet sind. RBAC besteht aus drei Hauptkomponenten:

  • Rollen
  • Berechtigungen
  • Benutzer

Jeder Rolle werden spezifische Berechtigungen für den Zugriff auf bestimmte Ressourcen gewährt, und einem Benutzer wird eine bestimmte Rolle zugewiesen. Wenn Benutzern also eine Rolle zugewiesen wird, können sie alles, worauf diese Rolle zugreifen darf, anzeigen und nutzen.

RBAC-Schema

Organisationen implementieren RBAC mit Hilfe eines Schemas. In diesem SQL-basierten Pseudoschema wird gezeigt, wie man Rollen, Nutzer und Berechtigungen zuordnet. Das Datenbankschema enthält Tabellen und deren Beziehungen. Für die Implementierung eines RBAC-Schemas sind fünf Haupttabellen erforderlich:

  • Users: Enthält alle Benutzer und ihre grundlegenden Details.
  • Permissions: Zeigt die in den Systemen definierten Berechtigungen, die weiter nach Ressource und den für diese Ressource erlaubten Aktionen unterteilt werden können.
  • Roles: Im System definierte Rollen
  • User_Roles: Zuordnung von Rollen zu Benutzern, um alle Rollen zu sehen, die ein Benutzer hat. Dies ist eine M:N-Beziehung.
  • Role_Permissions: Zeigt die Verbindung zwischen Rollen und Berechtigungen.

Bei einigen speziellen Anforderungen kann es erforderlich sein, einem Benutzer einige Berechtigungen direkt zuzuweisen. Das ist jedoch nicht empfehlenswert, denn sonst entsteht eine Flut von Benutzern direkt zugewiesenen Berechtigungen. Wenn Sie dies für bestimmte Anwendungsfälle zulassen möchten, können Sie eine weitere Tabelle, User_Permissions, erstellen, um Benutzern Berechtigungen zuzuordnen.

Mit diesen fünf oder sechs Tabellen können Sie eine Funktion erstellen, die Berechtigungsprüfungen für Sie durchführt. Nachfolgend finden Sie eine Pseudofunktion zur Überprüfung von Berechtigungen:

function check_permissions(user, permissions):

user_role = get_role(user)

user_permissions = user_role.get_permissions()

if permissions in user_permissions:

Return “allowed”

else:

Return “Not allowed”

Die Definition von Berechtigungen kann sich von Implementierung zu Implementierung unterscheiden. Ein Beispiel wäre eine Objektberechtigung wie "profile-edit", was bedeutet, dass Benutzer ihr Profil bearbeiten können.

Vielleicht möchten Sie auch eine Rollenhierarchie implementieren, was bedeutet, dass eine Rolle verschiedene Rollen haben kann und die Berechtigungen von diesen Rollen aus aufgelöst werden. In diesen Fällen kann die Implementierung ein wenig kompliziert sein. Sie würden zwei Feldnamen benötigen: is_parent_role und child_roles. Oder Sie können eine weitere Tabelle für diese Zuordnung erstellen.

Bedeutung der rollenbasierten Zugriffskontrolle

Die rollenbasierte Zugriffskontrolle standardisiert den Prozess der Erteilung von Berechtigungen an Benutzer zur Ausführung oder Durchführung betrieblicher Aufgaben. Zu den Vorteilen von der rollenbasierten Zugriffskontrolle gehören:

  • Weniger redundante Arbeit: Da Sie Rollen definiert haben, müssen Sie Benutzern lediglich eine Rolle zuweisen, um die entsprechenden Berechtigungen zu erteilen. Andernfalls müssten Sie jede Berechtigung für jeden Benutzer manuell hinzufügen.
  • Höhere Sicherheit: Da ein zentrales Team diese Rollen definiert, ist die Fehleranfälligkeit bei der rollenbasierten Zugriffskontrolle geringer, und sie ist einfacher zu verwalten. Definierte Rollen bedeuten auch, dass die Wahrscheinlichkeit geringer ist, dass versehentlich falsche Berechtigungen erteilt werden.
  • Einfach zu auditieren: Vordefinierte Rollen bedeuten weniger Änderungen bei den Rollendefinitionen und -zuweisungen. Das macht auch Audits einfacher als bei der Zuweisung von Berechtigungen für jeden Benutzer.
  • Compliance-Anforderungen: Die Implementierung einer Zugriffskontrolle hilft Ihnen bei der Einhaltung von Compliance-Vorschriften, was ein sehr wichtiger Aspekt der Informationssicherheit ist.

RBAC-Best Practices

Eine fehlerhafte Implementierung kann selbst das sicherste System zum Scheitern bringen. Daher ist es sehr wichtig, die Best Practices einzuhalten.

Schreiben Sie detaillierte Informationen für jede Rolle und was sie tun soll. Fügen Sie der Rollentabelle eine Notizspalte hinzu, um die Verwendung jeder Rolle zu definieren und zu erklären, warum sie erstellt wurde. Legen Sie Rollen nicht blindlings an, sondern versuchen Sie, die am besten geeigneten Rollen zu finden, die bereits vorhanden sind, und weisen Sie diese zu.

Vermeiden Sie explizite Berechtigungen auf Benutzerebene, da dies Verwirrung stiften und dazu führen kann, dass unangemessene Berechtigungen vergeben werden.

Stellen Sie sicher, dass alle Tabellen eine Spalte created_by, updated_by, updated_at und created_at haben. Außerdem sollte jede Änderung in den Tabellen an ein zentrales Prüfsystem weitergeleitet werden, damit Sie feststellen können, ob Berechtigungen unrechtmäßig vergeben wurden oder ob jemand eine eskalierte Berechtigung erhalten hat, die nicht erforderlich war.

Nicht jeder sollte in der Lage sein zu kontrollieren, wer Rollen ändern kann. Das ist ein wichtiger Vorgang, und jede Änderung sollte eine gut geprüfte genehmigungsbasierte Pipeline durchlaufen.

Abgesehen davon, sollte das Team, das die Zugriffskontrolle verwaltet, Richtlinien für die Erstellung von Berechtigungen für Rollen veröffentlichen.

Andere Mechanismen der Zugriffskontrolle

Mittlerweile sind zahlreiche Zugriffskontrollmechanismen im Einsatz. Im Folgenden stellen wir einige der wichtigsten vor.

Attributbasierte Zugriffskontrolle

Bei diesem Zugriffskontrollmechanismus werden die Berechtigungen für Ressourcen auf der Grundlage der Attribute dieser Ressourcen vergeben. Eines der wichtigsten Beispiele hierfür ist AWS, wo Sie den Zugriff auf Ressourcen mithilfe von Tags gewähren können.

Vorteile: Dies ist eine sehr flexible Methode, und es ist einfach, Änderungen an den Attributen vorzunehmen, um Benutzern eine Berechtigung zu erteilen.

Nachteile: Unbeabsichtigte Berechtigungen können sich ausbreiten, wenn das Attribut mit einer anderen Entität verknüpft ist. Außerdem nimmt die Implementierung mehr Zeit in Anspruch, da jede Ressource mit einem Attribut verknüpft werden muss und das Team diese Attribute definieren und planen muss.

Zugriffskontrolle auf Benutzerebene

Bei dieser Methode wird Benutzern der Zugriff auf Ressourcen auf Grundlage der jedem einzelnen Benutzer direkt zugewiesenen Berechtigung gewährt.

Vorteile: Sieht auf den ersten Blick sehr einfach aus und ist die am leichtesten zu implementierende Methode.

Nachteile: Die Verwaltung ist schwierig und kann bei einer Zunahme von Benutzern und Berechtigungen sehr komplex werden.

Richtlinienbasierte Zugriffskontrolle

Hier wird Benutzern der Zugang auf Grundlage einer Richtlinie gewährt, die für den Benutzer auf der Unternehmensebene definiert wurde. Die Richtlinie wertet Subjekt, Objekt, Aktion und Kontext aus. Das Subjekt kann eine Abteilung sein, z. B. Konstruktion, das Objekt kann ein Tool wie SonarQube sein, die Aktion kann die Aktivität sein, die Sie ausführen möchten, z. B. das Anzeigen von Berichten, und der Kontext ist die gegebene Umgebung wie Staging oder Produktion.

Vorteile: Der Sinn von menschenlesbaren Richtlinien erschließt sich leichter, und sie bieten Kontrolle auf Kontextebene.

Nachteil: Die Implementierung ist komplex, da die Ausführung verschiedene vertikale Bereiche und deren Tools einbeziehen kann.

Fazit

Es gibt viele Möglichkeiten, die Zugriffskontrolle zu implementieren. Eine sehr verbreitete Methode besteht darin, rollenbasierte und attributbasierte Zugriffskontrolle zu kombinieren. Dem Anschein nach wurde in AWS eine der geeignetsten Kombinationen dieser beiden Methoden implementiert.

Abgesehen von der Wahl zwischen den Kontrollmechanismen ist es wichtig, dass Sie gewährleisten, dass jeder Zwischenfall überprüft wird und dass Sie eine Warnung erhalten, falls falsche Berechtigungen erstellt werden.

Es ist sehr schwierig, all diese Anforderungen problemlos zu erfüllen, da Sie auf zahlreiche Hindernisse stoßen werden. So muss das zentralisierte Tool, das Sie verwenden, mit zahlreichen internen Tools integriert werden, und einige sind möglicherweise eingeschränkt und unterstützen nur einige wenige Protokolle.

Ungeachtet dieser Hürden sollten Sie eine Zugriffskontrolle für alle Ihre Systeme einführen, denn das gibt Ihnen Sicherheit in Szenarien, in denen Ihre Systeme kompromittiert werden.