Seite wählen
Verschachteln einer Security Gruppe in eine Office Gruppe im Azure AD via Powershell

Verschachteln einer Security Gruppe in eine Office Gruppe im Azure AD via Powershell

Nehmen wir an, wir syncen unser On-Premise Active Directory zu Azure AD. Man möchte nun möglichst automatisiert die Provisionierung neuer User vornehmen. Dazu gehört auch die Mitgliedschaft in Office Groups. Office Groups werden in allen Microsoft 365 Produkten verwendet um die Berechtigungen zu vergeben. Zum Beispiel für Microsoft Teams, Sharepoint, etc. Das Naheliegenste würde jetzt sein, einfach eine Security Gruppe die aus dem lokalen On-Premise AD ins Azure AD gesynct wird in eine Office Gruppe zu verschachteln. Aber genau das geht nicht: https://office365.uservoice.com/forums/286611-office-365-groups/suggestions/33942997-add-security-groups-to-office-365-groups

Auf der Suche nach einem Workaround bin ich auf die Idee eines Powershell Skripts gekommen, welches alle Member einer Security Gruppe ausliest und diese einzeln in eine Office-Gruppe verschachtelt. Das ganze sieht dann wie folgt aus:

#This script adds all Members from the specified Security Group to one or more Office Groups
#This Script is a workaround as it is not possible to nest a Security Group into a Office Group in Azure AD

#If the Script can't be executed, please Install the Powershell module AzureAD with the Command below:
#Install-Module AzureAD

#Connect to Azure AD - Log in with a Global Admin
Connect-AzureAD

#Security Group: NAME - ObjectID
#1st Office Group: Name - ObjectID
Get-AzureADGroupMember -ObjectId "%SECURITYGROUPOBJECTID%" | ForEach-Object {Add-AzureADGroupMember -ObjectId "%OFFICEGROUPOBJECTID%" -RefObjectId $_.Objectid  }
#2nd Office Group: Name - ObjectID
Get-AzureADGroupMember -ObjectId "%SECURITYGROUPOBJECTID%" | ForEach-Object {Add-AzureADGroupMember -ObjectId "%OFFICEGROUPOBJECTID%" -RefObjectId $_.Objectid  }

Erklärung des Skripts

%SECURITYGROUPOBJECTID%: Die ObjectID aus dem Azure AD der Security Gruppe die aus dem On-Premise AD gesynct wird.

%OFFICEGROUPOBJECTID%: Die ObjectID aus dem Azure AD der Office Gruppe in welche die User zugeteilt werden sollen.

Das Skript kann auch mit einem Scheduled Task automatisiert werden. Dazu müssen die Credentials beim Connect-Befehl mitgegeben werden. Die Zeilen ab Zeile 10 können beliebig oft wiederholt werden.

Wenn das Skript einen User probiert zu verschachteln, welcher schon ein Member ist, wird eine Fehlermeldung ausgegeben, welche ignoriert werden kann:Error Message Powershell AzureAD Applet

Was macht das Skript nicht?

Das Skript fügt nur neue Benutzer hinzu, es entfernt aber keine Benutzer. Wenn ein Benutzer nicht mehr Mitglied einer Security Gruppe ist, wird er weiterhing Member der Office Gruppe sein.

Vorbedingungen

Das Skript muss auf einem Computer ausgeführt werden, welcher Zugriff auf das Azure AD hat. 

Verschachteln einer Gruppe in eine andere Gruppe aus dem Domain Forest in Active Directory via Powershell

Nehmen wir an, wir haben mehrere Active Directories, die einen Full-Trust haben (dies ist Voraussetzung, dass dies überhaupt funktioniert) und wir möchten nun eine Gruppe aus dem einen Active Directory in eine andere Gruppe aus dem zweiten AD verschachteln. Dies geht via Powershell nur mit Umwegen, da nach meinen Beobachtungen das Powershell-Modul “ActiveDirectory” nicht mit mehreren Domains umgehen kann. Daher müssen wir zuerst alle Informationen einer Gruppe aus dem ersten Active Directory in eine Variable laden und danach entsprechend mit der Variable zusammen im zweiten Active Directory die Verschachtelung vornehmen. Das ganze sieht dann wie folgt aus:

$forestAAAGroup = Get-ADGroup %GROUPNAMECORP% -server corp.company.com
Add-ADGroupMember -server othercorp.company.com -Identity %GROUPNAMEOTHERCORP% -Members $forestAAAGroup

Erklärung des Skripts

%GROUPNAMECORP%: Gruppe, welche schlussendlich in der Gruppe %GROUPNAMEOTHERCORP% verschachtelt, also ein Mitglied von der Gruppe %GROUPNAMEOTHERCORP% sein soll. Muss mit dem Namen der entsprechenden Gruppe vor Ausführung ausgetauscht werden.

%GROUPNAMEOTHERCORP%: siehe oben. Muss mit dem Namen der entsprechenden Gruppe vor Ausführung ausgetauscht werden.

-server: definiert das Active directory, welches angefragt werden soll. Dies muss entsprechend auf die zwei zu verwendenden Active Directories in beiden Zeilen angepasst werden.

Vorbedingungen

Damit das Skript korrekt durchläuft, muss es mit einem berechtigen Domainuser (muss Zugriff aufs Active Directory haben, Powershell muss nicht als Admin ausgeführt werden) auf einem Computer/Server ausgeführt werden, welcher folgende Bedingungen erfüllt:

  • Domain Joined
  • Hat das Powershell Modul “ActiveDirectory” installiert: https://docs.microsoft.com/en-us/powershell/module/addsadministration
    Dieses Modul wird entweder direkt vor dem Skript via Befehl “Import-Module ActiveDirectory” oder via Installation des Windows Features “AD DS and AD LDS Tools”
  • Der Server muss auf beide Active Directories zugreifen können.

Suche nach “ObjektSID” in Active Directory via Powershell

Damit man einen User aufgrund der ObjektSID (objectSID) im Active Directory finden bezw. identifizieren kann, muss man via Powershell-Modul “ActiveDirectory” folgenden Befehl absetzen:

 

$forestAAAGroup = Get-ADGroup %GROUPNAMECORP% -server corp.company.com
Add-ADGroupMember -server othercorp.company.com -Identity %GROUPNAMEOTHERCORP% -Members $forestAAAGroup

Vorbedingungen

Damit das Skript korrekt durchläuft, muss es mit einem berechtigen Domainuser (muss Zugriff aufs Active Directory haben, Powershell muss nicht als Admin ausgeführt werden) auf einem Computer/Server ausgeführt werden, welcher folgende Bedingungen erfüllt:

Mögliche Fehler

Sollte kein Objekt gefunden werden mit der entsprechenden SID, wird ein Fehler ausgegeben:

  • Get-ADUser : Cannot find an object with identity: ‘S-1-5-21-….’

Die Ursache kann sein, dass es sich nicht um ein Userobjekt im Active Directory handelt, sondern zum Beispiel um ein Computer oder eine Gruppe. Dazu müssen verschiedene Powershell-Befehle verwendet werden, siehe hierzu: https://docs.microsoft.com/en-us/powershell/module/addsadministration 
Zum Beispiel für eine Gruppe Get-ADGroup oder für ein Computer Get-ADObject. Der Syntax bleibt dabei jedoch gleich.