Configurer la synchronisation délimitée de Microsoft Entra ID à Microsoft Entra Domain Services en utilisant Microsoft Graph PowerShell

Afin de fournir des services d’authentification, Microsoft Entra Domain Services synchronise des utilisateurs et des groupes à partir de Microsoft Entra ID. Dans un environnement hybride, les utilisateurs et les groupes d’un environnement Active Directory Domain Services (AD DS) local peuvent d’abord être synchronisés avec Microsoft Entra ID en utilisant Microsoft Entra Connect, puis synchronisés Domain Services.

Par défaut, tous les utilisateurs et groupes d’un répertoire Microsoft Entra sont synchronisés avec un domaine géré par Domain Services. Si vous avez des besoins spécifiques, vous pouvez opter pour la synchronisation d’un ensemble défini d’utilisateurs.

Cet article vous montre comment créer un domaine géré qui utilise la synchronisation cadrée, puis modifier ou désactiver l'ensemble des utilisateurs cadrés à l'aide de MS Graph PowerShell. Vous pouvez également effectuer ces étapes au travers du Centre d’administration Microsoft Entra.

Avant de commencer

Pour faire ce qui est décrit dans cet article, vous avez besoin des ressources et des privilèges suivants :

Vue d’ensemble de la synchronisation délimitée

Par défaut, tous les utilisateurs et groupes d’un répertoire Microsoft Entra sont synchronisés avec un domaine géré. Si seuls quelques utilisateurs ont besoin d’accéder au domaine managé, vous pouvez synchroniser uniquement ces comptes d’utilisateurs. Cette synchronisation délimitée est basée sur les groupes. Quand vous configurez la synchronisation délimitée basée sur les groupes, seuls les comptes d’utilisateurs qui appartiennent aux groupes que vous spécifiez sont synchronisés avec le domaine managé. Les groupes imbriqués ne sont pas synchronisés ; seuls les groupes explicitement sélectionnés le sont.

Vous pouvez modifier l’étendue de synchronisation avant ou après la création du domaine managé. L’étendue de la synchronisation est définie par un principal de service avec l’identificateur d’application 2565bd9d-da50-47d4-8b85-4c97f669dc36. Pour éviter toute perte d’étendue, ne supprimez pas ou ne modifiez pas le principal du service. Si ce dernier supprimé par accident, l’étendue de synchronisation ne peut pas être récupérée.

Gardez à l’esprit les avertissements suivants si vous modifiez l’étendue de synchronisation :

  • Une synchronisation complète se produit.
  • Les objets qui ne sont plus requis dans le domaine managé sont supprimés. De nouveaux objets sont créés dans le domaine managé.

Pour découvrir plus d’informations sur le processus de synchronisation, consultez Comprendre la synchronisation dans Microsoft Entra Domain Services.

Script PowerShell pour la synchronisation délimitée

Pour configurer la synchronisation délimitée à l’aide de PowerShell, commencez par enregistrer le script suivant dans un fichier nommé Select-GroupsToSync.ps1.

Ce script configure Domain Services pour synchroniser les groupes sélectionnés à partir de Microsoft Entra ID. Tous les comptes d’utilisateurs qui font partie des groupes spécifiés sont synchronisés avec le domaine managé.

Ce script est utilisé dans les étapes supplémentaires de cet article.

param (
    [Parameter(Position = 0)]
    [String[]]$groupsToAdd
)

Connect-MgGraph -Scopes "Directory.Read.All","AppRoleAssignment.ReadWrite.All"
$sp = Get-MgServicePrincipal -Filter "AppId eq '2565bd9d-da50-47d4-8b85-4c97f669dc36'"
$role = $sp.AppRoles | where-object -FilterScript {$_.DisplayName -eq "User"}

Write-Output "`n****************************************************************************"

Write-Output "Total group-assignments need to be added: $($groupsToAdd.Count)"
$newGroupIds = New-Object 'System.Collections.Generic.HashSet[string]'
foreach ($groupName in $groupsToAdd)
{
    try
    {
        $group = Get-MgGroup -Filter "DisplayName eq '$groupName'"
        $newGroupIds.Add($group.Id)

        Write-Output "Group-Name: $groupName, Id: $($group.Id)"
    }
    catch
    {
        Write-Error "Failed to find group: $groupName. Exception: $($_.Exception)."
    }
}

Write-Output "****************************************************************************`n"
Write-Output "`n****************************************************************************"

$currentAssignments = Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $sp.Id -All:$true
Write-Output "Total current group-assignments: $($currentAssignments.Count), SP-ObjectId: $($sp.Id)"

$currAssignedObjectIds = New-Object 'System.Collections.Generic.HashSet[string]'
foreach ($assignment in $currentAssignments)
{
    Write-Output "Assignment-ObjectId: $($assignment.PrincipalId)"

    if ($newGroupIds.Contains($assignment.PrincipalId) -eq $true)
    {
        Write-Output "This assignment is not needed anymore. Removing it! Assignment-ObjectId: $($assignment.PrincipalId)"
        Remove-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $sp.Id -AppRoleAssignmentId $assignment.Id
    }
    else
    {
        $currAssignedObjectIds.Add($assignment.PrincipalId)
    }
}

Write-Output "****************************************************************************`n"
Write-Output "`n****************************************************************************"

foreach ($id in $newGroupIds)
{
    try
    {
        if ($currAssignedObjectIds.Contains($id) -eq $false)
        {
            Write-Output "Adding new group-assignment. Role-Id: $($role.Id), Group-Object-Id: $id, ResourceId: $($sp.Id)"
            $appRoleAssignment = @{
                "principalId"= $group.Id
                "resourceId"= $sp.Id
                "appRoleId"= $role.Id
            }
            New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $sp.Id -BodyParameter $appRoleAssignment 
        }
        else
        {
            Write-Output "Group-ObjectId: $id is already assigned."
        }
    }
    catch
    {
        Write-Error "Exception occurred assigning Object-ID: $id. Exception: $($_.Exception)."
    }
}

Write-Output "****************************************************************************`n"

Activer synchronisation délimitée

Pour activer la synchronisation délimitée basée sur les groupes pour un domaine managé, procédez comme suit :

  1. Définissez d’abord "filteredSync" = "Enabled" sur la ressource Domain Services, puis mettez à jour le domaine managé. Lorsque vous y êtes invité, spécifiez les informations d’identification permettant à un administrateur général de se connecter à votre locataire Microsoft Entra à l’aide de l’applet de commande Connect-MgGraph :

    # Connect to your Entra ID tenant
    Connect-MgGraph -Scopes "Application.ReadWrite.All","Group.ReadWrite.All"
    
    # Retrieve the Microsoft Entra DS resource.
    $DomainServicesResource = Get-AzResource -ResourceType "Microsoft.AAD/DomainServices"
    
    # Enable group-based scoped synchronization.
    $enableScopedSync = @{"filteredSync" = "Enabled"}
    
    # Update the Microsoft Entra DS resource
    Set-AzResource -Id $DomainServicesResource.ResourceId -Properties $enableScopedSync
    
  2. Spécifiez à présent la liste des groupes dont les utilisateurs doivent être synchronisés avec le domaine managé.

    Exécutez le script Select-GroupsToSync.ps1 et spécifiez la liste des groupes à synchroniser. Dans l’exemple suivant, les groupes à synchroniser sont Select-GroupsToSync.ps1 et GroupName2.

    Avertissement

    Vous devez inclure le groupe AAD DC Administrators dans la liste des groupes configurés pour la synchronisation délimitée. Si vous n’incluez pas ce groupe, le domaine managé est inutilisable.

    .\Select-GroupsToSync.ps1 -groupsToAdd @("AAD DC Administrators", "GroupName1", "GroupName2")
    

La changement de l’étendue de la synchronisation conduit le domaine managé à resynchroniser toutes les données. Les objets qui ne sont plus nécessaires dans le domaine managé sont supprimés, et la resynchronisation peut prendre du temps.

Modifier la synchronisation délimitée

Pour modifier la liste des groupes dont les utilisateurs doivent être synchronisés sur le domaine managé, exécutez le script Select-GroupsToSync.ps1 et spécifiez la nouvelle liste de groupes à synchroniser.

Dans l’exemple suivant, les groupes à synchroniser n’incluent plus GroupName2, mais incluent maintenant GroupName3.

Avertissement

Vous devez inclure le groupe AAD DC Administrators dans la liste des groupes configurés pour la synchronisation délimitée. Si vous n’incluez pas ce groupe, le domaine managé est inutilisable.

Lorsque vous y êtes invité, spécifiez les informations d’identification permettant à un administrateur général de se connecter à votre locataire Microsoft Entra à l’aide de l’applet de commande Connect-MgGraph :

.\Select-GroupsToSync.ps1 -groupsToAdd @("AAD DC Administrators", "GroupName1", "GroupName3")

La changement de l’étendue de la synchronisation conduit le domaine managé à resynchroniser toutes les données. Les objets qui ne sont plus nécessaires dans le domaine managé sont supprimés, et la resynchronisation peut prendre du temps.

Désactiver la synchronisation délimitée

Pour désactiver la synchronisation étendue basée sur les groupes pour un domaine managé, définissez « filteredSync » = « Disabled » sur la ressource Domain Services, puis mettez à jour le domaine managé. Une fois terminé, tous les utilisateurs et groupes sont configurés pour se synchroniser à partir de Microsoft Entra ID.

Lorsque vous y êtes invité, spécifiez les informations d’identification permettant à un administrateur général de se connecter à votre locataire Microsoft Entra à l’aide de l’applet de commande Connect-MgGraph :

# Connect to your Entra ID tenant
Connect-MgGraph -Scopes "Application.ReadWrite.All","Group.ReadWrite.All"

# Retrieve the Microsoft Entra DS resource.
$DomainServicesResource = Get-AzResource -ResourceType "Microsoft.AAD/DomainServices"

# Disable group-based scoped synchronization.
$disableScopedSync = @{"filteredSync" = "Disabled"}

# Update the Microsoft Entra DS resource
Set-AzResource -Id $DomainServicesResource.ResourceId -Properties $disableScopedSync

La changement de l’étendue de la synchronisation conduit le domaine managé à resynchroniser toutes les données. Les objets qui ne sont plus nécessaires dans le domaine managé sont supprimés, et la resynchronisation peut prendre du temps.

Étapes suivantes

Pour découvrir plus d’informations sur le processus de synchronisation, consultez Comprendre la synchronisation dans Microsoft Entra Domain Services.