SourceAnchor Gruppen
Neben den Benutzern synchronisiert ADSync auch Gruppen. Bei Benutzern gibt es eine "ImmutableID" aber bei Gruppen gibt es dieses Feld anscheinend nicht. Wie findet dann hier das "Matching" statt?
Zum Verständnis sollen Sie die Seite SourceAnchor vorab lesen. Für Benutzer gibt es eine eigene Seite auf SourceAnchor User.
Source Anchor für Gruppen
Anders als eine Mailbox sind Gruppen nicht mit einem Datenspeicher verbunden. Theoretisch wäre es gar nicht schlimm, wenn die Objekte bei einer Umorganisation im lokalen Active Directory gelöscht und wieder neu angelegt werden. Wobei das auf der anderen Seite doch nicht so schön wäre, z.B.
Gruppen und Verteiler mit Mitgliedern können theoretisch ebenfalls gelöscht und wieder angelegt werden. Microsoft 365 Groups werden vom ADSync sowieso ignoriert. Dennoch sind Gruppen mit Mailadresse nicht nur Verteiler in Exchange. Gruppen werden auch von Anwender genutzt, um diese z.B. auf Datenbereich in SharePoint oder auf Postfächer zu berechtigen. Da käme ein "Löschen und neu Anlegen" nicht so gut.
Also muss ADSync auch hierfür eine Lösung haben.
Keine ImmutableID sichtbar
Wenn ich mir aber die Kontakte und Gruppen mit den unterschiedlichen Powershell-Befehlen in der Cloud anschaue, dann finde ich hier kein Feld namens "ImmutableID", wie die bei den Benutzern (Siehe SourceAnchor User) vorhanden ist.
Objekt | AzureAD | MSOL |
---|---|---|
Gruppe |
PS C:\> Get-MsolGroup -SearchString 'ADGroup-SG' | fl * ExtensionData : System.Runtime.Serialization.ExtensionDataObject AssignedLicenses : {} CommonName : ADGroup-SG Description : DirSyncProvisioningErrors : DisplayName : ADGroup-SG EmailAddress : Errors : GroupLicenseProcessingDetail : GroupType : Security IsSystem : False LastDirSyncTime : 02.02.2021 23:32:05 Licenses : {} ManagedBy : ObjectId : b7e6ab72-2694-42b6-9421-9e8e948d17fb ProxyAddresses : {} ValidationStatus : Healthy |
PS C:\> Get-AzureADGroup -Filter "Displayname eq 'ADGroup-SG'" | fl DeletionTimestamp : ObjectId : b7e6ab72-2694-42b6-9421-9e8e948d17fb ObjectType : Group Description : DirSyncEnabled : True DisplayName : ADGroup-SG LastDirSyncTime : 02.02.2021 23:32:05 Mail : MailEnabled : False MailNickName : ADGroup-SG On-PremisesSecurityIdentifier : S-1-5-21-1343410112-1294273473-3016097062-1110 ProvisioningErrors : {} ProxyAddresses : {} SecurityEnabled : True |
Ohne ImmutableID müsste ein anderes Feld der primäre Schlüssel sein.
Felder in ADSync
Ein Blick in ADSync zeigt dann aber schon weitere Details. Der Source Anchor wird wieder aus der ObjectGUID oder ersatzweise aus dem Feld ms-DS-ConsistencyGuid gebildet. Zusätzlich wird der SourceAnchor aber noch per UTF8HEX-Konvertierung zum CN des DistinguishedName. Interessant ist hier, dass der "CN" im AzureAD anhand des SourceAnchor gebildet wird.
Auch hier wird der CN in der Cloud von dem SourceAnchor abgeleitet und der stammt ursprünglich von der ObjectGUID ab, die dann aber zumindest bei der Gruppe von ADSync wieder in den ms-DS-ConsistencyGuid zurückgeschrieben wird.
... But note that Azure AD Connect
doesn't write the value back to the mS-DS-ConsistencyGuid attribute
in Active Directory...
Quelle
https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-migrate-groups
Wenn eine Gruppe daher das Feld "ms-DS-ConsistencyGUID" enthält , dann können sie diese Gruppe später auch in andere Forests verschoben werden. Sie müssen nur drauf achten, dass der Inhalt von "ms-DS-ConsistencyGUID" sauber mitkommt.
Leider ist der CN als auch der DN nicht über die AzureAD PowerShell oder MSOnline PowerShell zu sehen. Schaut man noch etwas weiter in ADSync nach, dann findet sich im Connectorspace der Gruppe zum AzureAD auch ein CloudSourceAnchor und einen SourceAnchor:
Bei einem Benutzer ist der SourceAnchor" über die AzureAD-PowerShell bzw. MSOnline-PowerShell sichtbar und zum Teil auch änderbar.
Ich finde es sehr schade, dass Microsoft diese Information in der Cloud nicht zumindest lesbar macht.
Test mit Graph
Vielleicht ist über die GraphAPI mehr zu sehen unter der URL https://graph.microsoft.com/v1.0/groups kann ich mir mit dem Graph Explorer ganz schnell die Gruppen anzeigen lassen. Ich finde hier auch die Gruppe ADGroupSG, die aus dem lokalen Active Directory repliziert wird.
Allerdings ist auch hier nur eine ID zu sehen aber keine CN oder DN.
ms-DS-ConsistencyGUID
Seit der ADSync Version 1.5.18.0 wertet ADSync auch das Feld ms-DS-ConsistencyGUID aus, wenn es um das Matching von Gruppen geht. Allerdings gibt es einen wesentlichen Unterschied zu "Benutzern"
Starting in version 1.5.18.0, Azure AD
Connect supports the use of the mS-DS-ConsistencyGuid
attribute for groups. If you choose mS-DS-ConsistencyGuid as
the source anchor attribute and the value is populated in
Active Directory, Azure AD Connect uses the value of mS-DS-ConsistencyGuid
as the immutableId. Otherwise, it falls back to using
objectGUID. But note that Azure AD Connect doesn't write the
value back to the mS-DS-ConsistencyGuid attribute in Active
Directory.
Quelle:
https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-migrate-groups
Wichtig ist die Information, dass ADSync das Feld ms-DS-ConsitencyGuid nicht selbst beschreibt. Das können sie aber schnell selbst nachholen.
Diese Aktion ist nur erforderlich, wenn
Sie Gruppen wirklich "Cross Forest" in einen anderen Forest
migrieren wollen, bei der die ObjectGUID nicht erhalten
bleibt.
Ansonsten können Sie sich diese Zusatzfunktion sparen.
get-adgroup ` -filter * ` | %{` Write-Host "Update Group $($_.distinguishedname)" Set-ADGroup ` -Identity $_.distinguishedname ` -Replace @{"ms-DS-ConsistencyGUID"=$_.ObjectGUID}` }
Damit bekommen dann alle Gruppen die objectGUID übertragen und können dann auch "CrossForest" migriert werden. In ADSync sehen Sie dann auch, dass das geänderte Feld eingelesen wurde
Diese Feld ist übrigens auch ein gutes Hilfsmittel, um das Verhalten einer Migration zu beobachten. Sie können ja einfach den Inhalt von ms-DS-ConsisencyGuid ändern und die Reaktion von ADSync darauf beobachten. Ich habe einfach mal die ms-DS-ConsistencyGuid geändert.
ADSync hat dies aber "gemerkt" und einen "Synchronization Error" geworfen.
Error in evaluation of expression: IIF(IsPresent([cloudSourceAnchor]), IIF([cloudSourceAnchor] = [sourceAnchor], [sourceAnchor], Error("SourceAnchor attribute has changed.") ), [sourceAnchor] ) . Sync Rule: Out to AAD - Group Join Destination: sourceAnchor
Ich hatte erwartet, dass ADSync ein neues Objekt erkennt und das "alte" löscht. Aber da habe ich mich getäuscht. So einfach lässt sich ADSync nicht ein bestehendes Objekt kaputt machen. Es muss schon ein "neues Objekt" sein, welches gleich mit dem ms-DS-ConsistencyGuid gelesen und imporiert wird.
Das Feld ms-DS-ConsistencyGuid kann natürlich auch genauso einfach wieder geleert werden:
get-adgroup ` -filter * ` | %{` Write-Host "Update Group $($_.distinguishedname)" Set-ADGroup ` -Identity $_.distinguishedname ` -clear "ms-DS-ConsistencyGUID" ` }
Der "Cleanup" ist aber nicht ratsam, wenn in ihrem Forest bereits aus anderen Forests migrierte Konten sind, denn dann würde ADSync die Verbindung verlieren, die AzureAD-Gruppe löschen und mit der ObjectGUID neu anlegen.
Zwischenstand
Anhand der Daten aus ADSync kann ich erkennen, dass ADSync für Gruppen sehr wohl ein Feld "SourceAnchor" im AzureAD befüllt, aber zusätzlich auch aus dem Sourceanchor anscheinend den CN des LDAP-Pfad des Objekte generiert. Ich finde das ungewöhnlich aber es sollte kein Problem darstellen, da der CN ja "nur" ein relativer Teil des gesamten LDAP-Pfads ist. Sollte also wirklich einmal ein anderer Tenant die gleiche ObjectGUID im lokalen Active Directory verwendet, stört dies nicht weiter.
Mich stört aber schon, dass ich weder den CN noch die ImmutableID des Objekt in der Cloud auslesen oder sogar setzen kann. Das nimmt mit natürlich die Möglichkeit, eine Gruppe über ein "Hard-Match" wieder zu verbinden. Ich muss in dem Fall ein unwiederbringlich gelöschtes Objekte im lokalen Active Directory neu anlegen, das passende Objekt in der Cloud aus dem dortigen Papierkorb extrahieren und dann ein Soft-Match über das Feld "Mail" machen. Wobei dazu die ImmutableID im AzureAD erst gelöscht werden müsste.
Also müsste man zuerst das Objekt im AzureAD wiederherstellen und sich über ADSync den SourceAnchor in der Cloud auslesen und davon abgeleitet dann das Feld ms-DS-ConsistencyGuid füllen
Hier gibt es also noch einige Fragen zu beantworten, wenn der erste Kunde mit solchen Problemen bei mir anruft.
Weitere Links
- SourceAnchor
- ADSync - Gruppen matchen
- ADSync und Gruppen
- AD-Reorg mit ADSync
- SourceAnchor und ADMT
- ADSync mit Devices
- ADSync - Objekte löschen und zurückholen
- [Powershell Script] Convert ImmutableID
https://blog.jumlin.com/2018/09/powershell-script-convert-immutableid/ - Batch convert immutableID into Hexadecimal for
ms-dS-ConsistencyGuid
https://www.reddit.com/r/PowerShell/comments/e6yg7h/batch_convert_immutableid_into_hexadecimal_for/ - KnowledgeBase: You receive “the mS-DS-ConsistencyGuid
attribute is already in use” when you change the source anchor
on a Staging Mode Azure AD Connect installation
https://dirteam.com/sander/2020/08/19/knowledgebase-you-receive-the-ms-ds-consistencyGuid-attribute-is-already-in-use-when-you-change-the-source-anchor-on-a-staging-mode-azure-ad-connect-installation/ -
Using ms-DS-ConsistencyGuid as sourceAnchor
https://docs.microsoft.com/en-us/azure/active-directory/hybrid/plan-connect-design-concepts#using-ms-ds-consistencyGuid-as-sourceanchor -
Explained: User Hard Matching and Soft Matching in Azure AD
Connect
https://dirteam.com/sander/2020/03/27/explained-user-hard-matching-and-soft-matching-in-azure-ad-connect/ -
Azure AD Connect: objectGUID vs. mS-DS-ConsistencyGuid,
Part 1: https://dirteam.com/sander/2017/07/12/azure-ad-connect-objectguid-vs-ms-ds-consistencyGuid-part-1/
Part 2: https://dirteam.com/sander/2017/08/24/azure-ad-connect-objectguid-vs-ms-ds-consistencyGuid-part-2/
Part 3: https://dirteam.com/sander/2017/08/31/azure-ad-connect-objectguid-vs-ms-ds-consistencyGuid-part-3/ -
Azure AD Connect v1.5.18.0 brings mS-DS-ConsistencyGuid as
source anchor for Groups
https://dirteam.com/sander/2020/04/03/azure-ad-connect-v1-5-18-0-brings-ms-ds-consistencyGuid-als-source-anchor-for-groups/ - Azure AD Connect - procedure to change source of anchor from
ObjectSID to Ms-DS-ConsistencyGuid
https://docs.microsoft.com/en-us/answers/questions/124627/azure-ad-connect-procedure-to-change-source-of-anc.html