2016/02/03

Windows 10 のデバイス認証と Microsoft Passport for Work をオンプレに展開 (成功)

Windows 8.1 のワークプレース参加 (Workplace Join、社内参加) 的なことを Windows 10 で実現する件。

以下の記事に書いたように、これまではことごとく失敗してきましたが、ようやく成功しました。ついでに、Microsoft Passport for Work っぽい環境(→) もできあがりました。

過去の失敗:
Windows Server 2016 TP3 > Azure AD Connect で Device Writeback に挑戦(成功と失敗) (2015/09/10)
Windows Server 2016 TP3 > Azure AD Connect でディレクトリ同期 (2015/09/07)

Windows 10 に Workplace Join 機能はあるの?ないの?(追記あり) (2015/09/05) 

久々の長編です。


結論から言うと、Windows 10 に "Windows 8.1 スタイルの" ワークプレース参加機能は存在しません。Azure AD ベースのデバイス登録に置き換わってしまいました。オンプレに展開した AD FS の認証環境で、デバイス登録と認証を行う方法は、Windows 8.1 のワークプレース参加の方法と同じようにはできなくなってしまいました。

Windows 10 では、Azure AD にデバイス登録し、そのデバイス登録の情報をオンプレとのディレクトリ同期でオンプレに持ってくる、またはオンプレの AD にドメイン参加する PC を自動デバイス登録するという方法になります。前者は Azure AD Premium の「デバイスの書き戻し (Device Writeback)」機能に依存するので、これを実現するには、追加費用も発生します。


以前に「Device Writeback に挑戦」で想像していた方法で間違いなかったのですが、Windows Server 2016 と Windows 10 の両方とも ビルド 10586 以降でなければできないみたいです。失敗したわけです。

この件に関するドキュメントがようやく出たので、再挑戦。成功しました(たぶん)。ついでに、Microsoft Passport for Work (風) も利用可能になりました(たぶん)。

Windows 10 Sign on – enabling device authentication with AD FS
[URL] https://technet.microsoft.com/en-us/library/mt593303.aspx

2/4 追記)
こっちのドキュメントも詳しい。こちらでは、Windows 10 の要件は build 10551 以降になってる。
Connect domain-joined devices to Azure AD for Windows 10 experiences
[URL] https://azure.microsoft.com/en-us/documentation/articles/active-directory-azureadjoin-devices-group-policy/


できあがりはこんな環境。

今回は緑のところ。転々緑のところは試してません。要点 (落とし穴) だけメモっておきます。
 
 
オンプレの AD DS、AD CS、AD FS、WAP を展開する

オプレミスの Active Directory フォレスト/ドメイン環境を準備します。Active Directory ドメイン サービス (AD DS)、Active Directory 証明書サービス (AD CS)、Active Directory フェデレーション サービス (AD FS)、Web アプリケーション プロキシ (WAP) をインストールおよび構成します。WAP はインターネットとの境界に配置。

ここまでのシステム要件としては...
  • Windows Server 2016 のドメイン コントローラー (DC) 
  • Windows Server 2016 のディレクトリ スキーマ (バージョン 85 以降)
  • Windows Server 2016 Technical Preview (TP) 4 (Build 10586) 以降の AD FS
フォレスト/ドメイン機能レベルについてはドキュメントでは言及されていませんが、最上位の「Windows Server Technical Preview (WindowsThresholdForest) 」で大丈夫でした。あとで登場する Azure AD Connect の古いバージョンは、WindowsThresholdForest を認識でけませんでしたが、November 2015 release で WindowsThresholdForest をサポートしたようです。


ス キーマ バージョンを確認したければ、ADSI エディター (Adsiedit.msc) でスキーマに接続し、objctVersion を見てください。Windows Server 2016 TP4 以降で最上位の機能レベルでインストールすれば 85 またはそれ以降のはず。(ちなみに、2012 R2 の AD DS は 69)


具体的な手順は、拙著『Windows Server 2016 テクノロジ入門 Technical Preview エディション』↓や『Windows Server 2012 R2 テクノロジ入門』で詳しく書いていますので省略。


 http://ec.nikkeibp.co.jp/item/books/P98530.htmlhttp://ec.nikkeibp.co.jp/item/books/P98250.html

Windows Server 2016 Technical Preview では、既定で組織のサインインページ (/adfs/ls/idpinitiatedsignon) が無効になっているので、次のコマンドレットで有効化するおまじないを忘れずに...

Set-AdfsProperties -EnableIdPInitiatedSignonPage $True


オンプレの AD と Azure AD をディレクトリ同期する

オンプレミスの AD のディレクトリを、 Azure AD のディレクトリとディレクトリ同期します。

システム要件としては...
Azure AD は Microsoft Azure や Office 365、Microsoft Intune に付属する Free 版でいいですが、この後のデバイスの書き戻しのためには、Azure AD Premium サブスクリプションの取得が必要です。

Azure AD のディレクトリに、オンプレの AD のディレクトリを追加して、シングル サインオン用に構成...

カスタム ドメイン追加直後の[ディレクトリ統合]のページ。この時点では"シングル サインオン用に計画されたドメイン: 1"、"非アクティブ化済み" の状態。

オンプレ側の Windows Server に Azure AD Connect をインストールして、[簡単設定を使う]で簡単に同期をセットアップ。私の場合は、WAP のサーバーにインストールしましたが、インターネット アクセス (直結不要、Web アクセスできればよい) できるドメイン メンバーならどこでもいいと思う。

同期が完了すると、Azure AD の[ディレクトリ統合]のページは "アクティブ化済み" になるはず。でも、まだ "シングル サインオン用に計画されたドメイン: 1" のまま。

ここで、Azure AD Connect がインストールされているサーバーの PowerShell で以下のコマンドラインを実行します。

PS> $cred = Get-Credential
(Azure AD の管理者アカウントの資格情報を入力)

PS> Connect-MsolService -Credential $cred
PS> Set-MsolAdfsContext -Computer <AD FS サーバーの FQDN>
PS> New-MsolFederatedDomain -DomainName <オンプレ AD の DNS 名> -SupportMultipleDomain

最後のコマンドラインを実行するとエラーになり、MS=msXXXXXXX というテキスト値が示されるので、これをオンプレの AD ドメインの DNS のゾーンに、TXT レコード (@  TXT  MS=msXXXXXXX) として登録します。TXT レコードが登録できない場合は、MX レコードで代替できるようです。

TXT レコードを登録してしばらくしたら (nslookup で set qt=TXT してドメイン名でレコードを検索できるようになったら) 、もう一度、次のコマンドラインを実行します。今度は成功するはず。

PS> New-MsolFederatedDomain -DomainName <オンプレ AD の DNS 名> -SupportMultipleDomain


さらにしばらくすると、Azure AD の[ドメイン]ページの状態が "未確認" から "確認済み" に、[ディレクトリ統合]のページの "シングル サインオン用に構成されたドメイン: 1" に変わります。


以上でディレクトリ統合は完了。


AD FS でデバイス登録サービス (Device Registration Service: DRS) を有効化する

AD FS サーバーの PowerShell で以下のコマンドラインを実行して、デバイス登録サービスとデバイス認証を有効化します。Windows Server 2016 からは、[AD FS の管理]スナップインの[サービス > Device Registration]からワン クリックで有効化することもできます。

PS> Initialize-ADDeviceRegistration –ServiceAccountName "AD FS のサービス アカウント名 (ドメイン名\FsGmsa$" 
PS> Enable-AdfsDeviceRegistration
PS> Set-AdfsGlobalAuthenticationPolicy –DeviceAuthenticationEnabled $true

なお、Windows Server 2016 TP4 では、これらのコマンドレットではなく、Install-AdfsFarm と Add-AdfsFarmNode を使えって文句を言われます(が無視)。

Azure AD Connect をインストールしたサーバーの PowerShell で以下のコマンドラインを実行します。


PS> Import-Module "C:\Program Files\Microsoft Azure Active Directory Connect\AdPrep\AdSyncPrep.psm1"
PS> $aadAdminCred = Get-Credential 
(Azure AD の管理者アカウントの資格情報を入力) 
PS> Initialize-ADSyncDomainJoinedComputerSync –AdConnectorAccount <Azure AD Connect アカウント名> -AzureADCredentials  
PS> Initialize-ADSyncDeviceWriteBack –DomainName <オンプレ AD のドメイン名> –AdConnectorAccount <Azure AD Connect アカウント名>
PS> Initialize-ADSyncNGCKeysWriteBack –AdConnectorAccount <Azure AD Connect アカウント名>
 

Azure AD Connect アカウント名は、Azure AD Connect で設定した(された) ものであることに注意しましょう。Azure AD Connector を簡単設定でインストールした場合は、ドメイン名\MSQL_XXXXXXXXXXXX のようなドメイン アカウントが作成、構成されているので、そちらを指定します。この指定が間違っていると、次のデバイスの書き戻しを有効化できません。



Azure AD Connect をインストールしたのと別のサーバー (AD FS や DC) で実行する場合は、"AdSyncPrep.psm1" をコピーしてインポートすれば使えます。ただし、以下のものをインストールしておかないと MSOnline が無いって怒られます。

Microsoft Online Services Sign-In Assistant for IT Professionals RTW
[URL] http://go.microsoft.com/fwlink/?LinkID=286152 

Azure Active Directory Module for Windows PowerShell (64 ビット バージョン) 
[URL] http://go.microsoft.com/fwlink/p/?linkid=236297

AD FS  サーバーの PowerShell で以下のコマンドラインを実行します。[AD FS の管理]スナップインの [サービス > エンドポイント] で有効化することもできます。

PS> Enable-AdfsEndpoint -TargetAddressPath "/adfs/services/trust/13/windowstransport"
PS> Enable-AdfsEndpoint -TargetAddressPath "/adfs/services/trust/2005/windowstransport"

WAP も展開している場合は、次のコマンドラインも実行して、 エンドポイントのプロキシも有効にしたほうがいいみたい。

PS> Set-AdfsEndpoint -TargetAddressPath "/adfs/services/trust/13/windowstransport" -Proxy $true
PS> Set-AdfsEndpoint -TargetAddressPath "/adfs/services/trust/2005/windowstransport" -Proxy $true

AD FS  サーバーの PowerShell で以下のコマンドラインを実行します。[AD FS の管理]スナップインの[証明書利用者信頼]の Microsoft Office 365 Identity Platform のアクセス制御ポリシーを変更しているみたい。これは、必須ではないかもしれないです。

(このルールがあれば、オンプレの AD FS に直接デバイス登録され、なければ Azure AD にデバイス登録されたのをライトバックでオンプレにという感じ。オンプレで登録されたデバイスを Azure AD に同期する方法ならデバイス ライトバック=Azure AD Premium ライセンスは不要っぽい)

PS> $existingRules = (Get-ADFSRelyingPartyTrust -Identifier urn:federation:MicrosoftOnline).IssuanceTransformRulesPS> $rule1 = '@RuleName = "Issue object GUID"
      c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "515$", Issuer =~ "^(AD AUTHORITY|SELF AUTHORITY|LOCAL AUTHORITY)$"] &&
      c2:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer =~ "^(AD AUTHORITY|SELF AUTHORITY|LOCAL AUTHORITY)$"]
      => issue(store = "Active Directory", types = ("http://schemas.microsoft.com/identity/claims/onpremobjectguid"), query = ";objectguid;{0}", param = c2.Value);'
PS> $rule2 = '@RuleName = "Issue account type for domain joined computers"
      c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "515$", Issuer =~ "^(AD AUTHORITY|SELF AUTHORITY|LOCAL AUTHORITY)$"]
      => issue(Type = "http://schemas.microsoft.com/ws/2012/01/accounttype", Value = "DJ");'
PS> $rule3 = '@RuleName = "Pass through primary SID"
      c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "515$", Issuer =~ "^(AD AUTHORITY|SELF AUTHORITY|LOCAL AUTHORITY)$"] &&
      c2:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer =~ "^(AD AUTHORITY|SELF AUTHORITY|LOCAL AUTHORITY)$"]
      => issue(claim = c2);'
PS> $updatedRules = $existingRules + $rule1 + $rule2 + $rule3PS> $crSet = New-ADFSClaimRuleSet -ClaimRule $updatedRulesPS> Set-AdfsRelyingPartyTrust -TargetIdentifier urn:federation:MicrosoftOnline -IssuanceTransformRules $crSet.ClaimRulesString

Azure AD Connect を再実行してデバイスの書き戻しをセットアップする

Windows 10 は、Azure AD に社内参加という方法でデバイス登録できますが、その情報をオンプレに同期するために、ディレクトリ同期で「デバイスの書き戻し (Device Writeback)」を有効にします。そのための要件として...
  • Azure AD Premium サブスクリプション (1 ヶ月無料評価版あり)
が必要です。Azure AD のポータルのダッシュボード ページから 1 ヶ月無料評価版をサインアップできるので、 それを取得して、ディレクトリ同期したオンプレのアカウントに割り当てておきます。
(※ ドメイン参加済み PC をオンプレの AD FS に直接デバイス登録する場合は Premiumのデバイス書き戻しは不要です)




Azure AD Connect を再実行し、[同期オプションのカスタマイズ]を選択して...
[デバイスの書き戻し]をチェックして...

デバイスの書き戻し先のフォレストを指定して、インストールします。
Initialize-ADSyncDomainJoinedComputerSync と Initialize-ADSyncDeviceWriteBack の –AdConnectorAccount の指定が正しくないと、[デバイスの書き戻し]がグレーのままで選択できないのでご注意。


その他にグレー表示の原因があるようです。詳しくはこちら...

Enabling device witeback in Azure AD Connect
[URL] https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnect-get-started-custom-device-writeback/


Windows 10 をデバイス登録する (ドメイン参加済み PC)

この手順は未検証です。

ここでの Windows 10 のデバイス登録の要件はたぶん...
  • Windows 10 バージョン 1511 (ビルド 10586 ) 以降
    (ビルド 10240 は NG?、Home エディションは NG)
公式ドキュメントでは、グループ ポリシーで以下のポリシーを有効にすることで、ドメイン参加済みデバイス (PC) の自動登録をする方法が説明されていますが...

コンピューターの構成\管理用テンプレート\Windows コンポーネント\デバイスの登録\ドメインに参加しているコンピューターをデバイスとして登録: 有効

ビルド 10240 のドメイン参加済み Windows 10 のローカル コンピューター ポリシーで試してみたところ、Microsoft-Windows-AAD/Opearational ログに次のイベントが記録されていました。

イベント ID 1089 "Device is not domain or cloud domain joined: 0xC00484B2" 
イベント ID 1104 "AAD Cloud AP plugin call Plugin initialize returned error: 0xC00484B2"

ちなみに、ドメイン参加 PC のデバイス自動登録は、\Microsoft\Windows\Workplace Join\Automatic-Device-Join タスクでログオン時に dsregcmd.exe が実行されることで行われるみたい。Windows 7 のワークプレース参加と同じ感じ (Windows 7 の場合のコマンドは AutoWorkplace.exe /Join ですが...)

やっぱり、ビルド 10586 以降でないとダメなのかなぁ?

 (事情によりビルド 10586 のドメイン参加済み PC は準備できませんでした) ...

2/5 追記)

-----
ビルド 10586 でできたという先人様...
IdM 実験室 > [Windows 10/Azure AD]ハイブリッド環境におけるドメイン参加とシングルサインオン①  
[URL] http://idmlab.eidentity.jp/2016/01/windows-10azure-ad.html

AD FS の構成 (Microsoft Office 365 Identity Platform のアクセス制御ポリシー) により、次のいずれかの方法でできるようです。Azure AD Premium が必要になるのは後者。

●オンプレの AD FS でドメイン参加 PC を自動でデバイス登録 (こちらは確認済み)
●Azure AD にドメイン参加 PC を自動でデバイス登録 → Azure AD Connect (Device Writeback) → オンプレ AD (こちらが未確認)

Windows Server 2016 TP4 をクライアントとしてみたら、あっさりできました。

クライアント側では次のコマンドが役に立つかも。

dsregcmd /debug 
dsregcmd /status [/debug ]
dsregcmd /leave [/debug]

ここでちょっと悩んだのが、ディレクトリ同期してもオンプレ側でデバイス登録されたデバイスが Azure AD に登録済みデバイスとして表示されないということ。これは現在の仕様らしく、Graph Explorer (→ https://graphexplorer.cloudapp.net/<Azure ADのドメイン名>/devices/)  というツールを使うことで同期されたことを確認できました。


-----


Windows 10 をデバイス登録する (ドメイン参加なし、Azure AD Join なし PC)


ここでの Windows 10 のデバイス登録の要件はたぶん...
  • Windows 10 (ビルド 10240 でも OK、Home エディションも OK)
簡単に Windows 10 の[設定 > アカウント > メールとアカウント > 他のアプリで使われるアカウント > 職場または学校アカウントを追加] を使用することでも、Azure AD にデバイス登録 (Azure AD Join ではない方法で) できます。Home エディションはこの方法が唯一の方法。




Azure AD のユーザーの[デバイス]ページを見ると、[社内参加済み]としてデバイスが登録されているのがわかります。
しばらくして、ディレクトリ同期が完了すると、オンプレの AD の[RegisteredDevices]コンテナーにデバイスが反映されます。すぐに同期したければ、Azure AD Connect のサーバーの Azure AD Sync Scheduler タスクを手動実行してください。




クラウドとオンプレのアプリに SSO してみる


(インターネット側にある Azure AD で社内参加の PC で試しました)

クラウドのアプリ (この例では Office 365 ポータル) にアクセスすると、、[証明書の確認]ダイアログボックスのあと、サインイン ページなしで SSO アクセスできました。通常であれば、組織のサインイン ページにリダイレクトされるはずです。

なお、Windows 10 の IE 11 だとうまくいくんですが、アプリの一部は Microsoft Edge だとダメなことも (ActiveX コントロール必要な RD Web とか?)。


ここまでは、Azure AD のデバイス登録の機能で動いている (と思います) 話。続いて、WAP で発行したアプリ (この例では RD Web アクセス) を IE 11 でアクセスしてみました。

今度も [証明書の確認]ダイアログボックスのあと、組織のサインイン ページが表示されることなく、SSO アクセスできました。なお、オンプレの AD CS のルート CA 証明書をコンピューターの[信頼されたルート証明機関]にインストールすること、信頼済みサイトにオンプレの DNS サフィックスを登録しておくのを忘れずに。




SSO なのに RD Web アクセスのサインイン ページじゃんっていうのは、また別の話。現在の RD Web アクセスの仕様です。

本当にオンプレの AD FS でデバイス認証できているのかどうかを確認するために、証明書利用者信頼のアクセス制御ポリシーでデバイス登録を強制してみましたが、問題なく SSO できました。


Windows 10 Home エディションでも、[職場または学校のアカウントの追加]で、オンプレ AD FS によるデバイス認証&SSO できました。





Microsoft Passport for Work (風)

Microsoft Passport は、Microsoft アカウントでサインインする Windows 10 で利用可能です。また、Azure AD Join で Azure AD に参加する Windows 10 (Home エディションはサポートされない) でも利用可能です。もう 1 つ、オンプレミスの Windows Server 2016 の Active Directory アカウントでも利用できます。その要件は...
  • Windows 10 バージョン 1511 (ビルド 10586) 以降
  • ここまでに構築した Active Directory のドメインへの参加
  • デバイスの登録ポリシーの有効化

Windows 10 Sign on – enabling device authentication with AD FS (https://technet.microsoft.com/en-us/library/mt593303.aspx)」の Microsoft Passport for Work の項目は空っぽ (2016/02/03 現在) ですが、ここまでの環境が構築できていれば、Microsoft Passport for Work の利用環境も整うみたいです。

Windows 10 の Microsoft Passport for Work の設定は以下のドキュメントで説明されているグループ ポリシーで構成できますが、ポリシー設定なしでも既定の設定でTPM なしで Microsoft Passpot を使えるようになっています。

組織での Microsoft Passport の実装
[URL] https://technet.microsoft.com/ja-jp/library/mt219734(v=vs.85).aspx

[職場または学校のアカウントを追加]に Azure AD とディレクトリ統合&デバイス書き戻し同期されたオンプレ AD の ID を追加すると、[設定 > サインイン オプション]に[勤務先 PIN]の設定が表示されるようになりました。Azure AD Join で Azure AD に参加した PC と同じ UI です。たぶん、これが Microsoft Passport for Work。ドメイン参加してなくても、UI は出てくるみたいです。

勤務先 PIN を追加すると、携帯電話を使用した二段階認証が要求され、[職場用 PIN のセットアップ]が可能になりました。

※Windows のサインインに使っているアカウントではないので、勤務先 PIN を設定しても使う場面がなく、役に立たちません。本来のドメイン参加 Windows 10 を Azure AD に自動的にデバイス登録する構成であれば、Windows 10 へのサインイン用のドメイン アカウントに勤務先 PINを設定して PIN でドメインにサインインし、Microsoft Passport for Work でオンプレ アプリやクラウド アプリを SSO で利用できるようになると思います。

今回は理由があってドメイン参加までは試せませんでした。その理由とは、オンプレの AD 環境を、 Azure IaaS 環境に作っちゃったから。VPN 接続とか面倒なので...

Azure IaaS で Windows 10 ver 1511 のテンプレート利用できるようになればいいんですけど...  MSDN Subscription で利用可能な開発/テスト用の Windows 10 Enterprise イメージはビルド 10240 だから使えないし。







 

おまけ: レガシなワークプレース参加をサポートするには...


Windows 10 向けのデバイス認証と同じ環境で、Windows 8.1、iOS、Android、Windows 7 (Windows 7 はドメイン参加が必須) の PC やデバイスをワークプレース参加でデバイス登録およびデバイス認証できます。オンプレの AD FS に直接、デバイス登録するには、DNS に以下のレコードを登録します。

オンプレ向け DNS
enterprisegistration.<DNS サフィックス> A <AD FS サーバーのプライベート IP>
インターネット向け DNS
enterpriseregistration.<DNS サフィックス> A <WAP サーバーのパブリック IP>

デバイス登録を Azure AD で行うには、DNS に以下のレコードを登録します。この場合は、Azure AD Premium のデバイス ライトバックが必要。

オンプレ向け DNS およびインターネット向けDNS
enterpriseregistration.<DNS サフィックス> CNAME enterpriseregistration.windows.net
enterpriseregistration.region.<DNS サフィックス> CNAME enterpriseregistration.windows.net


以上。

2/5 追記)
Windows 10 をデバイス登録する (Azure AD Join)

Azure AD Join の Windows 10 のデバイス登録の要件はたぶん...
  • Windows 10 (ビルド 10240 でも OK、Home エディションは NG)
Azure AD にディレクトリ同期したオンプレの ID の資格情報を利用して、Azure AD Join を実行。


Azure AD には[AAD 参加済み]という状態でデバイス登録されます。しばらくすると、Azure AD Connect のデバイス書き戻しでオンプレの AD に反映。


Azure AD Join すると、オンプレの ID で Windows にサインインできるのですが、クラウド アプリは SSO できても、オンプレ側のアプリは SSO できなかった... 何か足りない? それともオンプレの AD に参加してるわけではないので、この動作で OK?

だんだん、わけがわからなくなってきた...

3/10 追記)  Azure AD, Workplace Join、Microsoft Passport for Work のいろんな謎はこちらで解消!

Setting up Windows 10 devices for work: Domain Join, Azure AD Join and Add Work or School Account (Active Directory by Jairo Cadena)
[URL] http://jairocadena.com/2016/01/18/setting-up-windows-10-devices-for-work-domain-join-azure-ad-join-and-add-work-or-school-account/
Azure AD and Microsoft Passport for Work in Windows 10
(Active Directory by Jairo Cadena) 
[URL] http://jairocadena.com/2016/03/09/azure-ad-and-microsoft-passport-for-work-in-windows-10/

1 件のコメント:

山市 良 さんのコメント...

Microsoft Passport guidehttps://technet.microsoft.com/en-us/library/mt589441(v=vs.85).aspx を見ると、"Note that the current release of Windows 10 supports the Azure AD only scenarios." となっているので、Microsoft Passport for Work についてはまだオンプレでできないと考えたほうがいいみたい。