Servizio di sincronizzazione Azure AD Connect: Attività operative e considerazioniAzure AD Connect sync: Operational tasks and consideration

L'obiettivo di questo argomento è descrivere le attività operative per il servizio di sincronizzazione Azure AD Connect.The objective of this topic is to describe operational tasks for Azure AD Connect sync.

Modalità di gestione temporaneaStaging mode

La modalità di gestione temporanea può essere usata per diversi scenari, ad esempio:Staging mode can be used for several scenarios, including:

  • Disponibilità elevata.High availability.
  • Testare e distribuire le nuove modifiche della configurazione.Test and deploy new configuration changes.
  • Introdurre un nuovo server e rimuovere quello vecchio.Introduce a new server and decommission the old.

Con un server in modalità di gestione temporanea è possibile apportare modifiche alla configurazione e visualizzarle in anteprima prima di attivare il server.With a server in staging mode, you can make changes to the configuration and preview the changes before you make the server active. È anche possibile eseguire operazioni di importazione e sincronizzazione complete per verificare che tutte le modifiche siano previste prima di introdurle nell'ambiente di produzione.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.

Durante l'installazione è possibile selezionare la modalità di gestione temporaneaper il server.During installation, you can select the server to be in staging mode. In questo modo il server sarà attivo per le operazioni di importazione e sincronizzazione, ma non eseguirà esportazioni.This action makes the server active for import and synchronization, but it does not run any exports. Un server in modalità di gestione temporanea non eseguirà la sincronizzazione o il writeback delle password, anche se queste funzionalità sono state selezionate durante l'installazione.A server in staging mode is not running password sync or password writeback, even if you selected these features during installation. Quando si disabilita la modalità di gestione temporanea, il server avvia l'esportazione e abilita la sincronizzazione e il writeback delle password.When you disable staging mode, the server starts exporting, enables password sync, and enables password writeback.

Nota

Si supponga di avere Azure AD Connect con la funzionalità di sincronizzazione dell'hash delle password abilitata.Suppose you have an Azure AD Connect with Password Hash Synchronization feature enabled. Quando si abilita la modalità di gestione temporanea, il server arresta la sincronizzazione delle modifiche alla password da AD locale.When you enable staging mode, the server stops synchronizing password changes from on-premises AD. Quando si disabilita la modalità di gestione temporanea, il server riepiloga la sincronizzazione delle modifiche alla password dal punto in cui è stata interrotta.When you disable staging mode, the server resumes synchronizing password changes from where it last left off. Se il server viene lasciato in modalità di gestione temporanea per un lungo periodo di tempo, la sincronizzazione da parte del server di tutte le modifiche alle password, verificatesi durante un determinato periodo, potrebbe richiedere un po' di tempo.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.

È comunque possibile forzare un’esportazione utilizzando Synchronization Service Manager.You can still force an export by using the synchronization service manager.

Un server in modalità di gestione temporanea continua a ricevere modifiche da Active Directory e Azure AD.A server in staging mode continues to receive changes from Active Directory and Azure AD. Ha sempre una copia delle modifiche più recenti e può così assumere velocemente le funzioni di un altro server.It always has a copy of the latest changes and can very fast take over the responsibilities of another server. Se si apportano modifiche alla configurazione del server primario, è necessario apportare le stesse modifiche al server in modalità di gestione temporanea.If you make configuration changes to your primary server, it is your responsibility to make the same changes to the server in staging mode.

Coloro che hanno una conoscenza delle tecnologie di sincronizzazione precedenti tengano presente che la modalità di gestione temporanea è diversa, perché il server ha il proprio database SQL.For those of you with knowledge of older sync technologies, the staging mode is different since the server has its own SQL database. L'architettura consente al server in modalità di gestione temporanea di trovarsi in un altro data center.This architecture allows the staging mode server to be located in a different datacenter.

Verificare la configurazione di un serverVerify the configuration of a server

Per applicare questo metodo, seguire questa procedura:To apply this method, follow these steps:

  1. PrepararePrepare
  2. ConfigurazioneConfiguration
  3. Importare e sincronizzareImport and Synchronize
  4. VerificareVerify
  5. Cambiare il server attivoSwitch active server

PreparazionePrepare

  1. Installare Azure AD Connect, selezionare Modalità di gestione temporanea e deselezionare Avvia sincronizzazione nell'ultima pagina dell'installazione guidata.Install Azure AD Connect, select staging mode, and unselect start synchronization on the last page in the installation wizard. In questo modo è possibile eseguire manualmente il motore di sincronizzazione.This mode allows you to run the sync engine manually. ReadyToConfigureReadyToConfigure
  2. Disconnettersi e accedere, quindi dal menu Start selezionare Synchronization Service(Servizio di sincronizzazione).Sign off/sign in and from the start menu select Synchronization Service.

ConfigurazioneConfiguration

Se si sono apportate modifiche personalizzate al server primario e si desidera confrontare la configurazione con server di gestione temporanea, usare l'analizzatore di configurazione di 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.

Importare e sincronizzareImport and Synchronize

  1. Selezionare Connettori e quindi selezionare il primo connettore con il tipo Servizi di dominio Active Directory.Select Connectors, and select the first Connector with the type Active Directory Domain Services. Fare clic su Run (Esegui), selezionare Full import (Importazione completa) e fare clic su OK.Click Run, select Full import, and OK. Eseguire questi passaggi per tutti i connettori di questo tipo.Do these steps for all Connectors of this type.
  2. Selezionare il connettore con il tipo Azure Active Directory (Microsoft).Select the Connector with type Azure Active Directory (Microsoft). Fare clic su Run (Esegui), selezionare Full import (Importazione completa) e fare clic su OK.Click Run, select Full import, and OK.
  3. Assicurarsi che la scheda Connectors (Connettori) sia ancora selezionata.Make sure the tab Connectors is still selected. Per ogni connettore con il tipo Active Directory Domain Services fare clic su Run (Esegui), selezionare Delta Synchronization (Sincronizzazione delta) e fare clic su OK.For each Connector with type Active Directory Domain Services, click Run, select Delta Synchronization, and OK.
  4. Selezionare il connettore con il tipo Azure Active Directory (Microsoft).Select the Connector with type Azure Active Directory (Microsoft). Fare clic su Run (Esegui), selezionare Delta Synchronization (Sincronizzazione delta) e quindi fare clic su OK.Click Run, select Delta Synchronization, and OK.

È stata eseguita l'esportazione delle modifiche in modalità di gestione temporanea in Azure AD e in AD locale (se si usa una distribuzione ibrida di Exchange).You have now staged export changes to Azure AD and on-premises AD (if you are using Exchange hybrid deployment). I passaggi successivi consentono di ispezionare quali sono gli elementi che stanno per essere modificati prima di avviare effettivamente l'esportazione nelle directory.The next steps allow you to inspect what is about to change before you actually start the export to the directories.

VerificareVerify

  1. Avviare un prompt dei comandi e passare a %ProgramFiles%\Microsoft Azure AD Sync\binStart a cmd prompt and go to %ProgramFiles%\Microsoft Azure AD Sync\bin
  2. Eseguire: csexport "Name of Connector" %temp%\export.xml /f:x Il nome del connettore si trova nel servizio di sincronizzazione.Run: csexport "Name of Connector" %temp%\export.xml /f:x The name of the Connector can be found in Synchronization Service. Il nome sarà simile a "contoso.com - AAD" per Azure AD.It has a name similar to "contoso.com – AAD" for Azure AD.
  3. Eseguire: CSExportAnalyzer %temp%\export.xml > %temp%\export.csv Si avrà un file denominato export.csv in %temp%, che può essere esaminato in 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. Questo file contiene tutte le modifiche in fase di esportazione.This file contains all changes that are about to be exported.
  4. Apportare le modifiche necessarie ai dati o alla configurazione ed eseguire di nuovo questi passaggi (importazione, sincronizzazione e verifica) finché le modifiche che verranno esportate non saranno quelle previste.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.

Informazioni sul file export.csv La maggior parte del file è facilmente comprensibile.Understanding the export.csv file Most of the file is self-explanatory. Ecco alcune abbreviazioni per comprendere il contenuto:Some abbreviations to understand the content:

  • OMODT: Object Modification Type.OMODT – Object Modification Type. Indica se l'operazione a livello di oggetto è un'aggiunta, un aggiornamento o un'eliminazione.Indicates if the operation at an object level is an Add, Update, or Delete.
  • AMODT: Attribute Modification Type.AMODT – Attribute Modification Type. Indica se l'operazione a livello di attributo è un'aggiunta, un aggiornamento o un'eliminazione.Indicates if the operation at an attribute level is an Add, Update, or delete.

Recuperare gli identificatori comuni Il file export.csv contiene tutte le modifiche che stanno per essere esportate.Retrieve common identifiers The export.csv file contains all changes that are about to be exported. Ogni riga corrisponde a una modifica per un oggetto nello spazio connettore e l'oggetto è identificato dall'attributo DN.Each row corresponds to a change for an object in the connector space and the object is identified by the DN attribute. L'attributo DN è un identificatore univoco assegnato a un oggetto nello spazio connettore.The DN attribute is a unique identifier assigned to an object in the connector space. Quando si dispone di molte righe/modifiche nel file export.csv da analizzare, potrebbe essere difficile individuare gli oggetti da modificare solo in base all'attributo 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. Per semplificare il processo di analisi delle modifiche, usare lo script di PowerShell csanalyzer.ps1.To simplify the process of analyzing the changes, use the csanalyzer.ps1 PowerShell script. Lo script recupera gli identificatori comuni (ad esempio displayName e userPrincipalName) degli oggetti.The script retrieves common identifiers (for example, displayName, userPrincipalName) of the objects. Per usare lo script:To use the script:

  1. Copiare lo script di PowerShell dalla sezione CSAnalyzer in un file denominato csanalyzer.ps1.Copy the PowerShell script from the section CSAnalyzer to a file named csanalyzer.ps1.
  2. Aprire una finestra di PowerShell e passare alla cartella in cui è stato creato lo script di PowerShell.Open a PowerShell window and browse to the folder where you created the PowerShell script.
  3. Eseguire: .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.Run: .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.
  4. A questo punto si avrà un file denominato processedusers1.csv, che può essere esaminato in Microsoft Excel.You now have a file named processedusers1.csv that can be examined in Microsoft Excel. Si noti che il file fornisce un mapping dall'attributo DN agli identificatori comuni (ad esempio displayName e userPrincipalName).Note that the file provides a mapping from the DN attribute to common identifiers (for example, displayName and userPrincipalName). Attualmente non include le modifiche effettive all'attributo che stanno per essere esportate.It currently does not include the actual attribute changes that are about to be exported.

Cambiare il server attivoSwitch active server

  1. Disattivare il server attualmente attivo (DirSync/FIM/Azure AD Sync), in modo che non esegua l'esportazione in Azure AD oppure impostarlo in modalità di gestione temporanea (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. Eseguire l'installazione guidata nel server in modalità di gestione temporanea e disabilitare questa modalità.Run the installation wizard on the server in staging mode and disable staging mode. ReadyToConfigureReadyToConfigure

Ripristino di emergenzaDisaster recovery

Nell'ambito della progettazione dell'implementazione vengono pianificate le operazioni da eseguire nel caso di un'emergenza che causa la perdita del server di sincronizzazione.Part of the implementation design is to plan for what to do in case there is a disaster where you lose the sync server. Ci sono diversi modelli da usare e quello scelto dipende da diversi fattori, ad esempio:There are different models to use and which one to use depends on several factors including:

  • Qual è la tolleranza per l'impossibilità di apportare modifiche agli oggetti in Azure AD durante il tempo di inattività?What is your tolerance for not being able make changes to objects in Azure AD during the downtime?
  • Se si usa la sincronizzazione delle password, gli utenti accettano di dover usare la vecchia password in Azure AD nel caso la modifichino in locale?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?
  • Si ha una dipendenza dalle operazioni in tempo reale, ad esempio il writeback delle password?Do you have a dependency on real-time operations, such as password writeback?

A seconda delle risposte a queste domande e dei criteri dell'organizzazione, è possibile implementare una delle strategie seguenti:Depending on the answers to these questions and your organization’s policy, one of the following strategies can be implemented:

  • Ricompilare quando necessario.Rebuild when needed.
  • Avere un server di standby di riserva, ovvero in modalità di gestione temporanea.Have a spare standby server, known as staging mode.
  • Usare macchine virtuali.Use virtual machines.

Se non si usa il database di SQL Express predefinito, è opportuno vedere anche la sezione Disponibilità elevata di SQL .If you do not use the built-in SQL Express database, then you should also review the SQL High Availability section.

Ricompilare quando necessarioRebuild when needed

Una strategia valida consiste nel pianificare la ricompilazione di un server in caso di necessità.A viable strategy is to plan for a server rebuild when needed. L'installazione del motore di sincronizzazione e l'esecuzione dell'importazione iniziale e della sincronizzazione possono essere generalmente completate in poche ore.Usually, installing the sync engine and do the initial import and sync can be completed within a few hours. Se non è disponibile un server di riserva, è possibile usare temporaneamente un controller di dominio per ospitare il motore di sincronizzazione.If there isn’t a spare server available, it is possible to temporarily use a domain controller to host the sync engine.

Il server del motore di sincronizzazione non archivia lo stato degli oggetti, quindi il database può essere ricompilato dai dati disponibili in Active Directory e 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'attributo sourceAnchor viene usato per aggiungere gli oggetti sia locali che dal cloud.The sourceAnchor attribute is used to join the objects from on-premises and the cloud. Se si ricompila il server con gli oggetti esistenti in locale e nel cloud, il motore di sincronizzazione abbinerà di nuovo questi oggetti al momento della reinstallazione.If you rebuild the server with existing objects on-premises and the cloud, then the sync engine matches those objects together again on reinstallation. Gli elementi che occorre documentare e salvare sono le modifiche della configurazione apportate al server, ad esempio le regole di filtro e sincronizzazione.The things you need to document and save are the configuration changes made to the server, such as filtering and synchronization rules. Queste configurazioni personalizzate dovranno essere riapplicate prima di avviare la sincronizzazione.These custom configurations must be reapplied before you start synchronizing.

Avere un server di standby di riserva, in modalità di gestione temporaneaHave a spare standby server - staging mode

Nel caso di un ambiente più complesso, è consigliabile avere uno o più server di standby.If you have a more complex environment, then having one or more standby servers is recommended. Durante l'installazione è possibile abilitare un server in modalità di gestione temporanea.During installation, you can enable a server to be in staging mode.

Per altre informazioni, vedere le modalità di gestione temporanea.For more information, see staging mode.

Usare macchine virtualiUse virtual machines

Un metodo comune e supportato consiste nell'eseguire il motore di sincronizzazione in una macchina virtuale.A common and supported method is to run the sync engine in a virtual machine. Nel caso di un problema dell'host, è possibile eseguire la migrazione dell'immagine del server del motore di sincronizzazione in un altro server.In case the host has an issue, the image with the sync engine server can be migrated to another server.

Disponibilità elevata di SQLSQL High Availability

Se non si usa SQL Server Express fornito con Azure AD Connect, è necessario prendere in considerazione anche la disponibilità elevata per SQL Server.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. Le soluzioni a disponibilità elevata supportate includono il clustering di SQL e AOA (Gruppi di disponibilità Always On),The high availability solutions supported include SQL clustering and AOA (Always On Availability Groups). mentre il mirroring è una delle soluzioni non supportate.Unsupported solutions include mirroring.

In Azure AD Connect versione 1.1.524.0 è stato aggiunto il supporto per SQL AOA.Support for SQL AOA was added to Azure AD Connect in version 1.1.524.0. È necessario abilitare SQL AOA prima di installare Azure AD Connect.You must enable SQL AOA before installing Azure AD Connect. Durante l'installazione, Azure AD Connect rileva se l'istanza SQL specificata è abilitata per SQL AOA oppure no.During installation, Azure AD Connect detects whether the SQL instance provided is enabled for SQL AOA or not. Se SQL AOA è abilitato, Azure AD Connect rileva quindi se SQL AOA è configurato per usare la replica sincrona o asincrona.If SQL AOA is enabled, Azure AD Connect further figures out if SQL AOA is configured to use synchronous replication or asynchronous replication. Quando si configura il listener del gruppo di disponibilità, è consigliabile impostare la proprietà RegisterAllProvidersIP su 0.When setting up the Availability Group Listener, it is recommended that you set the RegisterAllProvidersIP property to 0. Ciò perché Azure AD Connect usa il client nativo di SQL per connettersi a SQL e il client nativo SQL non supporta l'uso della proprietà 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.

Appendice CSAnalyzerAppendix CSAnalyzer

Vedere la sezione Verificare su come usare questo 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 as 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 as CSV
Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
$objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation

Passaggi successiviNext steps

Argomenti generaliOverview topics