OpenStack verwendet eine auf Policies aufbauende Rollenbasierte Zugriffskontrolle, wie ich im Artikel Role Based Access Control in OpenStack – Einführung näher beschrieben habe.

Rollen mit gegenüber normalen Nutzern eingeschränkten Berechtigungen umzusetzen, erfordert in OpenStack besonderes Fingerspitzengefühl. Obwohl es für normale Nutzer gewöhnlich die Rolle _member_ oder Member gibt, sind die meisten Policy-Rules nicht an diese Rollen gebunden, sondern allgemein gehalten, sodass sie für jeden angemeldeten Nutzer erfüllt sind. In der Glance-Policy gibt es zum Beispiel viele Regeln wie die folgende:

Diese Regel erlaubt es jedem Nutzer, in seinem Projekt Images hochzuladen, unabhängig davon welche Rolle er in diesem Projekt hat. Möchte man nun zum Beispiel eine Rolle erstellen, die explizit nur lesend auf Ressourcen zugreifen darf, muss man für alle schreibenden Berechtigungen definieren, dass diese nicht gewährt werden.

Als weitere Schwierigkeit kommt hinzu, dass nicht nur die Policy für eine OpenStack-Komponente angepasst werden muss, sondern für alle Komponenten, in denen die Rolle weniger als die Berechtigungen eines normalen Projekt-Members gewähren soll.

Will man eigene Rollen in OpenStack einbauen, sollte man sich also immer zuerst überlegen, was ein normaler Nutzer darf und an welchen Stellen die eigene Rolle explizit davon abweichen soll.

David Rabel arbeitet bei B1 Systems als Trainer und Consultant für Themen rund um Linux und OpenStack. Er ist Mitglied des Debian OpenStack Packaging Teams und steuert selbst gelegentlich Patches zum OpenStack Code oder der Dokumentation bei.