Zeitbasierte Gruppenzugehörigkeit
Im Rahmen des sog. „Privileged Access Management“ gibt es ab Windows Server 2016 die Möglichkeit auch zeitbasierte Gruppenzugehörigkeit (engl.: „Timebased groupmembership“) zu verwenden. Standardmäßig ist dieses Feature deaktiviert und muss nachträglich aktiviert werden.
Der Admin-Account, welcher verwendet wird, hat bei mir für diese Aktion folgende Gruppenmitgliedschaften:
- Administrators
- Domain Admins
- Enterprise Admins
Einrichtung
Mit folgendem Befehl kann herausgefunden werden, welche Abhängigkeit in Bezug auf Forest-Mode besteht:
Get-ADOptionalFeature -Filter * | Select-Object Name,RequiredForestMode
Anschließend kann hiermit der aktuelle Forest-Mode ausgelesen werden:
(Get-ADForest).ForestMode
Ist die Bedingung erfüllt, kann hiermit das optionale AD-Feature aktiviert werden:
Enable-ADOptionalFeature 'Privileged Access Management Feature' -Scope ForestOrConfigurationSet -Target DEMOLABOR.intern
Verwendung
Im folgenden Beispiel wird der Benutzeraccount „MaMu“ (das ist in meinem Testfall der Logonname) der AD-Gruppe „Domain Admins“ hinzugefügt, dabei wird angegeben, dass die Zeitspanne „5 Minuten“ sein soll:
Add-ADGroupMember -Identity 'Domain Admins' -Members 'MaMu' -MemberTimeToLive (New-TimeSpan -Minutes 5)
Die erfolgreiche Gruppenaufnahme kann ebenfalls mit PowerShell geprüft werden:
Get-ADGroup "Domain Admins" -Properties Member -ShowMemberTimeToLive
Hierbei sieht man dann ein „<TTL=295>“ vor dem Benutzeraccount „Max Muster“.
Da man gerade bei größeren Zeitspannen, das schlecht im Kopf umrechnen kann, gibt es dank Frankys Web auch ein tolles Script, mit dem das ganze wesentlich besser dargestellt werden kann. Man muss in der ersten Zeile nur die AD-Gruppe eintragen, für welche die Gruppenmitglieder (inkl. der zeitbasierten Mitglieder) ausgelesen werden sollen:
$GroupName = "Domain Admins"
$GroupMembers = (Get-ADGroup $GroupName -Property member -ShowMemberTimeToLive).Member
$MemberList=@()
foreach ($GroupMember in $GroupMembers)
{
if ($GroupMember -match "TTL=")
{
$TTL = $GroupMember.split(",")[0].split("=")[1].replace(">","")
$TTLDate = (Get-Date).AddSeconds($TTL)
$MemberDN = $GroupMember.Split(">")[1].Replace(",CN","CN")
$MemberList += new-object PSObject -property @{DN=$MemberDN;TTLDate="$TTLDate";TTL="$TTL"}
}
else
{
$TTL = "Unlimited"
$TTLDate = "Unlimited"
$MemberDN = $GroupMember
$MemberList += new-object PSObject -property @{DN=$MemberDN;TTLDate="$TTLDate";TTL="$TTL"}
}
}
$MemberList
Kurze Bildergalerie


