Azure AD Connect Sync: 操作タスクおよび考慮事項Azure AD Connect sync: Operational tasks and consideration

このトピックでは、Azure AD Connect Sync の操作タスクについて説明します。The objective of this topic is to describe operational tasks for Azure AD Connect sync.

ステージング モードStaging mode

ステージング モードは、次のシナリオを含むいくつかのシナリオに使用できます。Staging mode can be used for several scenarios, including:

  • 高可用性:High availability.
  • 新しい構成の変更をテストおよびデプロイする。Test and deploy new configuration changes.
  • 新しいサーバーを導入し、古いサーバーの使用を中止する。Introduce a new server and decommission the old.

ステージング モードのサーバーでは、構成を変更した後、そのサーバーをアクティブにする前に変更内容をプレビューできます。With a server in staging mode, you can make changes to the configuration and preview the changes before you make the server active. また、フル インポートおよび完全同期を実行して、変更を運用環境に加える前に、すべての変更が予定どおりに加えられていることを確認できます。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.

インストール時、サーバーを ステージング モードに設定することを選択できます。During installation, you can select the server to be in staging mode. この操作により、サーバーでインポートと同期が有効になりますが、エクスポートは実行されません。This action makes the server active for import and synchronization, but it does not run any exports. ステージング モードのサーバーでは、インストール時にパスワード同期やパスワード ライトバックを選択した場合でも、パスワード同期やパスワード ライトバックは実行されません。A server in staging mode is not running password sync or password writeback, even if you selected these features during installation. ステージング モードを無効にすると、サーバーはエクスポートを開始し、パスワード同期とパスワード ライトバックが有効になります。When you disable staging mode, the server starts exporting, enables password sync, and enables password writeback.

注意

たとえば、Azure AD Connect でパスワード ハッシュ同期機能が有効であるとします。Suppose you have an Azure AD Connect with Password Hash Synchronization feature enabled. ステージング モードを有効にすると、サーバーはオンプレミス AD からのパスワード変更の同期を停止します。When you enable staging mode, the server stops synchronizing password changes from on-premises AD. ステージング モードを無効にすると、サーバーは停止されたところからパスワード変更の同期を再開します。When you disable staging mode, the server resumes synchronizing password changes from where it last left off. サーバーが一定時間ステージング モードになると、サーバーはその間に発生していたすべてのパスワードの変更を同期するため、時間がかかることがあります。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.

同期サービス マネージャーを使用して、引き続き強制的にエクスポートすることもできます。You can still force an export by using the synchronization service manager.

ステージング モードのサーバーは、Active Directory と Azure AD から変更を受信し続けます。A server in staging mode continues to receive changes from Active Directory and Azure AD. サーバーには常に最新の変更のコピーが保持され、別のサーバーの役割を迅速に引き継ぐことができます。It always has a copy of the latest changes and can very fast take over the responsibilities of another server. プライマリ サーバーの構成を変更する場合、ステージング モードのサーバーに同じ変更を適用するのは管理者の責任です。If you make configuration changes to your primary server, it is your responsibility to make the same changes to the server in staging mode.

従来の同期テクノロジの知識を持つ管理者にとっては、サーバーが独自の SQL Database を持つ点で、ステージング モードは異なるテクノロジに思えることでしょう。For those of you with knowledge of older sync technologies, the staging mode is different since the server has its own SQL database. このアーキテクチャにより、ステージング モードのサーバーを別のデータ センターに配置できます。This architecture allows the staging mode server to be located in a different datacenter.

サーバーの構成の確認Verify the configuration of a server

この方法を適用するには、次の手順に従います。To apply this method, follow these steps:

  1. 準備Prepare
  2. 構成Configuration
  3. インポートおよび同期Import and Synchronize
  4. 確認Verify
  5. アクティブなサーバーの切り替えSwitch active server

準備Prepare

  1. Azure AD Connect をインストールし、[ステージング モード] を選択します。インストール ウィザードの最後のページで、[同期の開始] を選択解除します。Install Azure AD Connect, select staging mode, and unselect start synchronization on the last page in the installation wizard. このモードにより、同期エンジンを手動で実行することができます。This mode allows you to run the sync engine manually. ReadyToConfigureReadyToConfigure
  2. いったんサインオフし、サインインし直してから、[スタート] メニューの [Synchronization Service (同期サービス)]を選択します。Sign off/sign in and from the start menu select Synchronization Service.

構成Configuration

プライマリ サーバーにカスタム変更を行い、構成をステージング サーバーと比較する場合は、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.

インポートおよび同期Import and Synchronize

  1. [コネクタ] を選択します。種類が "Active Directory Domain Services" の 1 つ目のコネクタを選択します。Select Connectors, and select the first Connector with the type Active Directory Domain Services. [Run (実行)][Full import (フル インポート)][OK] の順にクリックします。Click Run, select Full import, and OK. この種類のすべてのコネクタに対して、これらの手順を繰り返します。Do these steps for all Connectors of this type.
  2. 種類が " Azure Active Directory (Microsoft)" のコネクタを選択します。Select the Connector with type Azure Active Directory (Microsoft). [Run (実行)][Full import (フル インポート)][OK] の順にクリックします。Click Run, select Full import, and OK.
  3. [Connectors (コネクタ)] タブが選択されたままであることを確認します。Make sure the tab Connectors is still selected. 種類が "Active Directory Domain Services" の各コネクタに対し、[Run (実行)][Delta Synchronization (差分同期)][OK] の順にクリックします。For each Connector with type Active Directory Domain Services, click Run, select Delta Synchronization, and OK.
  4. 種類が " Azure Active Directory (Microsoft)" のコネクタを選択します。Select the Connector with type Azure Active Directory (Microsoft). [Run (実行)][Delta Synchronization (差分同期)][OK] の順にクリックします。Click Run, select Delta Synchronization, and OK.

これで、Azure AD とオンプレミスの AD (Exchange ハイブリッド デプロイを使用している) へのエクスポートの変更がステージングされました。You have now staged export changes to Azure AD and on-premises AD (if you are using Exchange hybrid deployment). 次の手順では、実際にディレクトリへのエクスポートを開始する前に、変更される内容を確認できます。The next steps allow you to inspect what is about to change before you actually start the export to the directories.

確認Verify

  1. コマンド プロンプトを起動し、%ProgramFiles%\Microsoft Azure AD Sync\bin に移動します。Start a cmd prompt and go to %ProgramFiles%\Microsoft Azure AD Sync\bin
  2. csexport "Name of Connector" %temp%\export.xml /f:x を実行します。同期サービスにコネクタの名前があることを確認できます。Run: csexport "Name of Connector" %temp%\export.xml /f:x The name of the Connector can be found in Synchronization Service. Azure AD の場合は、"contoso.com - AAD" のような名前が表示されます。It has a name similar to "contoso.com – AAD" for Azure AD.
  3. CSExportAnalyzer %temp%\export.xml > %temp%\export.csv を実行します。%temp% に export.csv という名前のファイルが生成されます。このファイルは、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. このファイルには、エクスポートの対象となるすべての変更が含まれています。This file contains all changes that are about to be exported.
  4. データまたは構成に必要な変更を加え、エクスポートの対象となる変更が希望どおりになるまで、(「インポートおよび同期」と「確認」の) 手順を実行します。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.

export.csv ファイルについて: このファイルのほとんどの部分は一目瞭然です。Understanding the export.csv file Most of the file is self-explanatory. 内容の理解に役立つ省略形のいくつかを次に示します。Some abbreviations to understand the content:

  • OMODT - オブジェクトの変更の種類。OMODT – Object Modification Type. オブジェクト レベルでの操作が追加、更新、または削除のいずれかであるかを示します。Indicates if the operation at an object level is an Add, Update, or Delete.
  • AMODT - 属性の変更の種類。AMODT – Attribute Modification Type. 属性レベルでの操作が追加、更新、または削除のいずれかであるかを示します。Indicates if the operation at an attribute level is an Add, Update, or delete.

共通識別子を取得する: export.csv ファイルには、エクスポートの対象となるすべての変更が含まれています。Retrieve common identifiers The export.csv file contains all changes that are about to be exported. 各行はコネクタ スペースのオブジェクトの変更に対応しており、オブジェクトは DN 属性で識別されます。Each row corresponds to a change for an object in the connector space and the object is identified by the DN attribute. DN 属性は、コネクタ スペースのオブジェクトに割り当てられている一意識別子です。The DN attribute is a unique identifier assigned to an object in the connector space. export.csv に分析対象となる行/変更が多数含まれていると、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. 変更の分析プロセスを簡素化するには、csanalyzer.ps1 PowerShell スクリプトを使用します。To simplify the process of analyzing the changes, use the csanalyzer.ps1 PowerShell script. このスクリプトは、オブジェクトの共通識別子 (displayName、userPrincipalName など) を取得します。The script retrieves common identifiers (for example, displayName, userPrincipalName) of the objects. このスクリプトを使用するには、次の手順に従います。To use the script:

  1. セクション CSAnalyzer から csanalyzer.ps1 という名前のファイルに PowerShell スクリプトをコピーします。Copy the PowerShell script from the section CSAnalyzer to a file named csanalyzer.ps1.
  2. PowerShell ウィンドウを開き、PowerShell スクリプトを作成したフォルダーを参照します。Open a PowerShell window and browse to the folder where you created the PowerShell script.
  3. .\csanalyzer.ps1 -xmltoimport %temp%\export.xml を実行します。Run: .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.
  4. processedusers1.csv という名前のファイルが生成されます。このファイルは、Microsoft Excel で開くことができます。You now have a file named processedusers1.csv that can be examined in Microsoft Excel. このファイルには、DN 属性から共通識別子 (displayName、userPrincipalName など) へのマッピングが示されています。Note that the file provides a mapping from the DN attribute to common identifiers (for example, displayName and userPrincipalName). 現時点では、エクスポートの対象となる実際の属性変更は含まれていません。It currently does not include the actual attribute changes that are about to be exported.

アクティブなサーバーの切り替えSwitch active server

  1. 現在アクティブなサーバーで、サーバー (DirSync、FIM、または Azure AD Sync) をオフにして Azure AD にエクスポートしないように設定するか、ステージング モード (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. ステージング モードのサーバーでインストール ウィザードを実行して、ステージング モードを無効にします。Run the installation wizard on the server in staging mode and disable staging mode. ReadyToConfigureReadyToConfigure

ディザスター リカバリーDisaster recovery

実装の設計には、同期サーバーを喪失する障害の発生時の対処方法を計画することが含まれます。Part of the implementation design is to plan for what to do in case there is a disaster where you lose the sync server. モデルにはさまざまなものがあり、どのモデルを使用するかは、次の要素を含むいくつかの要素に依存します。There are different models to use and which one to use depends on several factors including:

  • ダウンタイム中に Azure AD のオブジェクトを変更できないことに関してどれだけ許容できますか?What is your tolerance for not being able make changes to objects in Azure AD during the downtime?
  • パスワード同期を使用する場合、オンプレミスでパスワードを変更する場合に備えて Azure AD で古いパスワードを使用することが求められることについてユーザーの同意が得られますか?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?
  • パスワード ライトバックなどのリアルタイムの操作に依存していますか?Do you have a dependency on real-time operations, such as password writeback?

これらの質問の回答と組織のポリシーに応じて、次の戦略のいずれかを実装することができます。Depending on the answers to these questions and your organization’s policy, one of the following strategies can be implemented:

  • 必要に応じて再構築する。Rebuild when needed.
  • 予備のスタンバイ サーバーを用意する (" ステージング モード" と呼ばれます)。Have a spare standby server, known as staging mode.
  • 仮想マシンを使用する。Use virtual machines.

組み込みの SQL Express データベースを使用しない場合は、「 SQL 高可用性 」セクションも確認してください。If you do not use the built-in SQL Express database, then you should also review the SQL High Availability section.

必要に応じて再構築するRebuild when needed

実行可能な戦略は、必要に応じてサーバーの再構築を計画することです。A viable strategy is to plan for a server rebuild when needed. 通常、同期エンジンのインストールと最初のインポートおよび同期操作は、数時間以内に完了します。Usually, installing the sync engine and do the initial import and sync can be completed within a few hours. 予備のサーバーが利用できない場合は、一時的にドメイン コントローラーを使用して同期エンジンをホストすることができます。If there isn’t a spare server available, it is possible to temporarily use a domain controller to host the sync engine.

オブジェクトに関する状態は同期エンジン サーバーには保存されないため、Active Directory と 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. sourceAnchor 属性は、オンプレミスとクラウドからのオブジェクトを結合するために使用されます。The sourceAnchor attribute is used to join the objects from on-premises and the cloud. オンプレミスとクラウドの既存のオブジェクトを使ってサーバーを再構築する場合、同期エンジンは、再インストール時にこれらのオブジェクトをもう一度まとめて適合させます。If you rebuild the server with existing objects on-premises and the cloud, then the sync engine matches those objects together again on reinstallation. ドキュメント化して保存する必要があることは、フィルター規則、同期規則など、サーバーに行った構成の変更です。The things you need to document and save are the configuration changes made to the server, such as filtering and synchronization rules. 同期を開始する前に、これらのカスタム構成を再適用する必要があります。These custom configurations must be reapplied before you start synchronizing.

予備のスタンバイ サーバーを用意する - ステージング モードHave a spare standby server - staging mode

環境がより複雑な場合は、1 つまたは複数のスタンバイ サーバーを持つことをお勧めします。If you have a more complex environment, then having one or more standby servers is recommended. インストール時、サーバーを ステージング モードに設定できます。During installation, you can enable a server to be in staging mode.

詳しくは、「ステージング モード」をご覧ください。For more information, see staging mode.

仮想マシンを使用するUse virtual machines

一般的なサポートされている方法は、仮想マシンで同期エンジンを実行する方法です。A common and supported method is to run the sync engine in a virtual machine. ホストに問題が発生した場合、同期エンジン サーバーを含むイメージを別のサーバーに移行できます。In case the host has an issue, the image with the sync engine server can be migrated to another server.

SQL 高可用性SQL High Availability

Azure AD Connect に付属している SQL Server Express を使用しない場合は、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. サポートされている高可用性ソリューションには、SQL クラスタリングおよび AOA (Always On 可用性グループ) が含まれます。The high availability solutions supported include SQL clustering and AOA (Always On Availability Groups). サポートされていないソリューションには、ミラーリングがあります。Unsupported solutions include mirroring.

SQL AOA のサポートが、Azure AD Connect のバージョン 1.1.524.0 に追加されました。Support for SQL AOA was added to Azure AD Connect in version 1.1.524.0. Azure AD Connect をインストールする前に SQL AOA を有効にする必要があります。You must enable SQL AOA before installing Azure AD Connect. インストール中、指定された SQL インスタンスで SQL AOA が有効であるかどうかが Azure AD Connect によって検出されます。During installation, Azure AD Connect detects whether the SQL instance provided is enabled for SQL AOA or not. SQL AOA が有効である場合、Azure AD Connect はさらに、SQL AOA が、同期レプリケーションまたは非同期レプリケーションを使用するように構成されているかどうかを調べます。If SQL AOA is enabled, Azure AD Connect further figures out if SQL AOA is configured to use synchronous replication or asynchronous replication. 可用性グループ リスナーを設定するときは、RegisterAllProvidersIP プロパティを 0 に設定することをお勧めします。When setting up the Availability Group Listener, it is recommended that you set the RegisterAllProvidersIP property to 0. Azure AD Connect は現在、SQL Native Client を使用して SQL に接続していますが、SQL Native Client は、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.

付録 CSAnalyzerAppendix CSAnalyzer

このスクリプトの使い方については、「確認」をご覧ください。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 CSV
Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
$objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation

次の手順Next steps

概要トピックOverview topics