Office365 Enterprise (Preview)でのSSO手順

Office365の次期バージョン(開発コードOffice15)のプレビューが開始されました。ヘルプを見てみたところ、概ねADFSがらみの部分は同じコンテンツのようでしたので、実際に試してみました。

ちなみに、環境はこんな感じです。

  • Office365ドメイン名:exchange2013.onmicrosoft.com
  • ADドメイン名:exchange2013.local
  • ADFS用ドメイン(新しいUPN)名:exchange2013.info
  • ADFSサービス名:sts.exchange2013.info
  • ADサーバ:ad.excange2013.local / Windows Server 2008 R2 SP1
  • ADFSサーバ兼ディレクトリ同期サーバ:adfs.exchange2013.local / Windows Server 2008 R2 SP1

まずは、ADFS用のドメインを追加します。新しい管理者ポータルから、「ドメイン」を開き「ドメインの追加」を選択します。ドメイン名を入力し、次へを選択します。

ドメインの認証画面が表示されますので、プルダウンから「一般的な手順」を表示させます。すると、認証用のTXTレコード(MS=ms12345678)が表示されますので、こちらと同じ値を追加しようとしている独自ドメインのDNSに登録します。

変更が出来たのを自身の端末などから確認ができたら、「確認」ボタンをクリックするとドメインの登録が完了します(ここはキャッシュなどの問題で数時間~24時間ほどかかる場合もございます。) ドメインの用途は必要なサービスを選択(SharePoint Onlineは他のサービスとは排他)して「次へ」をクリックすると、ドメインの追加は完了します。

続けて、独自ドメインのDNSレコードの構成に入ることもできます。追加する必要のあるレコードは、概ねOffice365の時と変わらないようですが、MXの向け先であるFOPEのFQDNのみcontoso-com.mail.eo.outlook.com のような変換ルールだったのが contoso-com.mail.protection.outlook.com のような変換ルールになってます。(プレビュー版だからの可能性も有ります。)

ドメインが追加されたことを確認したところで、オンプレミス(AD、ADFSサーバ)側の処理に入りたいと思いますが、先行して「ディレクトリ同期のアクティブ化」を実施されておくことをお勧めします。

「ユーザーとグループ」からシングルサインオンの右側にあるセットアップを選択し、「ActiveDirectory同期をアクティブ化する」をクリックします。(画面には「最大24時間かかる場合があります」と表示されますが、本当に数時間以上掛かるケースが多いです。

さて、この間にADFS、ディレクトリ同期サーバなどのセットアップを行います。

まずは、既存のActive Directory環境のアセスメントから実施します。今回、オンプレミスのActive Directoryが「exchange2013.local」というインターネット上で解決ができず、かつ自身で所有していない(=Office365 Enterpriseの追加ドメインとして利用できない)ドメインなので、独自ドメインの「exchange2013.info」を利用します。

今まで、username@exchange2013.localだったユーザ名をusername@exchange2013.infoに変更します。勿論、この作業以降はユーザは元のIDではログオンできなくなるので注意が必要です。(今まで利用していたのがexchange2013usernameの形式であれば問題なく継続してログオンできます。)

ドメインコントローラ上から、「Active Directoryドメインと信頼関係」を開き、ドメイン名の上のルートを右クリックしてプロパティを開き「代わりのUPNサフィックス」にexchange2013.infoを追加します。

これで、ユーザーを作成する際やプロパティを開いた際に、UPN名で「exchange2013.local」の他に「exchange2013.info」をプルダウンから選択して設定することが可能になります。ちなみに、これを行っただけでは既存のユーザのUPNは変更されませんので、GUIからユーザーを選択してプロパティを開いて変更するか、PowerShellなどで変更してしまいましょう。

ここでは、Office 365 環境用 ID フェデレーション実装ガイド で紹介されているPowerShellを利用してドメイン内のUPNを問答無用でexchange2013.infoに変更しました。

$UPNSuffix = "exchange2013.info"
Get-ADUser -Filter:* | foreach {
 [string]$newUPN = $_.SamAccountName + "@" + $UPNSuffix
 Set-ADUser $_ -UserPrincipalName:$newUPN
}

続いて、DNSを作成します。exchange2013.infoというゾーンは、現在内部DNSには無いのでそれを新規で作成し、sts.exchange2013.infoというホストをADFSサーバのIP(adfs.exchange2013.local)に向けるようにAレコードを作成します。

つぎに、ADFS実行用のサービスアカウントを作成します。Active Directoryユーザーとコンピューターから、任意のユーザーを作成します。ここでは、adfsserviceというユーザーを作成しています。厳密には管理者権限が無くても構成は可能ですが、警告が出たり手順が複雑になるので、ここでは管理者として構成しておきます。

これで、ようやくADFSをセットアップする準備が整いました。ADFSサーバにadfsserviceのアカウントでログインします。また、セットアップに必要なファイルを準備しておくと良いと思います。

  • AdfsSetup.exe(ADFS2.0RTM)
  • dirsync-ja.exe(ディレクトリ同期ツール
    ※少し前のサインインアシスタントが同梱されております
  • AdministrationConfig-ja.msi(Windows PowerShell用Microsoft Online Servicesモジュール)
  • sts_exchange2013_info.pfx(sts.exchange2013.infoのシリアル名が付いているpfx証明書)

まず、AdfsSetup.exeを起動してADFSをインストールします。使用許諾に同意した後に、「フェデレーションサーバ」の役割を選択して進めると、プログラムのインストールは完了します。

最後の所で「ADFS2.0の管理スナップインを開始する」のチェックボックスを外して完了します。(もしくはチェックを外さないで、次の起動画面の状態で準備の次の工程を進めます)

ADFSのセットアップには、SSL証明書が必要になります。今回はイントラ内での利用のみかつ検証環境なのでエンタープライズCAから発行された証明書を利用しようと思います。(既に発行済みの物を.pfxで保存して持ってきておきます)

MMCを起動し、「スナップインの追加と削除」から「証明書」を選び「ローカルコンピュータ」を選択します。

「個人」からインポートを選択し、用意したpfxファイルをエクスポート可能な形で「個人」にインポートします。この際に最初にエクスポートした際に設定したパスワードが要求されます。

インポートした証明書の秘密キーに対して、ADFSサービスアカウントが読み取り以上のアクセス権限を有している必要がありますので、証明書の「秘密キーの管理」から適切な権限を割り当てます。

続いて、ADFSのセットアップに戻ります。「ADFS2.0の管理」を起動し、中央ペインの構成ウィザードを起動します。

「新しいフェデレーションサービスを作成」「新しいフェデレーションサーバーファーム」を選択します。利用する証明書では、先ほどインポートした証明書が選択され、フェデレーションサービス名に sts.exchange2013.info が入っていることを確認します。また、ADFSのサービスアカウントはadfsserviceを選択し、パスワードを入力します。

しばらく待つとADFSのセットアップの完了です。

この後、Office365の情報を追加するとADFSのセットアップは完了しますが、その前に、ディレクトリ同期ツールのセットアップを先に完了させる必要があります。

dirsync-ja.exe を管理者として実行します。ライセンス許諾に同意して次へを選択すると、しばらく待つとインストールの終了です。終了後はそのまま設定ウィザードに移行しますので、Office365 Previewポータルでディレクトリ同期の準備が完了したことを確認した後、構成ウィザードを起動します。

ちなみに、手順等の問題で先に「サインインアシスタント」をインストールした場合、このインストールの途中で異常終了します。かならず一度アンインストールしてからディレクトリ同期ツールをインストールして下さい。

さて…、ここで完了をクリックする前に、元のOffice365 Previewポータルに戻ってディレクトリ同期が有効化されていることを確認します。場合によっては1日以上待つことになるかもしれませんが、そこは余裕を持ってスケジューリングをしておいて、気長に待ちます。

ディレクトリ同期が有効化された後に、構成ウィザードを開始します。ウィザードでは、同期用のOffice365の管理者アカウントとActive Directoryの管理者アカウントを設定します。設定が完了したら早速同期しておきます。

最後に、ADFSを有効化します。用意しておいたWindows PowerShell用Microsoft Online Servicesモジュールを実行してインストールを行います。

その後、ADFSサーバ上でPowerShellを起動してConnect-MsolServiceでOffice365に接続し、Convert-MsolFederatedDomainコマンドを実行してシングルサインオンを有効化します。

$LiveCred = Get-Credential
Connect-MsolService -Credential $LiveCred
Convert-MsolDomainToFederated -DomainName contoso.com

これで、サーバ側の準備は完了です。

Active化したuser01というアカウントでシングルサインオンの試験をしてみようと思います。https://sts.exchange2013.info/ を「イントラネットサイト」に設定した後に、ポータルに接続しまてIDを入力後、「exchange2013.infoにサインインする」をクリックすると、数回のリダイレクトの後にシングルサインオンできました。

というわけで、特にOffice365の時の手順と相違なくシングルサインオン環境が構築できました。共通的に利用している部分も多く、特にディレクトリ周りは同じ基盤を使って実装していると思われます。