Metadaten-Security

Nachdem ich mich in letzter Zeit vermehrt mit Metadaten beschäftigt habe, wird mir immer klarer, dass dort das Thema Security nicht vernachlässigt werden darf, aber auch nicht trivial ist -- insbesondere in einer Installation, bei der die meisten Komponenten mittels Metadaten verbunden sind und der Metadatenserver also einen Single Point of Failure darstellt.

Hier einmal konkrete Punkte, die mir aufgefallen und zum Teil unklar sind, in der Hoffnung eine Diskussion in Gang zu bekommen:

1. Die nach Installation vorliegenden Standardberechtigungen (Access Controls) für die Metadaten bieten fast keinerlei Schutz vor unbefugtem Verändern systemkritischer Metadaten. Man sollte unbedingt die Schutzmaßnahmen durchführen, die im SAS 9.1.3 Intelligence Platform - Security Administration Guide (Second Edition) vom Juni 2007 auf den Seiten 67 ff. (Protecting the Foundation Repository) beschrieben sind.

2. Es ist mitunter schwer zu verstehen, welche Berechtigungen ein bestimmter Nutzer für ein bestimmtes Metadatenobjekt effektiv bekommt, da es mehrere Ebenen der Vererbung gibt (nämlich einerseits von Nutzergruppen auf Mitglieder und andererseits entlang bestimmter Metadatenassoziationen, z.B. von einem Tree auf seine Members). Hier sollte man sich sehr eingehend das Entscheidungsdiagramm auf S. 47 des Security Administration Guide anschauen und sich merken, dass die in der Metadatenkonsole (SMC) angezeigten grau hinterlegten Rechte nicht immer tatsächlich effektiv sind und bei bestimmten Metadatentypen (z.B. Logins) weitere spezielle Zugriffsregeln wirken, die in der SMC nicht sichtbar sind.

3. Es ist ebenfalls nicht offensichtlich, welche Rechte man überhaupt für die verschiedenen Aufgaben benötigt, insbesondere für welche Objekte man alles ein Schreibrecht benötigt, um mit ihm assoziierte Objekte erstellen oder löschen zu können. Beispielsweise benötigt man Schreibrecht an einem ServerComponent-Objekt, wenn man mit ihm assozierte Pfade oder Datenbankschemen in den Metadaten registrieren möchte.

4. Um Rechte-Vererbungen entlang von Metadatenassoziationen nachvollziehen zu können, fehlt aber im Security Administration Guide leider eine entscheidende Information, nämlich eine Liste aller Assoziation, entlang der vererbt wird. Anhand eines speziellen Plugins für die SMC konnte ich die unten anhängende Liste ermitteln.

5. Aus der u.a. Liste wird deutlich, dass es bestimmte systemkritische Metadatentypen gibt, die Ihre Rechte von keinem anderen Objekt erben. Für diese gelten folglich die Zugriffsberechtigungen, die in der Default ACL des Repositories eingestellt sind. Dort muss man aber häufig einer großen Zahl Anwendern (meist sogar allen, also der Gruppe SASUSERS) ein Metadatenschreibrecht einräumen, z.B. wenn man Nutzer Stored Processes anlegen oder in Channels veröffentlichen lassen möchte.

6. Aus 5. scheint zu folgen, dass man alle Metadatenobjekte, die von einem der folgenden systemkritischen Typen sind, explizit einzeln schützen muss: AuthenticationDomain, Machine, ServerContext, SoftwareComponent. Insbesondere die letzteren sind aber in der Regel Dutzende von Objekten. Jeder, dem das Recht "WriteMetadata" an einem solchen Objekt nicht entzogen wird, kann dieses sehr einfach löschen. Noch ist mir unklar, was dies jeweils zur Folge hätte...

7. Zusätzlich kompliziert wird die Angelegenheit durch folgende Umstände:

a) Viele Metadaten-"Objekte", die in der SMC sichtbar sind, bestehen in Wirklichkeit aus mehreren Metadatenobjekten, und es ist nicht offensichtlich, auf welche dieser Objekte eine in der SMC durchgeführte Aktion (z.B. Löschen oder Berechtigungen ändern) genau wirkt. Hier empfiehlt sich im Zweifelsfall eine Kontrolle im Metadatenbrowser des Display-Managers.

b) Die in der SMC dargestellte Baumstruktur ist nicht identisch mit der Rechtevererbungshierarchie und diese wiederum nicht identisch mit der Hierarchie, entlang der sich Löschungen fortsetzen. Mit anderen Worten: Wenn ich eine Berechtigung in der SMC einstelle, sind zum Teil weitere Objekte betroffen, die scheinbar unabhängig sind, und wenn ich etwas in der SMC lösche, kann ich nicht immer sicher sein, dass alles, was scheinbar davon abhängt, auch gelöscht wird. So können leicht Metadatenleichen entstehen.

c) Viele SAS-Clients und -Solutions scheinen das Metadatenmodell in anderer Weise zu verwenden, als man es aufgrund der (leider relativ spärlichen) Dokumentation des Modells vermuten würde, so dass zum Teil unnötig komplexe und zahlreiche Metadaten entstehen, die schwer durchschaubar sind. Z.B. wird kaum von der Wiederverwendbarkeit von PropertyTypes Gebrauch gemacht, sondern für jede Stringproperty eine neue Kopie des PropertyTypes "String" angelegt; und es wird kaum von der Möglichkeit Gebrauch gemacht, Pfade relativ zu Basispfaden zu vergeben.

d) Assoziationen zwischen Metadatenobjekten sind immer zweiseitig, aber zusammengehörige Assoziationen kann man häufig nicht an ihrem Namen erkennen. Das führt zu gefährlichen Verwechslungsmöglichkeiten, z.B. zwischen AccessControls und AccessControlItems bei einem AccessControlTemplate.

8. Je nach Plattform sollte man sich auch einmal die Zugriffsberechtigungen auf die Metadatenrepositories auf Betriebssystemebene anschauen. Ist z.B. in einer Unix- oder z/OS-Installation das Verzeichnis Foundation, in dem die den einzelnen Metadatentypen entsprechenden SAS-Datasets liegen, nicht schreibgeschützt, so können alle SAS-Datasets gelöscht werden, auch wenn man kein Schreibrecht an den einzelnen Dateien besitzt!

Liste mit Metadatentypen, entlang deren Assoziationen sich Berechtigungen vererben:

ServerContext -> LogicalServer -> ServerComponent -> Connection

ServerComponent -> Directory

ServerComponent -> DeployedDataPackage -> RelationalSchema -> DataTable -> Column

Tree -> SubTree -> Member

Person -> ITSubscriber

PSPortalPage -> PSLayoutComponent

Root -> Extension/Property/PropertyGroup/PropertySet

PropertySet -> Property

TransformationStep -> ClassifierMap

aber nicht (!):

PSPortalPage -x-> PSPortlet

IdentityGroup -x-> Subgroup -x-> Person -x-> Login

PropertyGroup/PropertyType -x-> Property

irgendwas -x-> AuthenticationDomain/Machine/ServerContext/SoftwareComponent

Benötigte Rechte zum Erstellen von Assoziationen

zu 3.

Im Allgemeinen scheint man ein WriteMetadata-Recht am Objekt A zu benötigen, wenn man ein neues Objekt B mit A assoziieren möchte.

Mir sind bisher nur zwei (undokumentierte) Ausnahmen dazu bekannt:

a) Um ein neues Login-Objekt zu erstellen, benötigt man kein WriteMetadata (aber ReadMetadata) für die assoziierte AuthenticationDomain.

b) Um ein neues Objekt (z.B. eine SASLibrary) in einem abhängigen Repository zu erstellen, benötigt man kein WriteMetadata (aber ReadMetadata) für assoziierte Objekte (z.B. ServerComponent) im übergeordneten Repository (i.d.R. Foundation). In diesem Fall sieht man auch die Assoziation im übergeordneten Repository gar nicht, sie scheint also "einseitig" zu sein.

Rechtevererbung entlang von Assoziationen

Zu 4.

Eine umfangreichere (aber auch nicht vollständige) Liste von Assoziationen, entlang derer sich Rechte vererben, findet man, indem man sich die Metadatenobjekte vom Typ SecurityRule anschaut. Dabei gibt es offenbar zwei Arten von SecurityRules:

(a) Die meisten SecurityRules besagen, dass Objekte des Metadatentyps, der im Attribut "TypeName" steht, alle Rechte von Objekten erben, die mit ihm entlang derjenigen Assoziation verbunden sind, die im Attribut "Rule" steht. Diese Rules gelten, sofern nicht explizit verneint (s.u.), auch für alle Untertypen des unter "TypeName" genannten Typs.

(b) Wenn im Attribut "Rule" der SecurityRule stattdessen "IGNORE_SUPERCLASS" steht, heisst das, dass für diesen Metadatentyp nur die explizit diesem Typ zugeordneten SecurityRules gelten, nicht jedoch die für Übertypen.

Leider fehlen in den SecurityRules immer noch bestimmte offenbar dennoch wirksame Regeln, z.B. die sehr wichtige, dass ein AccessControlEntry von seinem assoziierten AccessControlTemplate erbt. (Wäre dies nicht so, müsste man alle ACEs einzeln vor Veränderung schützen!)

Machine-Objekte

zu 6.:

Die Metadatenobjekte vom Typ "Machine" scheinen nicht systemrelevant zu sein.

a) Wenn man Ihren Namen (normalerweise der Hostname) ändert, scheint es keine Auswirkungen auf die assoziierten ServerComponents (z.B. Workspace Server) zu haben. Offenbar wird also im Betrieb nicht der Name des Machine-Objekts sondern das Hostname-Attribute des assoziierten Connection-Objekts verwendet.

b) Wenn man das Machine-Objekt löscht, bleiben die assoziierten ServerComponents erhalten und funktionsfähig.

Daraus folgt wohl, dass Machine-Objekte nicht besonders geschützt werden müssen.

Zustimmung...

... bekommen Sie von mir in vielen genannten Punkten.

Zum Thema Metadaten-Security und Benutzerverwaltung gab es ein Paper auf dem diesjährigen SAS Global Forum:

Zu Ihren Punkten im Detail:
zu 1., 2.
Kann ich nur zustimmen.

zu 3., 4., 5., 6.
Ich denke es ist sinnvoll in der SMC mit Administrator-Benutzer(gruppe)n zu arbeiten:
Man definiert einen administrativen SAS-Benutzer über adminUsers.txt, und nur der soll dann bestimmte administrative Metadaten erstellen, ändern etc. dürfen. Meiner Erfahrung nach spart man sich dann ein paar Probleme im Vergleich zur Option, einem normalen Benutzer an unzähligen Orten Rechte zu verleihen.
Grundsätzlich sollte man ja bei Berechtigungen so viel wie möglich mit Benutzergruppen arbeiten, um den Verwaltungsaufwand gering zu halten. Dies setzt dann allerdings ein gut durchdachtes Konzept voraus.
Ein Vorschlag ist das oben zitierte SGF-Paper.

zu 7. kann ich nur zustimmen, vor allem was Metadaten-Leichen bzw. Redundanzen bei den SAS Clients angeht.
Es entsteht oftmals der Eindruck, die SAS Clients seien auf dieser Ebene nicht aufeinander abgestimmt.

zu 8. Die Frage nach BS-Berechtigungen ist wirklich relevant, da SAS diese ja oft im eigenen Konzept ausklammert ("Schreibrechte werden vorausgesetzt").

Gruß,
J.Lang

Danke

...für den Hinweis auf das Paper.

Zu 3-6: Volle Zustimmung zum Thema Benutzergruppen! Aber: Will man (a) Power-Usern das Erstellen von Stored Processes oder (b) Datawarehouse-Entwicklern das Registrieren von Bibliotheken oder (c) fachliche Content-Administratoren für das Information Delivery Portal erlauben, muss man diesen allen notgedrungen das Recht WriteMetadata im DefaultACT geben. Eine Einschränkung auf eine kleine Zahl Administratoren ist hier nicht möglich! Daraus folgt, dass man dann alles Schützenswerte, also möglicherweise auch Machines und SoftwareComponents, explizit schützen muss...