Exchange Online テナント間メールボックス移行

皆さんこんにちは。国井です。
以前にOffice 365間のテナント移行の話をしましたが、その時はSynologyを使った方法の話をしました。

最近はExchange Onlineのオフィシャルでテナント間のメールボックス移行がサポートされるようになり、私もトレーニングの準備の一環でその移行手順を操作する機会があったので備忘録代わりにステップバイステップで載せておこうと思います。
最初に言っておきますが、めちゃくちゃ面倒くさいですw
早速行きましょうー

アプリの登録(移行元テナント)

テナント間でのメールボックス移行に必要な認可はAzure ADのアプリの登録を通じて行います。
ということで、まずはアプリの登録を作っていきます。
Azure AD管理センターから[アプリの登録]を開き、新しいアプリを作成します。
アプリの名前を適当に入れて、マルチテナントのアプリになるように設定し(←ここ大事)、
リダイレクトURLに「https://office.com」といれて作成します。

image

アプリができたら次にAPIのアクセス許可を設定します。
[APIアクセス許可]から[アクセス許可の追加]をクリックし、
Office 365 Exchange Online APIのアプリケーションの許可としてMailbox.Migrationの許可を追加します。

image

次に[証明書とシークレット]を選択し、クライアントシークレットを作成します。
生成された値を控えておきましょう。

image

そのほかアプリの登録を作成すると表示されるクライアントIDとテナントIDを控えておきましょう。

組織の共有設定(移行元テナント)

テナント間での移行にはテナント間での信頼関係にあたるような設定が前提条件として必要になります。それを作成します。
これはWindows PowerShellからの設定になるんですよね.. なかなかめんどいです。

Install-Module -Name ExchangeOnlineManagement –Force
Connect-ExchangeOnline

$dh=Get-OrganizationConfig | select isdehydrated
if ($dh.isdehydrated -eq $true) {Enable-OrganizationCustomization}
$AppId = "クライアント ID"
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $AppId, (ConvertTo-SecureString -String "クライアントシークレット" -AsPlainText -Force)

New-MigrationEndpoint -RemoteServer outlook.office.com -RemoteTenant "xxxx.onmicrosoft.com" -Credentials $Credential -ExchangeRemoteMove:$true -Name "移行エンドポイント名" -ApplicationId $AppId
$sourceTenantId="移行元ドメインのテナント ID"
$org=Get-OrganizationRelationship
$existOrg = $org | ?{$_.DomainNames -like $sourceTenantId}
If ($null -ne $existOrg)
{
Set-OrganizationRelationship $existOrg.Name -Enabled:$true -MailboxMoveEnabled:$true -MailboxMoveCapability Inbound
}
If ($null -eq $existOrg)
{
New-OrganizationRelationship "共有設定名" -Enabled:$true -MailboxMoveEnabled:$true -MailboxMoveCapability Inbound -DomainNames $sourceTenantId
}

エンタープライズアプリケーションの作成(移行先テナント)

移行先テナントでは移行元テナントで作成したアプリの登録を利用するためのエンタープライズアプリケーションを作成します。
作成は以下のURLにアクセスして行います。

https://login.microsoftonline.com/移行元ドメイン.onmicrosoft.com/adminconsent?client_id=クライアントID&redirect_uri=https://office.com

作成するとAzure AD管理センターのエンタープライズアプリケーションにこんな感じで表示されます。

image

メールが有効なセキュリティグループの作成(移行先テナント)

移行先のExchange管理センターにアクセスし、メールが有効なセキュリティグループを作成します。

image

組織の共有設定(移行先テナント)

組織の共有設定は移行先テナントでも必要になりますので、さっきのめんどい設定を移行先でも行いましょう。

$targetTenantId="移行先ドメインのテナント ID"
$appId="クライアントID"
$scope="メールが有効なセキュリティグループ名"
$org=Get-OrganizationRelationship
$existOrg = $org | ?{$_.DomainNames -like $targetTenantId}

If ($null -ne $existOrg)
{
Set-OrganizationRelationship $existOrg.Name -Enabled:$true -MailboxMoveEnabled:$true -MailboxMoveCapability RemoteOutbound -OAuthApplicationId $appId -MailboxMovePublishedScopes $scope
}

If ($null -eq $existOrg){
New-OrganizationRelationship "共有設定名(移行元テナントで作成したものと合わせておく)" -Enabled:$true -MailboxMoveEnabled:$true -MailboxMoveCapability RemoteOutbound -DomainNames $targetTenantId -OAuthApplicationId $appId -MailboxMovePublishedScopes $scope
}

作成しても、できたのかい?できなかったのかい?どっちなんだい?って感じなので
必要であればGet-OrganizationRelationshipコマンドレットで確認してください。

image

移行対象メールボックスの定義(移行先テナント)

移行先テナントでは移行対象となるメールボックスに対応するメールユーザーを作成します。
ここがシステマティックでないのがなんとも.. という感じなのですが、移行元のメールボックスユーザーと同じ名前(@前の部分だけ)のユーザーをメールユーザーで作成します。

image

メールユーザーの属性変更(移行先テナント)

さらに面倒くさいのが作ったユーザーに対して属性変更をひとつずつ行っていく点です。
やり方を説明するので、誰かこれを自動化するスクリプトを作ってくだされ。

まず移行先テナントのGet-MailUserコマンドレットで属性変更前の値を確認しておきます。

image

次に移行元テナントに移動してGet-Mailboxコマンドレットを実行して移行元ユーザーのExchangeGUIDを確認します。

image

調べたExchangeGUIDを移行先テナントのExchangeGUIDとして設定します。

image

再び移行元テナントに移動してGet-Mailboxコマンドレットを実行して移行元ユーザーのLegacyExchangeDNを確認します。

image

移行先テナントに戻って調べたLegacyExchangeDNを追加します。
Set-MailUser -Identity “メールユーザー名” –EmailAddress @{add=”LegacyExchangeDNの値”}

image

移行バッチの作成(移行先テナント)

ここからはやっとExchange Onlineへの移行でおなじみの移行バッチを作成します。移行先のExchange管理センターにアクセスし、[移行]から[移行バッチの追加]をクリックして移行バッチを作成します。移行の種類として[クロステナント移行]を選択し、

image

移行エンドポイントして組織の共有設定で作成した名前を選択します。
組織の共有設定はそのまま移行エンドポイントになるんですね。

image

移行先のドメイン名を選択します。

image

そのほか画面を載せていませんが移行対象となるユーザーをメールユーザーで選択します。
ちなみに私の環境ではなぜか移行バッチをGUIで作成しようとすると失敗することがあったのでPowerShellコマンドレットで作成する方法もこちらに載せておきます。

New-MigrationBatch -Name "Migration to Exchange Online" -SourceEndpoint "移行エンドポイントの名前" -CSVData ([System.IO.File]::ReadAllBytes("移行対象ユーザーのメールアドレス一覧を記載したCSVファイル")) -AutoStart -TargetDeliveryDomain 移行先ドメイン名

最後に画面を載せていませんが、移行バッチによる同期が完了したのち、移行バッチ自体を完了すると、メールユーザーはメールボックスユーザーに変換され、メールボックスを移行先で使い始めることができます。