Windowsでのパスワードを完全撤廃し、Active Directoryも抹殺した





シンジです。社内インフラを見直してみると、Active Directoryの闇に加えて、パスワードポリシーを含むGPOの地獄に絶望する管理者は多いと思います。シングルサインオンの技術を使って、なるべくシンプルにそして簡素化しつつもセキュアな構成にしようと試みます。今回はそれら全てをすっ飛ばして、そもそもActive Directoryを使わずに、Windows端末のパスワードも抹殺して、シングルサインオンを実現したというお話です。

概要

通常だとユーザーが利用するパスワードは、基本的には端末のローカルに存在するか、Active Directoryなどのディレクトリサービスに保管されてて、それらを利用します。最近だとDirectory as a Serviceと言われるものを利用して、SaaSを利用するケースもあります。ちなみに有名どころはJumpCloudです。これほんと便利。でもエージェントインストールが前提です。お金もかかるよ!

クラウドサービスを利用する場合、サービス側にもパスワードが保存されるため、端末のパスワードとクラウドサービスのパスワードが同一にならないとか、サービスの数が多いとパスワードが増えすぎて大変などの課題があり、IdP(Identity Provider)を利用してシングルサインオンの構成にすることもよくあります。

この場合、ディレクトリサービスに保管されているユーザー一覧とパスワードを利用して、IdPがクラウドサービスに認証完了通知を送ることで、単一のパスワードでクラウドサービスが利用できることから、シングルサインオンが実現できていると言えます。

しかし僕らはActive Directoryなど使いとうないでござる!!!

ADを捨てるということは、パスワードも捨てるということで、更にはユーザー情報までもを捨てることになります。あほかいな仕事にならんやんけ。

そこで、IdP側にディレクトリ情報とパスワードを持たせることで、全てのログインをWebベースにして、ADを経由させないことで、ADを撤廃すると言うことなのですが、これでは今度はGPOやローカルパスワードどうすんねん問題が発生するので、Azure ADとそれに紐付くIntune、更にはWindows Helloを活用することで、ADの代替としました。

こうなるとWindowsログイン時には、Intuneが予め対象ユーザーにはWeb-Loginを利用するようにデプロイしているので、IdPの、つまりメアドとパスワードでログインするように促します。IdPの認証が通ると、それをAzure ADに通知して、OSのログインを許可します。

スリープしたり軽めのロックをかけてから再度ログインする場合、いちいちIdPに再認証しにいくのも入力がかったるいので、Windows Helloを紐付けておくことで、顔認証ないしは指紋認証でOSログインを完了します。

この仕組みは、既存端末からの変更、新規端末での初期設定、どちらでも有効で、端末台数が万を超えるような規模であってもデプロイできます。組織においての複雑な要件にもカスタマイズ可能で、端末が仮想化されている場合でのリモートデスクトップアクセスについても対応できます。

システムの前提

もちろん前提あります。この前提をクリアするハードルが高い組織も多いでしょうが、個人的にはこの程度なんとかなるやろ普通に仕事してればと思ってます。

  • Windows 10 1809以降
  • なにがしかのIdP(ディレクトリ機能があるもの)
  • Azure AD
  • Windows Hello for Business(なくてもいいけど、前提に入れたいくらい便利)

Windows端末のログインがWeb-loginに対応したのは、1809からです。これ大前提になります。リモートデスクトップによるWindows Helloも1809からです。

今回作ったものはこちら

IdPにはOktaを利用しました。メジャーなIdPはディレクトリ機能を保有しているので、それを利用します。(別ライセンスになっているので購入が必要か、既存ライセンスに含まれている場合がありそれぞれ確認して下さい)
MFAについてはオプションではあるものの、今時クラウドサービス使うのにMFAがないとかヤバすぎるので付けてます。

  • Okta(使うライセンス)
    — Universal Directory
    — Lifecycle Management
    — MFA

Azure AD自体は無償ですが、今回はIntuneを利用するので、テストでやるなら無償版を、もしくはEMS E3かE5、MS365 E3かE5に含まれているので、これを利用します。僕らは今回MS365 E5を利用しています。

  • Azure AD
    — onmicrosoft.comの全体管理者のアカウント
    — IntuneもしくはEMS E3もしくはMS365 E3以上

自社の独自ドメインを利用するのが前提です。

-カスタムドメイン
–cloudnative.co.jp

Windows端末はPro以上でかつ1809以上へのアップデートが完了していることが前提です。

  • Windows10端末
    — Windows 10 Pro以上
    — Windows 10 Version 1809以上

やってみよう

今回のケースでは、Windows端末からパスワードログインを完全に撤廃する、Active Directoryを一切利用しない、Azure ADではないIdPを利用した場合の挙動(Okta)としていますが、これらはお好きなようにカスタマイズ可能で、別途IdPを用意せずAzure ADだけで完結することもできますし、IdPはOktaである必要もないですし、一部はパスワードあるけど一部は撤廃とか、ADとGPOは使うけどパスワードだけなくすとか、いろいろできます。

システム構成図(今回の例)

前述の通り、IdPにOktaを用意しなくても、Azure ADだけで完結もできます。また、Macどうすんねんと思った方はJamf Proを買えってことだし、Linuxどうすんねんと思った方はTeleport構築しろってことなので、過去のブログでも漁って下さい。

このケースでは、Azure AD側にパスワード同期を行わないため、パスワードログインは絶対にできない仕組みになっています。

作り方

全体の流れは以下の通りです。

  1. Azure ADカスタムドメイン登録
  2. Azure ADデバイスポリシー作成
  3. Okta O365プロビジョニング設定
  4. Windows10セットアップ
  5. Webサインイン

Azure ADカスタムドメイン登録

SSOをしたいドメインをAzure ADに追加
カスタムドメイン名の検証をして、確認済みになったことを確認する(確認済みになるまでSSO・プロビジョニングの設定が行えない)

Azure ADデバイスポリシー作成

Windowsログイン時にWebログインできるようにポリシーを有効化する
作成したポリシーはすべてのユーザー、すべてのデバイスにて適用する

Okta O365プロビジョニング設定

OktaからMicrosoft Office 365へのプロビジョニング設定をする

Sing On で WS-Federation を有効化にする

Provisonig で User Sync を有効化する
Create Users,Update User Attributes,Deactivate Users を有効化する

作成したアプリケーションにユーザーをアサイン。アサインする際に、O365ライセンスを付与する

Windows10のセットアップ

初期状態のWindows10を起動します

ネットワークに接続します

組織用に設定します

OktaのO365アプリケーションにアサインしているユーザーを利用します(メールアドレス)

Oktaのログイン画面が表示されます(指定のIdPに遷移します)

MFAのプッシュ通知がきます(MFAの設定をしてあれば、というかしましょう)

Windows Helloの設定をします

PINを作成します(桁数などはIntuneで指定可能)

以後のログインはPINを利用します

完了

Webサインイン

ログアウトもしくは再起動後、ログイン画面にはWebサインインのオプションが追加されます

Microsoftへのログイン画面が表示されます

Oktaのログイン画面に遷移します(指定のIdPに遷移)

あとはさっきと同じでOkta突破したらPIN設定(Windows Hello設定)すればOK

同一デバイスに複数ユーザーでも同じように追加できます

既知の罠

Windows10を初期セットアップする際に、Windows Helloの設定、PINの設定を「スキップ」することができます。スキップされると困ります。今回の環境を構築した中でスキップ処理をすると、パスワードを聞かれるのでログインが出来ません。この場合は端末を再起動して改めてセットアップを進めて、サインインオプションをWebログインにすることでWindows Helloが設定できてセットアップが完了できます。

親切心でパスワードログインオプションを抹殺する

Windows端末からパスワードログインオプションそのものを抹殺することで、そもそもパスワード入力ができない端末になります。パスワード入力欄があると入力したくなる人種が多いので、枠ごと抹殺します。これにはレジストリの編集が必要なので、Intuneでデプロイします。

レジストリキー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers{60b78e88-ead8-445c-9cfd-0b87f74ea6cd}
名前:Disabled
種類:DWORD
値:1

Intuneでデプロイする場合は、PowerShell Scriptで投げる必要があるので、下記を参考にどうぞ。

引用元
http://www.vwnet.jp/Windows/PowerShell/Regedit.htm

Intune側で投げるときは、ユーザーに対して適用するか、デバイスに対して適用するかを選ぶ必要があります。今回はデバイスに対して適用しています。また、32bitOS混合の場合は適宜変更して下さい。

そんなこんなで

ADとパスワードを使わないことに情熱を注ぐ弊社でした

追記0412-2350

Azure ADも使わずにディレクトリをGoogleに寄せるとこうなります。ただしWindowsは存在しない。そんなエンプラが国内にあるのかしら。