Azure AD Connect : Serveur de préproduction et reprise d’activité après sinistreAzure AD Connect: Staging server and disaster recovery

Avec un serveur en mode intermédiaire, vous pouvez apporter des modifications à la configuration et visualiser les modifications avant de rendre le serveur actif.With a server in staging mode, you can make changes to the configuration and preview the changes before you make the server active. Il permet également d’exécuter une importation et la synchronisation complètes afin de vérifier que toutes les modifications sont attendues avant de les appliquer dans un environnement de production.It also allows you to run full import and full synchronization to verify that all changes are expected before you make these changes into your production environment.

Mode intermédiaireStaging mode

Le mode intermédiaire peut être utilisé dans le cadre de plusieurs scénarios, notamment :Staging mode can be used for several scenarios, including:

  • Haute disponibilité :High availability.
  • Tester et déployer de nouvelles modifications de configuration.Test and deploy new configuration changes.
  • Introduire un nouveau serveur et retirer l’ancien.Introduce a new server and decommission the old.

Lors de l’installation, vous pouvez sélectionner le serveur en mode intermédiaire.During installation, you can select the server to be in staging mode. Cette action rend le serveur actif pour l’importation et la synchronisation, mais n’exécute aucune exportation.This action makes the server active for import and synchronization, but it does not run any exports. Un serveur en mode intermédiaire n’exécute pas la synchronisation de mot de passe et l’écriture différée de mot de passe même si vous avez sélectionné ces fonctions au cours de l’installation.A server in staging mode is not running password sync or password writeback, even if you selected these features during installation. Lorsque vous désactivez le mode intermédiaire, le serveur lance l’exportation et active la synchronisation de mot de passe et l’écriture différée de mot de passe.When you disable staging mode, the server starts exporting, enables password sync, and enables password writeback.

Notes

Supposons que vous avez activé la fonctionnalité Synchronisation de hachage de mot de passe dans Azure AD Connect.Suppose you have an Azure AD Connect with Password Hash Synchronization feature enabled. Lorsque vous activez le mode de préproduction, le serveur interrompt la synchroniser des modifications du mot de passe à partir de l'instance AD sur site.When you enable staging mode, the server stops synchronizing password changes from on-premises AD. Lorsque vous désactivez le mode de préproduction, le serveur reprend la synchronisation des modifications du mot de passe à partir du point où il s'est arrêté.When you disable staging mode, the server resumes synchronizing password changes from where it last left off. Si le serveur reste en mode de préproduction pendant une période prolongée, il risque de mettre un certain temps pour synchroniser toutes les modifications de mot de passe survenues dans l'intervalle.If the server is left in staging mode for an extended period of time, it can take a while for the server to synchronize all password changes that had occurred during the time period.

Vous pouvez toujours forcer une exportation en utilisant le gestionnaire de services de synchronisation.You can still force an export by using the synchronization service manager.

Un serveur en mode intermédiaire continue de recevoir des modifications d’Active Directory et d’Azure AD et peut très rapidement reprendre les responsabilités d’un autre serveur en cas de défaillance.A server in staging mode continues to receive changes from Active Directory and Azure AD and can quickly take over the responsibilities of another server in the event of a failure. Si vous apportez des modifications de configuration à votre serveur principal, la responsabilité d’apporter les mêmes modifications au serveur en mode intermédiaire vous incombe.If you make configuration changes to your primary server, it is your responsibility to make the same changes to the server in staging mode.

Pour ceux qui connaissant les technologies de synchronisation plus anciennes, le mode intermédiaire est différent, dans la mesure où le serveur a sa propre base de données SQL.For those of you with knowledge of older sync technologies, the staging mode is different since the server has its own SQL database. Cette architecture permet au serveur en mode intermédiaire d’être situé dans un autre centre de données.This architecture allows the staging mode server to be located in a different datacenter.

Vérifiez la configuration d’un serveurVerify the configuration of a server

Pour appliquer cette méthode, procédez comme suit :To apply this method, follow these steps:

  1. PréparationPrepare
  2. ConfigurationConfiguration
  3. Importer et synchroniserImport and Synchronize
  4. VérifierVerify
  5. Changer de serveur actifSwitch active server

PréparationPrepare

  1. Installez Azure AD Connect, sélectionnez mode intermédiaire, puis désélectionnez Démarrer la synchronisation sur la dernière page de l’Assistant Installation.Install Azure AD Connect, select staging mode, and unselect start synchronization on the last page in the installation wizard. Ce mode vous permet d’exécuter manuellement le moteur de synchronisation.This mode allows you to run the sync engine manually. ReadyToConfigureReadyToConfigure
  2. Déconnectez-vous puis connectez-vous de nouveau et, dans le menu Démarrer, sélectionnez Service de synchronisation.Sign off/sign in and from the start menu select Synchronization Service.

ConfigurationConfiguration

Si vous avez apporté des modifications personnalisées au serveur principal et que vous souhaitez comparer la configuration avec le serveur intermédiaire, utilisez la Documentation de configuration d’Azure AD Connect.If you have made custom changes to the primary server and want to compare the configuration with the staging server, then use Azure AD Connect configuration documenter.

Importer et synchroniserImport and Synchronize

  1. Sélectionnez Connecteurs, puis sélectionnez le premier connecteur de type Services de domaine Active Directory.Select Connectors, and select the first Connector with the type Active Directory Domain Services. Cliquez sur Exécuter, sélectionnez Importation intégrale, puis OK.Click Run, select Full import, and OK. Répétez cette procédure pour tous les connecteurs de ce type.Do these steps for all Connectors of this type.
  2. Sélectionnez le connecteur de type Azure Active Directory (Microsoft) .Select the Connector with type Azure Active Directory (Microsoft). Cliquez sur Exécuter, sélectionnez Importation intégrale, puis OK.Click Run, select Full import, and OK.
  3. Vérifiez que l’onglet Connecteurs est toujours sélectionné.Make sure the tab Connectors is still selected. Pour chaque connecteur de type Services de domaine Active Directory, cliquez sur Exécuter, sélectionnez Synchronisation Delta, puis OK.For each Connector with type Active Directory Domain Services, click Run, select Delta Synchronization, and OK.
  4. Sélectionnez le connecteur de type Azure Active Directory (Microsoft) .Select the Connector with type Azure Active Directory (Microsoft). Cliquez sur Exécuter, sélectionnez Synchronisation Delta, puis OK.Click Run, select Delta Synchronization, and OK.

Vous avez maintenant effectué une exportation intermédiaire vers Azure AD et Active Directory local (si vous utilisez un déploiement Exchange hybride).You have now staged export changes to Azure AD and on-premises AD (if you are using Exchange hybrid deployment). Les prochaines étapes vous permettront d’inspecter les changements avant de commencer effectivement l’exportation vers les répertoires.The next steps allow you to inspect what is about to change before you actually start the export to the directories.

VérifierVerify

  1. Démarrez une invite de commande et accédez à %ProgramFiles%\Microsoft Azure AD Sync\binStart a cmd prompt and go to %ProgramFiles%\Microsoft Azure AD Sync\bin
  2. Exécutez : csexport "Name of Connector" %temp%\export.xml /f:x le nom du connecteur se trouve dans le service de synchronisation.Run: csexport "Name of Connector" %temp%\export.xml /f:x The name of the Connector can be found in Synchronization Service. Le nom est similaire à « contoso.com – AAD » pour Azure AD.It has a name similar to "contoso.com – AAD" for Azure AD.
  3. Exécutez : CSExportAnalyzer %temp%\export.xml > %temp%\export.csv Vous disposez d’un fichier dans %temp% nommé export.csv qui peut être examiné dans Microsoft Excel.Run: CSExportAnalyzer %temp%\export.xml > %temp%\export.csv You have a file in %temp% named export.csv that can be examined in Microsoft Excel. Ce fichier contient toutes les modifications sur le point d’être exportées.This file contains all changes that are about to be exported.
  4. Apportez les modifications nécessaires aux données ou à la configuration et réexécutez ces opérations (importer, synchroniser et vérifier) jusqu’à ce que les modifications sur le point d’être exportées soient attendues.Make necessary changes to the data or configuration and run these steps again (Import and Synchronize and Verify) until the changes that are about to be exported are expected.

Comprendre le fichier export.csv La majeure partie du fichier est explicite.Understanding the export.csv file Most of the file is self-explanatory. Certaines abréviations permettant de comprendre le contenu :Some abbreviations to understand the content:

  • OMODT – Type de modification d’objet.OMODT – Object Modification Type. Indique si l’opération au niveau de l’objet est un ajout, une mise à jour ou une suppression.Indicates if the operation at an object level is an Add, Update, or Delete.
  • AMODT – Type de modification d’attribut.AMODT – Attribute Modification Type. Indique si l’opération au niveau de l’attribut est un ajout, une mise à jour ou une suppression.Indicates if the operation at an attribute level is an Add, Update, or delete.

Récupérer les identificateurs courants Le fichier export.csv contient toutes les modifications qui sont sur le point d’être exportées.Retrieve common identifiers The export.csv file contains all changes that are about to be exported. Chaque ligne correspond à une modification d’un objet dans l’espace connecteur, objet qui est identifié par l’attribut de nom unique (DN).Each row corresponds to a change for an object in the connector space and the object is identified by the DN attribute. L’attribut DN est un identificateur unique assigné à un objet dans l’espace connecteur.The DN attribute is a unique identifier assigned to an object in the connector space. Quand le fichier export.csv à analyser contient de nombreuses lignes/modifications, il peut s’avérer difficile de déterminer quels objets sont concernés par les modifications à l’aide uniquement de l’attribut DN.When you have many rows/changes in the export.csv to analyze, it may be difficult for you to figure out which objects the changes are for based on the DN attribute alone. Pour simplifier le processus d’analyse des modifications, utilisez le script PowerShell csanalyzer.ps1.To simplify the process of analyzing the changes, use the csanalyzer.ps1 PowerShell script. Le script récupère les identificateurs courants (par exemple, displayName, userPrincipalName) des objets.The script retrieves common identifiers (for example, displayName, userPrincipalName) of the objects. Pour utiliser le script :To use the script:

  1. Copiez le script PowerShell à partir de la section CSAnalyzer dans un fichier nommé csanalyzer.ps1.Copy the PowerShell script from the section CSAnalyzer to a file named csanalyzer.ps1.
  2. Ouvrez une fenêtre PowerShell et accédez au dossier où vous avez créé le script PowerShell.Open a PowerShell window and browse to the folder where you created the PowerShell script.
  3. Exécutez : .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.Run: .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.
  4. Vous disposez maintenant d’un fichier nommé processedusers1.csv qui peut être examiné dans Microsoft Excel.You now have a file named processedusers1.csv that can be examined in Microsoft Excel. Notez que le fichier fournit un mappage de l’attribut DN aux identificateurs courants (par exemple, displayName et userPrincipalName).Note that the file provides a mapping from the DN attribute to common identifiers (for example, displayName and userPrincipalName). Il n’inclut pas les modifications d’attribut réelles qui sont sur le point d’être exportées.It currently does not include the actual attribute changes that are about to be exported.

Changer de serveur actifSwitch active server

  1. Sur le serveur actif, éteignez le serveur (DirSync/FIM/Azure AD Sync) pour qu’il ne soit pas exporté vers Azure AD ou définissez-le en mode intermédiaire (Azure AD Connect).On the currently active server, either turn off the server (DirSync/FIM/Azure AD Sync) so it is not exporting to Azure AD or set it in staging mode (Azure AD Connect).
  2. Exécutez l’Assistant Installation sur le serveur en mode intermédiaire, puis désactivez le mode intermédiaire.Run the installation wizard on the server in staging mode and disable staging mode. ReadyToConfigureReadyToConfigure

Récupération d'urgenceDisaster recovery

Une partie de la conception de l’implémentation consiste à planifier les procédures à suivre si un sinistre occasionne la perte du serveur de synchronisation.Part of the implementation design is to plan for what to do in case there is a disaster where you lose the sync server. Il existe différents modèles et le choix de celui que vous devez utiliser dépend de plusieurs facteurs, notamment :There are different models to use and which one to use depends on several factors including:

  • Dans quelle mesure pouvez-vous tolérer de ne pas pouvoir apporter des modifications aux objets dans Azure AD pendant les temps d’indisponibilité ?What is your tolerance for not being able make changes to objects in Azure AD during the downtime?
  • Si vous utilisez la synchronisation de mot de passe, les utilisateurs acceptent-ils de devoir utiliser l’ancien mot de passe dans Azure AD dans le cas où il serait modifié en local ?If you use password synchronization, do the users accept that they have to use the old password in Azure AD in case they change it on-premises?
  • Avez-vous une dépendance par rapport aux opérations en temps réel, notamment l’écriture différée de mot de passe ?Do you have a dependency on real-time operations, such as password writeback?

Selon les réponses à ces questions et la stratégie de votre organisation, une des stratégies suivantes peut être mise en œuvre :Depending on the answers to these questions and your organization’s policy, one of the following strategies can be implemented:

  • Régénérer si nécessaire.Rebuild when needed.
  • Disposer d'un serveur de secours en attente, appelé mode intermédiaire.Have a spare standby server, known as staging mode.
  • Utiliser les machines virtuelles.Use virtual machines.

Si vous n’utilisez pas la base de données SQL Express intégrée, vous devez vous reporter à la section Haute disponibilité SQL .If you do not use the built-in SQL Express database, then you should also review the SQL High Availability section.

Régénérer lorsque nécessaireRebuild when needed

Une stratégie viable consiste à planifier une régénération du serveur si nécessaire.A viable strategy is to plan for a server rebuild when needed. Généralement, l’installation du moteur de synchronisation et l’exécution de l’importation et de la synchronisation initiales peuvent être effectuées en quelques heures.Usually, installing the sync engine and do the initial import and sync can be completed within a few hours. Si aucun serveur n’est libre, il est possible d’utiliser provisoirement un contrôleur de domaine pour héberger le moteur de synchronisation.If there isn’t a spare server available, it is possible to temporarily use a domain controller to host the sync engine.

Le serveur de moteur de synchronisation ne stocke aucun état relatif aux objets de sorte que la base de données peut être recréée à partir des données présentes dans Active Directory et Azure AD.The sync engine server does not store any state about the objects so the database can be rebuilt from the data in Active Directory and Azure AD. L’attribut sourceAnchor est utilisé pour associer les objets à partir du site et du cloud.The sourceAnchor attribute is used to join the objects from on-premises and the cloud. Si vous régénérez le serveur avec les objets existants en local et sur le cloud, le moteur de synchronisation les remet en correspondance de nouveau au cours de la réinstallation.If you rebuild the server with existing objects on-premises and the cloud, then the sync engine matches those objects together again on reinstallation. Vous devez documenter et enregistrer les modifications de configuration apportées au serveur, notamment aux règles de filtrage et de synchronisation.The things you need to document and save are the configuration changes made to the server, such as filtering and synchronization rules. Ces configurations personnalisées doivent être réappliquées avant de commencer la synchronisation.These custom configurations must be reapplied before you start synchronizing.

Disposer d’un serveur de secours en attente, connu sous le nom de mode intermédiaire.Have a spare standby server - staging mode

Si vous disposez d’un environnement plus complexe, il est recommandé d’avoir un ou plusieurs serveurs de secours.If you have a more complex environment, then having one or more standby servers is recommended. Lors de l’installation, vous pouvez activer un serveur en mode intermédiaire.During installation, you can enable a server to be in staging mode.

Pour en savoir plus, voir Mode intermédiaire.For more information, see staging mode.

Utiliser les machines virtuellesUse virtual machines

Une méthode courante et prise en charge consiste à exécuter le moteur de synchronisation sur une machine virtuelle.A common and supported method is to run the sync engine in a virtual machine. Si l’hôte rencontre un problème, l’image contenant le serveur de moteur de synchronisation peut être migrée vers un autre serveur.In case the host has an issue, the image with the sync engine server can be migrated to another server.

Haute disponibilité SQLSQL High Availability

Si vous n’utilisez pas SQL Server Express livré avec Azure AD Connect, la haute disponibilité pour SQL Server doit alors être prise en compte.If you are not using the SQL Server Express that comes with Azure AD Connect, then high availability for SQL Server should also be considered. Les solutions de haute disponibilité prises en charge incluent la mise en clusters SQL et AOA (Groupes de disponibilité AlwaysOn).The high availability solutions supported include SQL clustering and AOA (Always On Availability Groups). Les solutions non prises en charge incluent la mise en miroir.Unsupported solutions include mirroring.

La prise en charge de SQL AOA a été ajoutée à Azure AD Connect version 1.1.524.0.Support for SQL AOA was added to Azure AD Connect in version 1.1.524.0. Vous devez activer SQL AOA avant d’installer Azure AD Connect.You must enable SQL AOA before installing Azure AD Connect. Pendant l’installation, Azure AD Connect détecte si l’instance SQL spécifiée est activée ou non pour SQL AOA.During installation, Azure AD Connect detects whether the SQL instance provided is enabled for SQL AOA or not. Si SQL AOA est activé, Azure AD Connect détermine si SQL AOA est configuré pour utiliser une réplication synchrone ou asynchrone.If SQL AOA is enabled, Azure AD Connect further figures out if SQL AOA is configured to use synchronous replication or asynchronous replication. Lorsque vous configurez l’écouteur de groupe de disponibilité, il est recommandé de définir la propriété RegisterAllProvidersIP sur 0.When setting up the Availability Group Listener, it is recommended that you set the RegisterAllProvidersIP property to 0. En effet, Azure AD Connect utilise actuellement SQL Native Client pour se connecter à SQL, et SQL Native Client ne prend pas en charge l’utilisation de la propriété MultiSubNetFailover.This is because Azure AD Connect currently uses SQL Native Client to connect to SQL and SQL Native Client does not support the use of MultiSubNetFailover property.

Annexe CSAnalyzerAppendix CSAnalyzer

Consultez la section vérifier pour découvrir comment utiliser ce script.See the section verify on how to use this script.

Param(
    [Parameter(Mandatory=$true, HelpMessage="Must be a file generated using csexport 'Name of Connector' export.xml /f:x)")]
    [string]$xmltoimport="%temp%\exportedStage1a.xml",
    [Parameter(Mandatory=$false, HelpMessage="Maximum number of users per output file")][int]$batchsize=1000,
    [Parameter(Mandatory=$false, HelpMessage="Show console output")][bool]$showOutput=$false
)

#LINQ isn't loaded automatically, so force it
[Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") | Out-Null

[int]$count=1
[int]$outputfilecount=1
[array]$objOutputUsers=@()

#XML must be generated using "csexport "Name of Connector" export.xml /f:x"
write-host "Importing XML" -ForegroundColor Yellow

#XmlReader.Create won't properly resolve the file location,
#so expand and then resolve it
$resolvedXMLtoimport=Resolve-Path -Path ([Environment]::ExpandEnvironmentVariables($xmltoimport))

#use an XmlReader to deal with even large files
$result=$reader = [System.Xml.XmlReader]::Create($resolvedXMLtoimport) 
$result=$reader.ReadToDescendant('cs-object')
do 
{
    #create the object placeholder
    #adding them up here means we can enforce consistency
    $objOutputUser=New-Object psobject
    Add-Member -InputObject $objOutputUser -MemberType NoteProperty -Name ID -Value ""
    Add-Member -InputObject $objOutputUser -MemberType NoteProperty -Name Type -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name DN -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name operation -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name UPN -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name displayName -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name sourceAnchor -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name alias -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name primarySMTP -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name onPremisesSamAccountName -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name mail -Value ""

    $user = [System.Xml.Linq.XElement]::ReadFrom($reader)
    if ($showOutput) {Write-Host Found an exported object... -ForegroundColor Green}

    #object id
    $outID=$user.Attribute('id').Value
    if ($showOutput) {Write-Host ID: $outID}
    $objOutputUser.ID=$outID

    #object type
    $outType=$user.Attribute('object-type').Value
    if ($showOutput) {Write-Host Type: $outType}
    $objOutputUser.Type=$outType

    #dn
    $outDN= $user.Element('unapplied-export').Element('delta').Attribute('dn').Value
    if ($showOutput) {Write-Host DN: $outDN}
    $objOutputUser.DN=$outDN

    #operation
    $outOperation= $user.Element('unapplied-export').Element('delta').Attribute('operation').Value
    if ($showOutput) {Write-Host Operation: $outOperation}
    $objOutputUser.operation=$outOperation

    #now that we have the basics, go get the details

    foreach ($attr in $user.Element('unapplied-export-hologram').Element('entry').Elements("attr"))
    {
        $attrvalue=$attr.Attribute('name').Value
        $internalvalue= $attr.Element('value').Value

        switch ($attrvalue)
        {
            "userPrincipalName"
            {
                if ($showOutput) {Write-Host UPN: $internalvalue}
                $objOutputUser.UPN=$internalvalue
            }
            "displayName"
            {
                if ($showOutput) {Write-Host displayName: $internalvalue}
                $objOutputUser.displayName=$internalvalue
            }
            "sourceAnchor"
            {
                if ($showOutput) {Write-Host sourceAnchor: $internalvalue}
                $objOutputUser.sourceAnchor=$internalvalue
            }
            "alias"
            {
                if ($showOutput) {Write-Host alias: $internalvalue}
                $objOutputUser.alias=$internalvalue
            }
            "proxyAddresses"
            {
                if ($showOutput) {Write-Host primarySMTP: ($internalvalue -replace "SMTP:","")}
                $objOutputUser.primarySMTP=$internalvalue -replace "SMTP:",""
            }
        }
    }

    $objOutputUsers += $objOutputUser

    Write-Progress -activity "Processing ${xmltoimport} in batches of ${batchsize}" -status "Batch ${outputfilecount}: " -percentComplete (($objOutputUsers.Count / $batchsize) * 100)

    #every so often, dump the processed users in case we blow up somewhere
    if ($count % $batchsize -eq 0)
    {
        Write-Host Hit the maximum users processed without completion... -ForegroundColor Yellow

        #export the collection of users as a CSV
        Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
        $objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation

        #increment the output file counter
        $outputfilecount+=1

        #reset the collection and the user counter
        $objOutputUsers = $null
        $count=0
    }

    $count+=1

    #need to bail out of the loop if no more users to process
    if ($reader.NodeType -eq [System.Xml.XmlNodeType]::EndElement)
    {
        break
    }

} while ($reader.Read)

#need to write out any users that didn't get picked up in a batch of 1000
#export the collection of users as CSV
Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
$objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation

Étapes suivantesNext steps

Rubriques de présentationOverview topics