はじめに
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の条件付きアクセスポリシーで制御する方が良いと思われます。
なので実際のところこのスクリプトを実行する場面は限られると思いますが私の現場では必要になりましたので備忘録としてまとめました。