🐚

Azure ADユーザーにパスワード変更を強制させる

2021/03/20に公開

はじめに

Azureポータル上ではパスワードのリセットは可能ですが、次回サインイン時にパスワードの変更を強制させるボタンが見当たりませんので、PowerShellで設定したいと思いました。

環境

> $PSVersionTable.PSVersion


Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  868


> Get-InstalledModule -Name AzureADPreview


Version              Name                                Repository           Description
-------              ----                                ----------           -----------
2.0.2.129            AzureADPreview                      PSGallery            Azure Active Directory V2 Preview Module. ...

注意点

使用するモジュールについて

詳しくはよくわかりませんが、(将来改善されるかもしれない)
AzureADモジュール、AzureADPreviewモジュールはPowerShell 7以降ではConnect-AzureADコマンドが動作しないようなのでPowerShell 5.1で実行する必要があります。

スクリプトを実行するユーザーのロールについて

少なくともユーザー情報を更新することが可能なロールを割り当てられたユーザーとして実行する必要があります。
私は検証環境でグローバル管理者を持ったユーザーから実行していますが、実際の現場では割り当てられたロールに注意をする必要があります。

スクリプト

スクリプト自体はとてもシンプルで、
ユーザーのPasswordProfile.ForceChangePasswordNextLogin$trueを代入するだけです。

Connect-AzureAD -TenantId <TenantId>

$PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$PasswordProfile.ForceChangePasswordNextLogin = $true

Set-AzureADUser -ObjectId <UPN> -PasswordProfile $PasswordProfile

ユーザーのプロパティを確認する

スクリプト実行前のプロパティ

PasswordProfile$nullになっています。

> (Get-AzureADUser -ObjectId <UPN>).PasswordProfile -eq $null                  

True

スクリプト実行後のプロパティ

PasswordProfileにコマンドで作成したオブジェクトが代入されています。
PasswordProfile.ForceChangePasswordNextLogin$trueになっていれば成功です。

> (Get-AzureADUser -ObjectId <UPN>).PasswordProfile


Password ForceChangePasswordNextLogin EnforceChangePasswordPolicy
-------- ---------------------------- ---------------------------
                                 True                       False

ユーザー視点

これまでのパスワードを入力し、サインインすると。。

パスワードの更新画面が表示されますね。成功です。

おわりに

パスワード変更を強制する場面は新規でユーザーを作成した際に多いと思いますが、
Microsoftは気が利いているのでAzureポータルで新規に作成したユーザーは規定でPasswordProfile.ForceChangePasswordNextLogin$trueになっています。

また、セキュリティ的に危険なコンディションでのサインイン試行時にパスワード変更を強制したい場合、AzureADの条件付きアクセスポリシーで制御する方が良いと思われます。

なので実際のところこのスクリプトを実行する場面は限られると思いますが私の現場では必要になりましたので備忘録としてまとめました。

Discussion