JEA Just Enough Administration

Was tun, wenn es im Unternehmen viele Administratoren gibt, die gar nicht so recht Administratoren sind oder sein dürfen? Oft wird mit Berechtigungen sehr sorglos umgegangen, zum Leid der Nutzer und Ärger der “wirklichen” Admins. Gut, man kann vieles durch Gruppenmitgliedschaften oder Gruppenrichtlinien einschränken. In der PowerShell gibt es einen sehr eleganten Weg:  und jetzt kommt Just Enought Administration (JEA) ins Spiel. Wer sich schon mit Exchange beschäftigt hat, wird feststellen, dass da nichts anderes gemacht wird. Und zwar mit  Rollenbasiertem Zugriff, auf englisch RBAC: Role Based Access Control. Wenn man über die PowerShell auf einen Exchange Server zugreift, werden auch nur die für die Rolle bereitgestellten Befehle sichtbar sein. Mit JEA kann man dieses jetzt generell machen und sehr granular.

Ein Bespiel:

Für die Verwaltung des DNS Server soll das Netzwerkteam DNS-A Einträge erstellen und löschen dürfen.
Um das mit JEA umsetzen zu können, werden zwei Files benötigt: eine Datei, in der die erlaubten Befehle und Möglichkeiten beschrieben werden: die RoleCapability – Datei (*.psrc) und eine Datei, die den Verbindungspunkt beschreibt, die PSSessionconfiguration – Dabei (*.pssc). Diese beiden Files werden gleich noch etwas genauer betrachtet. Zusammengefasst müssen folgende Punkte erledigt werden:

  • Erstellen der RoleCapability Datei
  • Erstellen der PSSessionConfiguration Datei
  • Registrieren des Endpunktes

Doch erst einen Blick auf die Umgebung

umgebung

Es werden drei Server betrachtet, ein Domänen Controller für die Authentifizierung, der Server auf den das Netzwerkteam Beschränkten Zugriff haben soll (AB-SRV16-01) und den  Server von den der Zugriff geschehen soll (AB-SRV-04). Als Testkennung wird die Kennung joinpowershell\sorglossu verwendet.

Erstellen der RoleCapability Datei

Wie schon gesagt, die RoleCapability Datei beschreibt die erlaubten Möglichkeiten des mit dem Endpunkt verbundenen Nutzers. In diesem Beispiel sind das die Befehle Add-DnsServerResourceRecordA
und Remove-DnsServerResourceRecord. Außerdem sollen nicht gleich alle Mitglieder des Netzwerkteams Zugriff bekommen. Zum Implementieren von JEA wird zunächst nur die Mitarbeiterin Susi Sorglos berechtigt.

Eine RoleCapability – Datei kann mit dem Befehl New-PSRoleCapabilityFile erstellt werden. Diese Datei muss immer zu Verfügung stehen, da der Endpunkt darauf referenziert wird. Am besten eignet sich hierfür ein neues Modul. Dieses Modul kann auch mit eigenen Funktionen gefüllt werden. Wichtig ist der Ordner RoleCapabilities und die darin befindliche *psrc Datei.
Damit wird auch begonnen: Anlegen des Modules und einer nicht konfigurierten *.psrc Datei.

 

Der Ordner RoleCapabilies muss vorhanden sein, denn in diesem werden sich die einzelnen psrc Dateien befinden, auf diese dann verwiesen wird. Der Inhalt dieser Dateien ist recht einfach zu verstehen und es ist sinnvoll sich so ein Muster bereitzuhalten. Da alle Einträge mit Beispielen hinterlegt sind, die sonst überschrieben werden. Wenn man das System einmal verstanden hat, kann man ganz einfach die Datei um Funktionen und CmdLets  erweitern.

 

Natürlich kann man jetzt einhergehen und diese Datei anpassen oder es wird gleiche eine Datei mit den entsprechenden Parametern erstellt. Hierzu wird erstmal die alte Datei gelöscht.

 

Und nun wird eine neue mit den Parametern für das Netzwerkteam erstellt:

 

Um die verbundene Sitzung etwas untersuchen zu können, wurde noch die Funktion Get-UserInfo implementiert. Wenn, wie gleich zu sehen ist, sind JEA Sitzungen sehr stark eingeschränkt.

Und beim Betrachten der Neuen Datei werden auch die Definitionen sichtbar.

 

Die RoleCapability-Datei wurde nach den Vorstellungen erstellt und nun geht es an die Konfiguration des Endpunktes.

Erstellen der PSSessionConfiguration Datei

Bei der Verbindung zu einem Remote Computer wird die Verbindung mit einem Endpunkt hergestellt. Mit Get-PSSessionConfiguration werden die vorhandenen Endpunkte angezeigt.

Die Sessionconfiguration-Datei ist genauso einfach gestrickt wie die RoleCapability-Datei. Die Datei wird mit dem CmdLet New-PSSessionConfiguration erstellt. Es empfiehlt sich auch hier eine Kopie bereit zu halten.
Folgend ist eine unausgefüllte SessionConfiguration-Datei zu sehen:

 

Wichtig sind die Punkte User Roles und Session Type. Bei Session Type ist es zu empfehlen ‚’RestrictedRemoteServer’ zu verwenden. Dieser Typ ist der sicherste und erlaubt zum Beispiel keine Skripteingabe. Also foreach Schleifen oder Pipelineing.

Die PSSessionConfiguration-Datei für dieses Beispiel wird wie Folgt erstellt:

 

Bei Betrachtung der neu erstellten Datei sind die Konfigurationen gut zu erkennen. Wichtig ist der Punkt RoleDefinitions. An dieser Stelle ist die Verknüpfung zur Capability Datei beschrieben und wer sich verbinden darf.

Registrieren des Endpunktes

Nachdem die Datei erstellt wurde muss der Endpunkt noch registriert werden. Dies ist nötig, damit bei der Verbindung zum Remote Computer auch die Konfiguration ausgewählt werden kann.

Die Registrierung erfolgt ganz einfach mit nur einem Befehl:

Wie auch in der Warnung beschrieben sollte der WinRM dienst neugestartet werden.

 

Und auch in den Konfigurationen ist der Neue Endpunkt vorhanden:

Mit dem Account joinpowershell\sorglossu wird die JEA Konfiguration getestet.

Dazu wird von einem anderen Server eine Verbindung zu dem Endpunkt aufgebaut, ganz einfach mit Enter-PSSession:

Nach der Passworteingabe ist die Verbindung über den Endpunkt DNSOperator hergestellt. Mit Get-Command lassen sich jetzt die zu Verfügung stehenden Befehle Anzeigen.

Auch die zuvor geschriebene Funktion Get-UserInfo ist vorhanden und ausführbar.

Hier ist sehr gut zu sehen, dass alle Befehle unter einem virtuellen Nutzer ausgeführt werden. Dieser Nutzer läuft unter dem Systemaccount.

Wie erwartet funktioniert auch kein Ausführen von Skripten oder Anzeigen von Umgebungsvariablen
errormessages

Das Netzwerkteam stellt später bei dem Testen der Verbindungen fest, dass noch weitere Befehle benötigt werden.

Anpassen der Berechtigungen

Wenn die SessionConfiguration Datei angepasst wurde, muss der Endpunkt immer gelöscht und neu registriert werden. Da die Zugriffe sich selten ändern oder über Gruppen gelöst wird, wird dies nicht so oft passieren. Wenn sich jedoch herausstellt, dass dem Netzwerkteam nicht alle benötigten Befehle zu Verfügung stehen, muss nur die RoleCapability-Datei angepasst werden. Das hat zum Vorteil, dass der Endpunkt nicht erst gelöscht und wieder registriert werden muss.

So stellte sich heraus, dass nicht nur A-Records erstellt werden müssen, sondern auch andere. Weiterhin sollen DNS Einträge auch angezeigt werden und auf Kommandozeilen Tools wie ipconfig.exe soll zugegriffen werden. Auch muss es die Möglichkeit geben, den DNS Server Dienst neustarten zu können. Aber nur den DNS Dienst! Um dies alles zu realisieren muss nur die RolecapabilityDNS.psrc Datei angepasst werden:

 

Nachdem die Sitzung neu Verbunden wurde, sind nun die weiteren Befehle vorhanden:

ipconfig

 

nachrcanpassung

Das soll es erst einmal zum Thema JEA sein.

Über Andreas Bittner

MCSA Server 2016, MCSA Server 2012R2, Exchange 2010 & SharePoint Devop
Dieser Beitrag wurde unter DevOps, Entwicklung, Grundlage, PowerShell, Scripting abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

1 Response to JEA Just Enough Administration

  1. Pingback: PSConf2017 | Show-ThirdDay | Join-PowerShell

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.