Password Policy
柔軟なプラグインベースのアーキテクチャを通じて、パスワードのセキュリティ制約と有効期限ポリシーを適用します。
password_policy
インストール
composer require 'drupal/password_policy:^4.0'
composer require 'drupal/password_policy:8.x-3.2'
概要
Password Policyは、サイト管理者が設定可能なポリシーを通じてパスワード要件を定義・適用できる包括的なセキュリティモジュールです。このモジュールはプラグインベースのアーキテクチャを採用しており、パスワード制約(最小文字数、必要な文字種、禁止フレーズなど)はオプションのサブモジュールによって提供されます。
ポリシーはロールベースで設定され、異なるユーザーロールに異なるパスワード要件を設定できます。また、パスワードの有効期限機能も提供しており、パスワードのリセットが必要な時期を自動的に追跡し、期限切れのパスワードを持つユーザーにサイト利用前に更新を強制します。
主な機能には、パスワード入力中のリアルタイム検証フィードバック、期限切れおよび期限切れ間近のパスワードに関するメール通知、履歴追跡によるパスワード再利用の防止、Masqueradeモジュールとの統合によるマスカレードセッション中の強制パスワードリセット回避などがあります。externalauthモジュールを介した外部認証ユーザーは、パスワード検証と有効期限チェックから自動的に除外されます。
Features
- 異なる制約と有効期限設定を持つ複数のパスワードポリシーの作成・管理
- ロールベースのポリシー割り当て - 異なるユーザーロールに異なるポリシーを適用
- 拡張可能なパスワード要件を実現するプラグインベースの制約システム
- パスワード入力中の合格/不合格ステータス表をAJAXでリアルタイム検証
- 日数で設定可能な有効期限による自動パスワード期限切れ
- 強制パスワードリセット機能 - 管理者が特定のロールに対してパスワードリセットを強制可能
- パスワード期限切れと期限切れ予告警告のメール通知
- cronベースの期限切れパスワードの自動検出とマーキング
- 期限切れ後にユーザーがパスワードをリセットできるワンタイムログインリンクの適切な処理
- Masqueradeモジュールのサポート - マスカレード中は強制パスワードリセットをスキップ
- 外部認証ユーザーのパスワードポリシーからの除外
- Drupal 7のpassword_policyモジュールからの移行サポート
Use Cases
エンタープライズセキュリティコンプライアンス
セキュリティ基準(PCI-DSS、HIPAA、SOC2)への準拠が必要な組織は、Password Policyを使用して強力なパスワード要件を適用できます。最小12文字、3種類以上の文字タイプを要求し、過去12個のパスワードの再利用を防ぐパスワード履歴を有効にし、90日の有効期限と期限切れの14日前と7日前のメール警告を設定したポリシーを作成します。
段階的なパスワード要件
異なるユーザータイプを持つサイトは、複数のポリシーを作成できます。例えば、管理者には16文字以上、すべての4種類の文字タイプ、30日間の有効期限を要求する厳格なポリシーを作成し、一般の認証ユーザーには8文字以上で有効期限なしの軽いポリシーを適用します。
緊急セキュリティ対応
セキュリティインシデントやデータ漏洩の後、管理者は強制パスワードリセット機能を使用して、影響を受けたユーザーロールのすべてのパスワードを即座に期限切れにし、次回ログイン時に全員に新しいパスワードの作成を強制できます。
一般的なパスワード攻撃の防止
Password Blacklistサブモジュールを使用して、ユーザーが一般的に侵害されたパスワードを選択することを防ぎます。既知の漏洩パスワードのリストをインポートし、部分文字列の一致を有効にしてバリエーションもブロックします。
急速なパスワード循環の防止
Password HistoryとPassword Delay制約を一緒に有効にします。Historyは最近のパスワードの再利用を防ぎ、Delayはユーザーが履歴チェックを回避するためにパスワードを急速に複数回変更することを防ぎます。
Tips
- ポリシーの「ポリシー表を表示」オプションを有効にすると、ユーザーがパスワードを入力する際に、どの制約が合格または不合格かをリアルタイムで視覚的にフィードバックできます。
- 「期限切れ前の予告メール送信日数」フィールドでカンマ区切りの値を使用すると、複数のリマインダーメールを送信できます(例:「7,3,1」で期限切れの7日前、3日前、1日前にリマインダーを送信)。
- パスワード有効期限チェックはGETリクエストでのみ実行され、AJAXリクエスト、JSON API呼び出し、およびいくつかのシステムルートは通常のサイト操作を妨げないように除外されます。
- パスワードポリシーをテストする際は、検証がユーザーの現在のロールだけでなく、フォームで選択されたロールに対して実行されることを覚えておいてください。ポリシーを持つロールを追加すると検証がトリガーされます。
- パスワード履歴ハッシュは別のデータベーステーブル(password_policy_history)に保存され、多くのユーザーがいるサイトでは大きくなる可能性があります。非常に古いエントリについては定期的なクリーンアップを検討してください。
Technical Details
Admin Pages 4
/admin/config/security/password-policy
設定済みのすべてのパスワードポリシーを一覧表示します。このページから、管理者は既存のポリシーの表示、編集、削除、および新規ポリシーの作成ができます。各ポリシーにはマシン名と編集・削除のための操作リンクが表示されます。
/admin/config/security/password-policy/add
新しいパスワードポリシーを作成するフォームです。ポリシー名、有効期限設定、メール通知の設定を定義します。
/admin/config/security/password-policy/{password_policy}
既存のパスワードポリシーを編集するフォームです。ポリシー設定の変更、制約の追加・削除、ポリシーが適用されるロールの設定ができます。
/admin/config/security/password-policy/reset
特定のロールを持つユーザーに対してパスワードの期限切れを即座に強制する管理フォームです。セキュリティインシデント発生時や新しいパスワードポリシーを適用する際に便利です。
権限 2
Hooks 2
hook_password_policy_show_policy_alter
モジュールがフォームにパスワードポリシーステータス表を表示するかどうかを変更できるようにします。
hook_password_policy_constraints_table_rows_alter
モジュールがパスワード検証中に表示される制約表の行を変更できるようにします。
Troubleshooting 5
モジュールはインストール時にユーザーエンティティにフィールドを追加します。ユーザーがログインする前にcronが実行された場合、パスワードが期限切れとしてマークされている可能性があります。ユーザーがログインした後に再度cronを実行するか、強制パスワードリセット機能を使用して有効期限フラグをリセットするか、ユーザーがワンタイムログインリンクを使用できます。
少なくとも1つの制約サブモジュール(例:password_policy_length)を有効にしていることを確認してください。ベースモジュールはポリシーフレームワークのみを提供し、制約はサブモジュールから提供されます。
externalauthモジュールが正しくインストールされ設定されていることを確認してください。Password Policyは外部認証ユーザーを自動的に検出し、検証から除外します。
ポリシーで「パスワード期限切れ時にメールを送信」チェックボックスが有効になっていることを確認してください。また、サイトのメールシステムが正しく設定されており、cronが定期的に実行されていることを確認してください。
password_policy.settings.ymlのcron_threshold設定を減らしてください。デフォルトはcron実行ごとにポリシーあたり250ユーザーです。メモリ制約のあるサイトではこの値を下げてください。
Security Notes 5
- Password Policyは、History制約が有効な場合、password_policy_historyテーブルにパスワードハッシュを保存します。これらはDrupalのパスワードサービスを使用して適切にハッシュ化されていますが、テーブルは他の機密データと同様に保護する必要があります。
- モジュールは外部認証ユーザーを検証から除外し、外部認証プロバイダーが独自のパスワードポリシーを適用することを信頼しています。
- 「manage password reset」権限を持つ管理者は、任意のユーザーのパスワード有効期限日を変更でき、事実上有効期限要件をバイパスできます。
- パスワードブラックリストは設定に保存され、バージョン管理にエクスポートされる可能性があります。リポジトリに入れるべきでない機密情報をブラックリストに保存することは避けてください。
- パスワード有効期限に関するメール通知にはログインページへのリンクが含まれますが、セキュリティ上の理由からワンタイムログインリンクは含まれません。