Zeitbasierte Gruppenzugehörigkeit

Active Directory DEMO-NETZ

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

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.