Tags: Active Directory, PowerShell, Rechteverwaltung
Seit Server 2016 ist es möglich, Benutzer temporär in AD-Gruppen aufzunehmen und so ihre Berechtigungen zeitlich zu beschränken. Die Bordmittel sehen dafür nur PowerShell vor. Mein hier beschriebenes Script bietet aber eine GUI, so dass auch technisch nicht versierte User diese Aufgabe übernehmen können.
Temporäre Gruppenmitgliedschaften setzen einen Forest Functional Level von Server 2016 und die Aktivierung des PAM-Features voraus. Die Grundzüge dieser Technologie sowie die einzelnen Schritte zu ihrer Nutzung hat mein Kollege Marcel Küppers bereits in diesem Beitrag beschrieben.
Gängige Anwendungsfälle
Der Bedarf an zeitlich begrenzten Berechtigungen ist zum Beispiel gegeben, wenn externe Consultants an einem Projekt arbeiten oder wenn Auszubildende regelmäßig die Abteilung wechseln.
Bei Azubis kommt es sonst oft vor, dass sie die Rechte aus der alten Abteilung behalten und jene für die neue zusätzlich bekommen. Am Ende ihrer Ausbildungszeit haben sie dann mehr Berechtigungen im System als jeder andere Mitarbeiter.
Kein GUI-Tool unter den Bordmitteln
Server 2016 bringt eine eigene Lösung für die zeitliche Beschränkung von Berechtigungen mit. Das Problem daran ist aber leider, dass diese Funktion nur über PowerShell zu steuern ist und viele Kollegen immer noch Berührungsängste damit haben.
Die Vergabe von zeitlich begrenzen Gruppenmitgliedschaften eignet sich für die Delegierung an die Personal- oder eine andere Fachabteilung, weil die Mitarbeiter dort in der Regel besser wissen, wie lange ein externer Berater oder ein Azubi in einem Projekt bzw. in einer Abteilung tätig ist. Bei solchen nicht-technischen Anwendern wird es mit der reinen PowerShell noch schwieriger.
Meistens wird dann eine Software von einem Drittanbieter gekauft, welche diese Aufgabe über eine grafische Oberfläche vereinfacht. Mit ein bisschen Aufwand lässt sich aber in PowerShell dieses Ziel ebenfalls erreichen.
Eigene GUI mit PowerShell
Ich habe mir hierzu ein paar Gedanken gemacht, herausgekommen ist eine kleine GUI, welche jeder berechtigte Benutzer leicht bedienen kann. Wie man mit PowerShell grundsätzlich eine grafische Oberfläche entwickelt, habe ich bereits in diesem Beitrag beschrieben.
Bevor das Script dem Benutzer eine die Auswahl von Konten oder eines Datums erlaubt, überprüft es, ob das Feature Privileged Access Management (PAM) überhaupt aktiviert wurde:
If((Get-ADOptionalFeature -Identity 'Privileged Access Management Feature').EnabledScopes.Count -eq 0){
# Fehlermeldung und Ende
}
Sollte dies nicht der Fall sein, dann bricht die Ausführung mit dem entsprechenden Hinweis ab.
Ist diese Bedingung jedoch erfüllt, dann kann der Benutzer auszuwählen, welcher User in welche Gruppe aufgenommen werden soll. Im Kalender legt er dann fest, wie lange die Gruppenmitgliedschaft erhalten bleibt.
Normalerweise muss man den Zeitraum für die Mitgliedschaft ("Time to live") in Tagen, Stunden oder Minuten angeben. Mein Script berechnet diesen Wert auf Basis des gewählten Datums im Hintergrund selbst.
Nach dem Klicken auf OK prüft das Script, ob der Benutzer bereits Mitglied in der ausgewählten Gruppe ist. Trifft dies zu, dann gibt es eine entsprechende Rückmeldung:
Ist das nicht der Fall und sollte ansonsten alles in Ordnung sein, dann sieht der Benutzer folgende Bestätigung für seine Aktion.
Das Script ist insgesamt ein ganz einfaches Tool, welches man verschieden Benutzer oder IT-Kollegen an die Hand geben kann, um temporäre Berechtigungen zu setzen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Roland Eich ist gelernter Fachinformatiker für Systemintegration und in der IT seit über 14 Jahren zu Hause. Roland deckt aufgrund seiner Erfahrungen ein breites Spektrum der Microsoft-Produktpalette ab.Zudem besitzt er verschiedene Zertifizierungen (MCITP, MCSA und MCSE, ITIL, PRINCE2).
// Kontakt: E-Mail //
Verwandte Beiträge
- Praxisbeispiel für JEA: Management von Storage Spaces Direct (S2D) delegieren
- Zugriffsrechte für OUs im Active Directory anzeigen mit PowerShell
- Managed Service Accounts einrichten mit PowerShell
- Security- und Health-Checks für Active Directory mit PowerShell-Scripts
- Besitzer von Computer-Objekten im Active Directory anzeigen und ändern
Weitere Links
5 Kommentare
Hallo Roland,
danke für den Einblick und das Tool.
Das wird es vielen erleichtern die wichtige Hürde zu nehmen und die Anfangsängste bei dem Thema abzulegen.
Leider hat sich in Deinem Skript ein Fehler eingeschlichen.
Hier die Fehlermeldung:
New-TimeSpan : Cannot bind parameter 'Minutes' to the target. Exception setting "Minutes": "Cannot convert null to type "System.Int32"."
At C:\Skripte\JiT-GUI.ps1:128 char:134
+ ... m -MemberTimeToLive (New-TimeSpan -Minutes (($Tag1 - $Tag2).Minutes))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (:) [New-TimeSpan], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.NewTimeSpanCommand
Der Benutzer ist auch nicht in der Gruppe.
Viele Grüße
Dominik
Hallo Dominik,
danke für deinen Post, da hast du natürlich recht, da habe ich statt der Totalminuten nur die Minuten ausgelesen und falsch platziert.
Anbei damit sollte es gehen. Der Code wird hier natürlich auch noch angepasst.
# Message setzen und Gruppe dem Benutzer hinzufügen bzw. abprüfen
$mgm1 = "Der ausgewählte Benutzer",$objCombobox.SelectedItem,"ist bereits in der ausgewählten Gruppe",$objCombobox1.SelectedItem, "enthalten!"
$mgm2 = "Benutzer wurde in die Gruppe",$objCombobox1.SelectedItem,"hinzugefügt! Gültigkeit bis",$calendar.SelectionStart
if (Get-ADGroupMember $objCombobox1.SelectedItem | Where-Object {$_.SamAccountName -eq $objCombobox.SelectedItem})
{
$Result = [System.Windows.Forms.MessageBox]::Show($mgm1,"Frage an den Benutzer",0)
}
else
{
$Tag1 = $calendar.SelectionStart
$Tag2 = Get-Date
$Tag = ($Tag1 - $Tag2).TotalMinutes
Add-ADGroupMember -Identity $objCombobox1.SelectedItem -Members $objCombobox.SelectedItem -MemberTimeToLive (New-TimeSpan -Minutes $Tag)
$Result = [System.Windows.Forms.MessageBox]::Show($mgm2,"Frage an den Benutzer",0)
}
})
Grüße
Roland
Hallo Roland,
jetzt passt es, danke Dir!
Viele Grüße
Dominik
Klasse Idee!
Was für eine coole Idee, genau auf sowas habe ich gewartet.
Frage, könntest du das Skript noch etwas erweitern? z.B. Auslesen eines Users wie lange die Gruppe noch bei ihm gültig ist (Restzeit) und ggf. das man auch eine Verlängerung der Gruppenmitgliedschaft setzen kann bevor diese ausläuft?
Das wäre obercool.