Active DirectoryでFine Grained Password Policyを使いパスワード期限切れを回避する最適解

Active Directoryでユーザー管理を行う際、パスワード期限の運用はセキュリティ上の大きなテーマです。特にシステムアカウントや特定のユーザーに対しては、パスワード期限をなくす設定が求められることがあります。そこで活躍するのがFine Grained Password Policyです。ここでは、具体的な設定方法や注意点を詳しく解説します。

目次

Fine Grained Password Policyとは

一般的にActive Directory環境では、ドメイン全体に対してグループポリシー(GPO)によりパスワードの有効期限や複雑性を一括で制御します。しかし、すべてのユーザーアカウントに同じポリシーを適用すると、システムアカウントや特定の管理者アカウントなどでは運用上不都合が生じることも少なくありません。
そこで導入されるのが「Fine Grained Password Policy(FGPP)」です。FGPPを利用すると、ドメインの一部のユーザーやグループに対して、よりきめ細かいパスワードポリシーを適用できます。たとえば「一部のユーザーのみパスワード期限を無効化」「サービスアカウントだけ別の複雑性を適用」など、多様なシナリオに対応しやすくなります。

従来のGPOとの違い

従来のDefault Domain Policyなどを通じたパスワードポリシーは、ドメイン全体に対して一括適用されます。一方、FGPPでは細かい単位でポリシーを作成・適用できるため、以下のような使い分けが可能です。

  • ドメイン全体:一般ユーザー向けに厳格なパスワード期限を設定
  • 限定的なグループ(例:管理者・特定システムアカウント):パスワード期限はなし、ただし複雑性はより高く設定

このように「誰に」「どんなポリシーを適用するか」を柔軟にカスタマイズできるのが最大の利点です。

パスワードを期限切れにしないための設定ポイント

ここからは実際の設定手順や考慮すべきポイントについて、順を追って紹介します。FGPPには主に以下の2つのアプローチがあります。

1. Fine Grained Password Policyオブジェクト(PSO)の設定で期限を無効化

FGPPを適用するためには、ドメイン内に「Password Settings Object(以下PSO)」を作成します。PSOには、パスワードの複雑性や長さ、履歴数、最大有効期限などのパラメータを設定できます。期限を無効にするには、「最大パスワード有効期間(Max Password Age)」の設定を実質的に“なし”にする必要があります。

多くのドキュメントや環境設定ガイドでは「最大パスワード有効期間を0日に設定する」といった方法が紹介される場合がありますが、環境によっては0日を入力できない、あるいはエラーが出るケースがあります。その場合は「Enforce maximum password age(最大パスワード有効期間を適用する)」のチェックを外すやり方が推奨されることもあります。

以下は、PSOを設定する際の代表的な項目を一覧にした表です。実際に適用する数値は運用ポリシーに合わせて調整してください。

項目説明
msDS-MinimumPasswordLengthパスワードの最小文字数(例:16文字以上)
msDS-PasswordComplexityEnabledパスワードの複雑性を有効化するか(true/false)
msDS-PasswordHistoryLength過去何回分のパスワードを再利用不可にするか(例:24回)
msDS-MaximumPasswordAge最大パスワード有効期間を指定(0日を指定できない場合はチェックを外す)
msDS-MinimumPasswordAge最小パスワード有効期間(例:1日など)

ADSI EditによるPSO作成例

パスワードポリシーを直接作り込む場合、Windowsサーバー上で「ADSI Edit」を使ってPSOを新規作成します。以下は一例です。

; PSOを作成する例(手動での例示)
dn: CN=PSO_NoExpire, CN=Password Settings Container, CN=System, DC=example,DC=com
changetype: add
objectClass: msDS-PasswordSettings
msDS-PasswordSettingsPrecedence: 10
msDS-PasswordComplexityEnabled: TRUE
msDS-MinimumPasswordLength: 16
msDS-PasswordHistoryLength: 24
msDS-MaximumPasswordAge: -9223372036854775808
; 上記の -9223372036854775808 は無制限を意味(理論上0日扱い)
msDS-MinimumPasswordAge: 1:00:00:00
msDS-PasswordReversibleEncryptionEnabled: FALSE
msDS-LockoutThreshold: 0
msDS-LockoutObservationWindow: 0:00:30:00
msDS-LockoutDuration: 0:00:30:00
msDS-PSOAppliesTo: CN=ユーザー名,OU=部署名,DC=example,DC=com
description: パスワード期限を実質無効化したPSO

この例では、msDS-MaximumPasswordAgeを特定の数値(-9223372036854775808)に設定することで、無期限扱いにしています。ただし環境によってはGUIで“チェックを外す”などの簡易方法が用意されているため、必ずしもこの数値を直接設定する必要があるわけではありません。また、GUIツール(Active Directory管理センター)を使ってPSOを作成・編集できる場合もありますので、管理しやすい方法を選択してください。

2. ユーザー単位で「Password never expires」を有効化

FGPPはグループや特定ユーザーに対する柔軟な運用を可能にしますが、「どうしても1ユーザーだけパスワード期限を切らしたくない」というケースでは、Active Directory Users and Computers(ADUC)にてユーザーアカウントの「Password never expires(パスワードを無期限にする)」を有効にする方法もあります。

  • ADUCを起動し、該当ユーザーのプロパティを開く
  • 「アカウント」タブを選択
  • 「パスワードを無期限にする(Password never expires)」をチェック

この方法は非常にシンプルかつ即効性がある反面、管理者権限がないと操作できないほか、大量のユーザーに適用するには手間がかかります。サービスアカウントや退職済ユーザーの一部など、限定的な運用に留めるケースが多いでしょう。

実運用でのポイントと注意事項

パスワード期限を無効化するというのは運用上かなり便利ですが、その一方でセキュリティリスクが高まるおそれもあります。無期限であればユーザーは定期的にパスワードを変更しなくなるため、漏えいや総当たり攻撃への対策が弱くなる可能性があるのです。以下のポイントを踏まえて慎重に運用しましょう。

複雑性を強化する

パスワードを定期変更しない場合、第三者に推測されにくいパスワードを使い続けることが必須です。特にFGPPで期限切れを無効化するのであれば、

  • 16文字以上
  • 大文字・小文字・数字・記号を混在
  • 連続した文字列や辞書に載る単語を避ける
    などの複雑性ルールを徹底する必要があります。

パスワード履歴の設定

パスワード履歴(Enforce password history)は、パスワード使い回しを防止するための機能です。期限切れを設定しない場合でも、万一パスワードを変更する際に過去のものに戻してしまわないよう、履歴管理の値を大きめに設定することを推奨します(例:24回分など)。

例外ユーザーの管理とグループ化

「期限なしにしたいユーザー」が複数存在する場合は、グローバルセキュリティグループを作成してそれらをまとめたうえで、FGPPをそのグループに対して適用するのが望ましいです。ユーザーを追加・削除するだけでポリシーを動的に適用できるため、管理負荷を大幅に削減できます。

サービスアカウントの扱い

システム内部で動作するサービスアカウントは、しばしばパスワード期限切れが起きるとサービス障害につながることがあります。そのため、無期限設定が必須になるケースは多いでしょう。
ただし「パスワード変更によるサービス停止リスクがあるから」という理由だけで全サービスアカウントを無期限にしてしまうのはセキュリティ上の懸念が強まります。定期的なレビューや監査を入れて、使用していないアカウントは無効化するなどの対応を行いましょう。

ポリシー変更後の反映

FGPPでポリシーを作成・変更したら、グループポリシーと同様に反映が必要です。以下のような方法が一般的です。

  • コマンドプロンプトまたはPowerShellでgpupdate /forceを実行
  • あるいは時間経過により自動的に反映されるのを待つ(通常90分~数時間)

ただし、FGPPはドメインコントローラーのための機能であり、GPOのようにクライアントに適用されるものではありません。ポリシーオブジェクトが有効になっているかは、ADSI EditやActive Directory管理センターで確認可能です。

最大パスワード有効期間と「0日」設定の実態

FGPPの最大パスワード有効期間(MaximumPasswordAge)を無期限にする場合、「0日に設定する」「チェックを外す」「特殊な値をセットする」など複数の方法が紹介されることがあります。実際の挙動は以下のように整理できます。

GUI操作でチェックボックスがある場合

Active Directory管理センター(Windows Server 2012以降)などでは、「Enforce maximum password age(最大パスワード有効期間を適用する)」というチェックボックスをオフにするだけで無期限を実現できます。このほうが簡単かつエラーが少ないため、推奨されることが多いです。

0日を入力しても反映されないケース

環境によっては、0日を入力して保存しようとするとエラーが表示される、もしくは1日に丸められるなどの挙動が起こりえます。こうした場合、-9223372036854775808を直接指定するか、GUI操作で「Enforce maximum password age」のチェックを外すといった対応が必要です。

既存ポリシーとの競合を確認

Default Domain Policyなど、既にドメイン全体に適用されているパスワードポリシーが存在する状態でFGPPを設定する場合、どちらのポリシーが優先されるかを確認しましょう。通常、FGPPで指定したポリシーが対象ユーザーやグループに対して優先されます。
一方で、ドメインポリシー側で「パスワードは90日で変更」となっていてFGPPで「期限なし」としても、「なぜか90日後に変更を求められる」という状況が発生するケースがあります。これはユーザーやグループの関連付けが正しく設定されていなかったり、PSOの優先度(msDS-PasswordSettingsPrecedence)の値が競合している可能性があるので、設定を確認してください。

運用とセキュリティのバランスを保つコツ

パスワード期限を切らさずに運用するときは、以下のような点を意識し、セキュリティとのバランスを保ちましょう。

定期監査とログのチェック

期限が切れないアカウントは長期間同じパスワードで運用されるため、悪用されても気づきにくいリスクがあります。定期的に以下を監査する体制を作ると安心です。

  • ログオン履歴
  • アカウントロックアウト状況
  • アクセス権限の見直し

アカウントの棚卸し

無期限設定のアカウントが増えすぎると、脆弱性が高まります。特に退職者アカウントや一時的なプロジェクト用アカウントが放置されていないか、定期的に棚卸しを行いましょう。無駄なアカウントを無効化するだけでも、セキュリティは大きく向上します。

パスワード以外の認証手段検討

近年では多要素認証(MFA)の利用が推奨されています。パスワード自体を無期限にしても、MFAを導入していれば不正アクセスを防ぐハードルが格段に上がるでしょう。
パスワードポリシーに頼りきるのではなく、MFAやスマートカード認証、パスワードレス認証などの導入も検討することで、より強固なセキュリティを実現できます。

具体的な手順例:Active Directory管理センターを使う場合

もしGUIツールであるActive Directory管理センターを利用できる環境ならば、以下の手順で設定できます。

  1. Active Directory管理センターを起動し、左ペインからドメインを展開
  2. 「システム」→「Password Settings Container」を選択
  3. 右クリックして「新規」→「Password Settings…」を選択
  4. 「Password Settings Name」に任意の名前を入力し、「Enforce maximum password age」のチェックを外す
  5. 他のオプション(パスワードの最小長や複雑性など)を設定
  6. 「Users or Groups」で対象とするユーザーやグループを追加
  7. 「OK」をクリックして保存

この操作を行うことで、新たに作成されたPSOが対象ユーザーやグループに適用され、パスワード期限切れが無効化されます。

PowerShellで確認する方法

FGPPの適用状況を確認するには、PowerShellを用いる方法が分かりやすいです。Windows ServerのActive Directoryモジュールをインストールしたうえで、以下のようなコマンドを実行します。

Import-Module ActiveDirectory

# PSO一覧を表示
Get-ADFineGrainedPasswordPolicy -Filter *

# 特定のPSOを表示
Get-ADFineGrainedPasswordPolicy -Identity "PSO_NoExpire"

表示されたオブジェクトの中にMaxPasswordAgeがどのように設定されているかをチェックすることで、実際に期限なし(無制限)設定が反映されているか確認できます。

まとめ: バランスの取れたパスワードポリシーを構築しよう

Fine Grained Password Policyは、Active Directoryを運用するうえで非常に柔軟かつ強力な機能です。パスワード期限をなくす設定は一見すると手間を省けて便利ですが、同時にセキュリティリスクも伴います。複雑性や履歴管理などの設定をしっかり行い、定期的な監査や棚卸しを実施することで、利便性とセキュリティを両立できる運用を目指しましょう。
システムアカウントや管理者アカウントなど、期限切れによって業務が止まる可能性があるケースに対しては、FGPPを用いたパスワード期限無効化が有効です。一方、全ユーザーに一律で無期限を適用するのはリスクが大きいため、対象をよく吟味し、グループ化やユーザー個別設定によって最適な仕組みを作り上げてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次