パスワード ライトバックが構成されている環境で SSPR (セルフ サービス パスワード リセット) を実行したときに AD DS 側のアカウント ロックアウトが解除できることを確認する

#はじめに
Azure AD 上のクラウド ユーザーもしくはオンプレミスの AD DS から同期してきたハイブリッド ID はユーザー自身がパスワードをリセットするという SSPR (セルフ サービス パスワード リセット) という機能が Azure AD の標準の機能として用意されています。

この機能を活用することで、ユーザー側からするとパスワードを忘れてしまった場合、もしくは今回ご紹介するパスワードを複数回短期間に間違えてしまってロックアウトしてしまった場合などに一々ヘルプデスクや IT 管理部門に依頼をすることなく自分の好きなタイミングでパスワードをリセットできるので、IT 管理部門がロックアウトを解除してくれるまで仕事ができない、といった待ち時間が発生しなくなります。

一方 IT 管理部門からすると、複数のユーザーからのロックアウト解除の依頼を受け付けたり対応する必要がなくなり、ロックアウトの解除オペレーション以外の業務に時間を割けることができるようになります。

また、パスワード ライトバックという Azure AD Connect で構成可能な機能を有効化することで、クラウド ユーザーだけでなく、オンプレミス環境の AD DS から同期してきたハイブリッド ID に対しても SSPR の恩恵を受けることができるようになります。
(この機能を利用するためには Azure AD Premium P1 以上のライセンスが必要です。)

今回は Microsoft の公開情報に記載されている以下動作について実際に動作確認をしてみました。

-参考情報
パスワード管理に関するよく寄せられる質問 (FAQ) パスワードのリセット
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/authentication/active-directory-passwords-faq#password-reset

>Q:ユーザーがパスワードをリセットするときに、ローカルの Active Directory アカウントのロックを解除できますか。
A: はい。 ユーザーが自分のパスワードをリセットするとき、Azure AD Connect を使ってパスワード ライトバックがデプロイされている場合は、パスワードをリセットしたときに、そのユーザーのアカウントが自動的にロック解除されます。

これはどういうことを言っているかというと、Azure AD を利用している多くのユーザーがオンプレミス AD DS から同期してきたハイブリッド ID かと思いますが、仮にオンプレミス AD DS 上に参加しているコンピューターに複数回ログオンに失敗し、AD DS 側のグループ ポリシーに従いロックアウト状態になってしまった場合、Azure AD 側の SSPR を利用することでオンプレミス AD DS 側のロックアウトを解除できる、ということです。

前提として***パスワード ライトバック***が構成されていることが絶対条件になります。
後ほど実際の動作をお見せしますが、***パスワードライトバック***が有効になっていないとオンプレミス AD DS 側のアカウントの特定の属性値を変更することができないので、オンプレミス AD DS 側のロックアウトは解除できません。

それでは実際に動作を確認してみます。

#やってみる
結論から先に行ってしまうと、パスワード ライトバックの機能が有効になっていることで、Azure AD Connect で設定した同期を実行するアカウント (AD DS コネクタ アカウント) が SSPR を行った対象のアカウントに対して***lockoutTime*** 及び ***pwdLastSet***属性への書き込み権限を使い変更を行うことでロックアウト解除を実現しています。

適切なアクセス許可が付与されているかどうか、および利用している Azure AD Connect がどのアカウントを利用して同期を実行しているかについては、下記 Microsoft の公開情報に確認手順が記載されていますので参考にしてみてください。

-参考情報
チュートリアル:オンプレミス環境への Azure Active Directory のセルフサービス パスワード リセットのライトバックを有効にする Azure AD Connect に対するアカウントのアクセス許可を構成する
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/authentication/tutorial-enable-sspr-writeback#configure-account-permissions-for-azure-ad-connect

Azure AD Connect 同期アカウント (AD DS コネクタ アカウント) の確認 (Azure AD Connect の現在の構成を表示)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6d9a35df-b70b-1037-e39c-c989fde0238e.png)

同期実行アカウントのアクセス許可 (ドメイン ルートの「プロパティ」→「セキュリティ」→「詳細設定」より)
※最低限必要な設定になるので、下記の設定と全く同一にする必要はありません、参考レベルになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/518ab8db-b21a-4752-b444-8aaf983eb33a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/7c80b6e4-83af-496a-dce8-b80fde107c10.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b274f4f4-769b-e84e-9726-977fb2d10777.png)

今回はすでに Azure AD Connect によるパスワード ライトバックの構成と SSPR に必要な多要素認証の設定は完了している前提になります。
まだ構成自体ができていない、やり方が分からないという方は、上述でご紹介したパスワード ライトバックの構成手順と下記 SSPR と多要素認証に関する公開情報を参考に設定をしてみてください。

-参考情報
チュートリアル:Azure Active Directory のセルフサービス パスワード リセットを使用して、ユーザーが自分のアカウントのロック解除またはパスワードのリセットを実行できるようにする
URL:https://docs.microsoft.com/ja-JP/azure/active-directory/authentication/tutorial-enable-sspr

チュートリアル:Azure Multi-Factor Authentication を使用してユーザーのサインイン イベントのセキュリティを確保する
URL:https://docs.microsoft.com/ja-JP/azure/active-directory/authentication/tutorial-enable-azure-mfa

自分が利用している Azure AD テナントで MFA を利用するためにどの機能を使えばいいのか分からない、という方はこちらの Microsoft サポートの公式 Blog がとても参考になりますのであわせてご活用ください。

-参考情報
Azure MFA 導入パターンを網羅的にご紹介！
URL:https://jpazureid.github.io/blog/azure-active-directory/MFA_configuration_scenarios/

#####オンプレミス AD DS のアカウントでロックアウトさせる
オンプレミス AD DS 側のロックアウトのポリシーは以下より確認することができます。

「グループ ポリシーの管理」→「適用対象のグループポリシー選択」→「コンピューターの構成」→「ポリシー」→「Windowsの設定」→ 「セキュリティの設定」→「アカウント ポリシー」→「アカウント ロックアウトのポリシー」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/e5998c05-58bf-0a03-0382-9be01dde7052.png)

上記例では「5回」ログオンに失敗すると「30分間」ロックアウトされ、「30分間」後にカウンターがリセットされログオンできるようになる、という動作です。

この 30 分間のロックアウトを SSPR を利用することでロックアウトを手動で解除できるかどうか確認してみます。
まずは、test001 ユーザーでオンプレミス AD DS に参加している Windows 10 コンピューターへのログオンを 5 回以上間違えてロックアウトを発生させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/08797a38-d55b-6e6e-05ba-287cf3a71ef0.png)

ロックアウトが発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/80089e29-92cf-62d1-ac08-8be7c918463b.png)

オンプレミス AD DS のユーザーとコンピューターより確認すると、以下画面ショットのようにアカウントがロックアウトされていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8474bb7a-4081-2f1e-277d-b2522f9f2fad.png)

また、以下のように PowerShell にて以下コマンドレットを一行で実行するとロックアウトされたアカウントをロックアウトされた時間を確認することができます。
(下記例では 2020/07/12 14:00:23 にロックアウトされたことがわかります)

```powershell
Search-ADAccount -LockedOut | Get-ADUser -Properties lockoutTime | Select @{Name="sAMAccountName";Expression={$_.sAMAccountName.ToUpper()}},@{Name="LockoutTime";Expression={([datetime]::FromFileTime($_.lockoutTime).ToLocalTime())}} | Sort LockoutTime -Descending
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b1690ba0-2a12-422e-8433-06155172adf2.png)

また、簡易的に確認したい場合は「Search-ADAccount -LockedOut」コマンドレットを実行するとロックアウトされているアカウントを確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/07632dd5-64d5-0b61-4e04-a103d6200d97.png)

この状態で SSPR を実行してみます。

ちなみにですが、オンプレミス AD DS 側でロックアウトされても Azure AD 上のアプリケーションには問題なくサインインできます。
つまりオンプレミス AD DS 側のロックアウト ステータスは Azure AD 側には反映されません、もちろん Azure AD 側の「スマート ロックアウト」の機能により複数回 (既定では 10 回) パスワード入力を間違えると Azure AD 側のスマート ロックアウトの機能が動作してアカウントが既定で 「 1 分間」ロックアウトされる動作になります。

SSPR は複数の箇所 (例えばアクセス パネルの「プロファイル」)からリセットができますが、今回は https://aka.ms/sspr  から実行してみます。

リセットを行うユーザー ID と Bot ではないことを証明するために表示されている文字列を入力の上、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/464a681f-7282-8e98-a928-58f67176fd22.png)

SSPR に必要な MFA を行うために登録している携帯電話の情報を入力し、「SMS送信」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/cc9dc7e0-b9ff-b1d9-d341-f60fb3fe7573.png)

携帯電話に通知される 6 桁のコードを入力し「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/250a6c0a-479d-404b-98c5-5943cfebfca9.png)

新しいパスワード入力後に「完了」をクリックします。これで SSPR が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/91c452ec-da02-23ed-c17a-b744ad59c0fd.png)

正常にパスワードがリセットされました。この状態でオンプレミス AD DS 側のアカウントのロックアウトが解除されたかを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/753111cb-53bc-cd65-968a-84e15a807def.png)

オンプレミス AD DS のユーザーとコンピューターを確認すると下記画面ショットのようにロックアウトされている文言が消えています、ロックアウトが解除されていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/84eed33d-1987-b378-f5f6-6cb7b58a5806.png)

同じように PowerShell で 「Search-ADAccount -LockedOut」コマンドレットを実行すると test001 が表示されていないことが確認できます。
※このアカウントは 2020/07/12 14:00:23 にロックアウトされたのでロックアウト期間が 30 分を待つことなしに SSPR によりロックアウトが解除されたことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/57f538a2-2361-7bc0-b60d-e8b6a64bb0d4.png)

念のためイベント ログがどのように出力されているか確認してみます。
アカウント ロック関連も含むユーザー アカウントに関するイベント ID は下記 Microsoft の公開情報にまとめられておりますので、参考にしてみてください。

-参考情報
ユーザー アカウントの管理の監査
URL:https://docs.microsoft.com/ja-jp/previous-versions//mt431869(v=vs.85)?redirectedfrom=MSDN

今回確認したいイベント ID は以下 2 つです。

| イベント ID        | イベント メッセージ|  
|:-----------------|:------------------|
| 4740| ユーザー アカウントがロックアウトされました。 |    
| 4767 |  ユーザー アカウントのロックが解除されました。|  

イベント ビューアーの 「Windows ログ」→「セキュリティ」にて以下画面ショットのようにイベント ID として「4740 と 4767」をフィルター条件として指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ab147405-e5b5-ae32-bf4b-8870cfdf747e.png)

イベント ID 4740 が記録された表示されている時間に対象の test001 ユーザーがロックアウトされていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a201404f-e4be-4614-d9f8-98ed8fb5088b.png)

イベント ID 4767 が記録されロックアウトが解除されていることが分かります。
また、着目すべきポイントとしてこのロックアウトの解除を行ったアカウントが Azure AD Connect の同期実行アカウント (AD DS コネクタ アカウント) である「MSOL_xxxx」アカウントが行っていることが確認できる点です。

つまり、冒頭で触れたパスワード ライトバックを実行する  Azure AD Connect 同期実行アカウント (AD DS コネクタ アカウント) がパスワード ライトバックに必要な ***lockoutTime*** 及び ***pwdLastSet***属性への書き込み権限を利用しロックアウトを解除しているということです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a7e05a9f-054b-6f68-3419-d90aeb84e39c.png)

最後に、パスワード ライトバックを有効化していない場合は下記画面ショットのように SSPR を実行してもオンプレミス AD DS 側のパスワードの変更及びロックアウト解除は失敗します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/25e9b804-3612-7b41-1290-743bc03d965a.png)

「追加の詳細」のリンクをクリックすると、パスワード ライトバックが有効になっていない旨のメッセージが表示されているので、なぜ SSPR できないかの理由も明確に分かります。

#まとめ
今回は Azure AD Connect のパスワード ライトバックが有効化されている環境でオンプレミス AD DS 側のアカウントがロックアウトされた場合に Azure AD の SSPR の機能でアカウント ロックアウトが解除できることを実際に動作確認してみました。

SSPR はパスワードを自分自身で変更できることで冒頭で触れたようにユーザー視点、管理者視点双方において運用コストを削減できる非常に便利なツールです。

今回のようにオンプレミス AD DS 側の環境にログオンする際にパスワードを複数回間違えてしまいロックアウトされた場合にも SSPR を活用することでユーザー自分自身でロックアウトを解除することも可能です。

Azure AD Premium P1 ライセンスがあればパスワード ライトバックは Azure AD Connect サーバー上で構成できますので、今回の記事が本機能活用の参考になれば幸いです。