今回は、Active Directory(AD)のセキュリティ管理において極めて重要なパスワードポリシーの確認・変更方法について、実務レベルの詳細解説をお伝えします。ADのパスワードポリシーは、組織全体のセキュリティ基盤を左右する重要な設定です。複雑な要件や規制対応によって、段階的にポリシーの強化が必要になることがほとんどです。
特にWindows Server 2008 R2以降で導入されたFine-Grained Password Policy(FGPP)を活用すれば、ユーザーやグループ単位で異なるパスワード要件を適用できます。本記事では、従来のドメインレベルポリシーからFGPPまで、設定確認・変更・運用のポイントを実務的に解説します。
パスワードポリシーの基本概念と構成
ADのパスワードポリシーは、ドメイン全体に適用される標準ポリシーと、特定のユーザー・グループに適用されるFGPPの2層構造になっています。
標準ポリシーの主要設定項目は以下の通りです:
- パスワード最小文字数:通常8文字以上
- パスワード最大有効期限:通常42日~90日
- パスワード履歴:過去N個のパスワードを重複使用禁止(通常5~12個)
- アカウントロックアウトの閾値:複数回の失敗でロック(通常3~5回)
- アカウントロックアウトの期間:ロック状態の継続時間(通常15~30分)
- ロックアウト設定の再試行時間:(通常1分)
これらの設定は、組織のセキュリティ要件と利便性のバランスを取りながら決定する必要があります。実務では、セキュリティ部門と運用部門で何度も調整会議を重ねることが一般的です。
ADでのドメインレベルポリシー確認方法
ドメインレベルの標準パスワードポリシーは、複数の方法で確認できます。
方法1:gpresultコマンドでの確認(推奨)
ドメインコントローラー上で以下のコマンドを実行すれば、現在適用されているポリシーを一覧で確認できます。
powershell
# Domain Password Policy の確認
Get-ADDefaultDomainPasswordPolicy
このコマンドで得られる情報は以下の通りです:
powershell
ComplexityEnabled : True
DistinguishedName : CN=Default Domain Password Policy,CN=Password Settings Container,CN=System,DC=example,DC=com
LockoutDuration : 00:30:00
LockoutObservationWindow : 00:01:00
LockoutThreshold : 5
MaxPasswordAge : 42.00:00:00
MinPasswordAge : 1.00:00:00
MinPasswordLength : 12
PasswordHistoryCount : 12
ReversibleEncryptionEnabled : False
方法2:Active Directory Users and Computers(ADUC)での確認
GUIで直感的に確認する場合は、ADUCを利用します。ドメインコントローラーを右クリック → 「プロパティ」→ 「Group Policy」タブで、デフォルトドメインポリシーを編集します。設定項目は以下の場所にあります:
コンピューターの構成 > ポリシー > Windows 設定 > セキュリティ設定 > アカウント ポリシー > パスワード ポリシー
実務では、グループポリシーエディタ(gpedit.msc)での変更は推奨されません。理由としては、複数のドメインコントローラーがある場合、レプリケーション遅延によって設定が一時的に不一致になるためです。
Fine-Grained Password Policy(FGPP)とは
FGPP(Fine-Grained Password Policy)は、Windows Server 2008 R2以降で導入された機能で、ユーザーやセキュリティグループごとに異なるパスワード要件を適用できます。
FGPP導入以前は、ドメイン全体で統一されたポリシーのみ適用できました。しかし、以下のようなシーンでFGPPが活躍します:
- 管理者ユーザーに対して、より厳しいパスワード要件を適用(最小14文字、有効期限30日など)
- 定型業務用のサービスアカウントに対して、パスワード有効期限を無期限に設定
- 外部連携用のゲストユーザーに対して、複雑性要件を緩和
FGPPは、Active DirectoryのPassword Settings Container(PSC)に保存される独立したオブジェクトです。従来のドメインポリシーとは異なるため、グループポリシーエディタからは見えません。
FGPPの設定・適用・優先順位
FGPPを新規作成する場合、PowerShellを用いた操作が最も効率的です。
FGPP作成のテンプレート
powershell
# FGPP作成:管理者用(厳しいポリシー)
New-ADFineGrainedPasswordPolicy -Name "AdminsFGPP" `
-ComplexityEnabled $true `
-LockoutDuration (New-TimeSpan -Minutes 30) `
-LockoutObservationWindow (New-TimeSpan -Minutes 1) `
-LockoutThreshold 3 `
-MaxPasswordAge (New-TimeSpan -Days 30) `
-MinPasswordAge (New-TimeSpan -Days 1) `
-MinPasswordLength 14 `
-PasswordHistoryCount 12 `
-Precedence 10
# FGPP作成:サービスアカウント用(有効期限なし)
New-ADFineGrainedPasswordPolicy -Name "ServiceAccountsFGPP" `
-ComplexityEnabled $false `
-LockoutDuration (New-TimeSpan -Minutes 30) `
-LockoutThreshold 5 `
-MaxPasswordAge (New-TimeSpan -Days 0) `
-MinPasswordLength 16 `
-PasswordHistoryCount 5 `
-Precedence 20
FGPPの適用
作成したFGPPをユーザーまたはグループに適用するには、以下のコマンドを使用します。
powershell
# ユーザーに適用
Add-ADFineGrainedPasswordPolicySubject -Identity "AdminsFGPP" `
-Subject (Get-ADUser -Identity "Administrator")
# グループに適用
Add-ADFineGrainedPasswordPolicySubject -Identity "AdminsFGPP" `
-Subject (Get-ADGroup -Identity "Domain Admins")
優先順位の仕組み
複数のFGPPがあり、ユーザーが複数のグループに属する場合、どのポリシーが適用されるかはPrecedence値の小さい順で決定されます。例えば、AdminsFGPP(Precedence 10)と ServiceAccountsFGPP(Precedence 20)が両方適用される場合は、AdminsFGPPが優先されます。
実務でのハマりポイントとしては、グループのメンバーシップが複数ある場合、意図しないポリシーが適用される可能性があることです。設定後は必ず、以下のコマンドで実際の適用ポリシーを確認してください:
powershell
# ユーザーに適用されているFGPPを確認
Get-ADUserResultantPasswordPolicy -Identity "Username"
パスワードポリシーの変更時の注意点
パスワードポリシーを変更する際は、以下の点に注意が必要です。
段階的な展開
新しいバリシーを全体に適用する前に、テストグループで検証することをお勧めします。理由としては、ポリシー変更によって既存ユーザーのパスワード有効期限が再計算される可能性があるためです。例えば、有効期限を90日から42日に短縮した場合、直前に変更したパスワードもすぐに期限切れになる可能性があります。
アナウンスと準備期間
ポリシー変更を実施する際は、対象ユーザーに事前にアナウンスし、準備期間を設けることが重要です。特に以下の項目は、ユーザー側で対応が必要です:
- パスワード最小文字数の増加:より複雑なパスワードを準備する必要
- アカウントロックアウト閾値の引き下げ:typoが多いユーザーはロックされやすくなる可能性
- パスワード複雑性要件の追加:大文字・数字・特殊文字の含有が必須になる
ユーザーの緊急アクセス確保
ポリシー変更後、パスワード変更に失敗したユーザーがロックアウトされる可能性があります。このため、ヘルプデスク部門が緊急時にアカウントをアンロック・パスワードリセットできる体制を整えておくことが必須です。
パスワード有効期限の管理・更新
パスワード有効期限通知の自動化
ユーザーが期限切れ直前でパスワード変更忘れを防ぐため、事前通知メールを自動送信することが一般的です。これは、Expires Soon管理ツールや、PowerShellスクリプトで実装できます。
powershell
# パスワード有効期限が14日以内のユーザーを検出
$expiryDate = (Get-Date).AddDays(14)
$users = Get-ADUser -Filter {Enabled -eq $true} -Properties msDS-UserPasswordExpiryTimeComputed
foreach ($user in $users) {
$expiryTime = [datetime]::FromFileTime($user.'msDS-UserPasswordExpiryTimeComputed')
if ($expiryTime -le $expiryDate) {
Write-Host "$($user.SamAccountName): $expiryTime"
}
}
このスクリプトを定期的(1日1回)実行し、該当ユーザーにメール通知を送信することで、パスワード有効期限切れによるロックアウトを大幅に削減できます。
ドメイン参加マシンでのパスワード有効期限通知
Windows 10 / 11では、ログイン時にパスワード有効期限切れの警告メッセージが表示されます。ただし、警告が表示されるタイミングは、ドメインコントローラーのキャッシュ情報に基づくため、実際の期限とズレが生じることがあります。このズレを最小化するため、以下のグループポリシー設定を推奨します:
コンピューターの構成 > ポリシー > 管理用テンプレート > System > Logon
設定項目: パスワード有効期限の事前通知を表示
値: 14日
トラブルシューティング
「パスワードの複雑性要件を満たしていない」というエラー
ユーザーがパスワード変更時にこのエラーが表示される場合、以下を確認してください:
- 大文字・小文字・数字・特殊文字をすべて含むか
- ユーザー名やログイン名を含んでいないか
- ADのパスワード複雑性チェッカー(passfilt.dll)が正常に動作しているか
複雑性チェッカーの動作確認は、以下のコマンドで実施できます:
powershell
Get-ADDefaultDomainPasswordPolicy | Select ComplexityEnabled
FGPPの優先順位が想定と異なる場合
powershell
# 全FGPPを優先順位順に表示
Get-ADFineGrainedPasswordPolicy -Filter * | Sort-Object Precedence | Format-Table Name,Precedence
アカウントロックアウトの頻発
ロックアウト発生の原因を特定するには、ドメインコントローラーのセキュリティイベントログを確認します。
powershell
Get-WinEvent -FilterHashtable @{LogName="Security"; ID=644} -MaxEvents 100 | Format-Table TimeCreated,Message
ID 644(ロックアウト)、ID 4740(アカウントロックアウト検出)などが表示されます。
まとめ
ADのパスワードポリシーは、組織全体のセキュリティを左右する重要な設定です。従来のドメインレベルポリシーに加えて、FGPPを活用すれば、より柔軟で実務的なセキュリティ運用が可能になります。ポリシー変更時は、段階的な展開と入念な準備が成功のカギです。
本記事で解説したコマンドやポイントを参考に、自組織のセキュリティ要件に応じたパスワードポリシーを設計・運用してください。定期的にポリシーの有効性を検証し、必要に応じて調整することで、バランスの取れたセキュリティ環境が実現できます。
