二要素認証 (TFA)
ログイン時に追加の認証ステップを要求することでアカウントセキュリティを強化する、Drupal向けのプラグイン可能な二要素認証プロバイダー。
tfa
インストール
composer require 'drupal/tfa:8.x-1.12'
概要
Two-factor Authentication (TFA) モジュールは、ユーザーアカウントに追加の保護層を加える Drupal 向けの包括的なセキュリティ強化モジュールです。様々な二要素認証ソリューションをシームレスに統合できる、柔軟で十分にテストされたインターフェースを提供します。
このモジュールは、時間ベースのワンタイムパスワード(TOTP)、HMACベースのワンタイムパスワード(HOTP)、リカバリーコード、信頼済みブラウザ機能など、複数の認証方式をサポートしています。TFA はプラグインベースのアーキテクチャを採用しており、追加モジュールによる拡張が容易です。
すべての機密データは Encrypt モジュールを使用して暗号化され、認証シークレットの安全な保存が保証されます。このモジュールには、ブルートフォース攻撃に対するフラッドコントロール保護、TFA の有効化/無効化時のメール通知、管理者がどのユーザーが TFA を有効にしているかを確認できる Views との統合が含まれています。
Features
- Google Authenticator、Microsoft Authenticator、Authy、FreeOTP などのアプリをサポートする TOTP(時間ベースのワンタイムパスワード)検証
- カウンターベースのコードを使用した HOTP(HMACベースのワンタイムパスワード)検証
- プライマリ認証デバイスが利用できない場合のアカウント復旧のためのリカバリーコード生成
- 設定可能な期間、信頼済みデバイスで TFA 検証をスキップする信頼済みブラウザ機能
- コントリビュートモジュールやカスタムモジュールによるカスタム TFA メソッドを可能にするプラグインベースのアーキテクチャ
- ブルートフォース攻撃を防ぐために失敗した検証試行を制限するフラッドコントロール保護
- ユーザーがアカウントで TFA を有効化または無効化した際に送信されるメール通知
- 管理者リストでユーザーの TFA ステータスを表示する Views フィールド統合
- 特定のユーザーロールに TFA の設定を強制するロールごとの TFA 要件
- TFA セットアップを要求する前に、ユーザーが限られた回数ログインできるスキップ検証機能
- 認証アプリの簡単なセットアップのための QR コード生成
- ユーザーの TFA データのリセットとデータベースのサニタイズのための Drush コマンド
- ヘッドレスアプリケーションでの TFA 検証のための REST API サポート
Use Cases
管理者アカウントの保護
管理者ロールを持つすべてのユーザーにサイトへのアクセス前に TFA のセットアップを要求します。/admin/config/people/tfa で TFA を設定し、「TFA セットアップが必要なロール」で管理者ロールを選択し、管理者が「setup own tfa」権限を持っていることを確認します。管理者は次回ログイン時に TFA の設定を促されます。
一般ユーザーのオプション TFA
ユーザーが TFA を必須にせずにオプションで有効化できるようにします。認証済みロールに「setup own tfa」権限を付与します。ユーザーはアカウントの TFA タブ(/user/{uid}/security/tfa)にアクセスして、任意で TOTP 認証またはリカバリーコードをセットアップできます。
TFA を使用したヘッドレス/デカップルド認証
デカップルド Drupal アーキテクチャで REST API 認証と共に TFA を使用します。モジュールは、検証プラグインが validateRequest() メソッドを実装することで REST を通じた認証をサポートします。必要に応じて tfa.services.yml パラメーターで免除される認証プロバイダーを設定します。
認証デバイス紛失からの復旧
認証アプリへのアクセスを失ったユーザーは、リカバリーコードを使用してログインできます。TFA 設定でリカバリーコード検証プラグインが有効になっていることを確認します。ユーザーはデバイスへのアクセスを失う前に、TFA 概要ページからリカバリーコードを生成して安全に保存する必要があります。
頻繁に利用するユーザーのための信頼済みデバイス
同じデバイスから頻繁にログインするユーザーの手間を軽減します。TFA 設定で信頼済みブラウザログインプラグインを有効にします。ユーザーは TFA 検証中にブラウザを信頼済みとしてマークでき、設定された期間(デフォルト30日)は以降の TFA チェックをスキップできます。
他のユーザーの TFA 管理
ヘルプデスクスタッフがロックアウトされたユーザーの TFA をリセットできるようにします。適切なロールに「administer tfa for other users」権限を付与します。スタッフは任意のユーザーの TFA ページにアクセスして、スキップ検証試行をリセットしたり、TFA を完全に無効化したりできます。
Tips
- 認証アプリのみに頼る前に、必ずリカバリーコードを生成して安全に保存してください
- 「validation_skip」設定は慎重に使用してください - 低すぎると即座の TFA セットアップが強制され、高すぎるとセキュリティ上のメリットが減少します
- 共有コンピューターでのセキュリティを維持しながら、個人デバイスのユーザーの手間を軽減するために信頼済みブラウザプラグインの有効化を検討してください
- ロックアウトのシナリオを避けるために、管理者ロールに TFA を有効にする前に TFA 設定を徹底的にテストしてください
- 暗号化キーを安全に保ち、バックアップを取ってください - 失うとすべての保存された TFA シークレットが復元不能になります
- TFA 採用状況を簡単に監視するために、Views 統合を使用してユーザー管理ページに TFA ステータス列を追加してください
Technical Details
Admin Pages 5
/admin/config/people/tfa
二要素認証のメイン設定ページ。利用可能な検証方法の設定、デフォルトの検証プラグインの選択、暗号化の設定、フラッドコントロールの設定、およびメール通知のカスタマイズを行います。
/user/{user}/security/tfa
ユーザーアカウントの TFA 概要ページ。現在の TFA ステータス、設定済みの検証方法、ログインプラグイン、およびスキップ検証カウンターを表示します。ユーザーはこのページから TFA 設定を管理できます。
/user/{user}/security/tfa/{method}
特定の TFA 検証方法を設定するためのセットアップフォーム。フォームの内容はプラグインによって異なります - TOTP/HOTP は QR コードとシードを表示し、リカバリーコードは生成されたコードを表示し、信頼済みブラウザはブラウザ管理を表示します。
/user/{user}/security/tfa/disable
ユーザーアカウントの TFA を無効化するための確認フォーム。セキュリティのためにパスワード確認が必要です。
/tfa/{uid}/{hash}
ユーザー名/パスワード認証後に表示される TFA 入力フォーム。ユーザーは認証アプリまたはリカバリーコードから確認コードを入力します。
権限 4
Hooks 1
hook_tfa_info_alter
TFA プラグイン定義を変更します。モジュールが TFA プラグインマネージャーによって検出されたプラグイン定義を変更できるようにします。
Drush Commands 2
drush tfa:reset-user
単一ユーザーの TFA データをリセットし、すべての設定済み検証方法を削除して、TFA を再セットアップできるようにします。
drush sql-sanitize
TFA は Drush の sql-sanitize コマンドと統合して、データベースのサニタイズ中にすべての TFA ユーザーデータを削除します。
Troubleshooting 6
「administer tfa for other users」権限を持つ管理者は、ユーザーの TFA 概要ページからスキップ検証試行をリセットするか、ユーザーの TFA を完全に無効化できます。あるいは、Drush を使用します:drush tfa:reset-user --name=username
ユーザーはスキャンする代わりに、表示されたシード/シークレットキーを認証アプリに手動で入力できます。QR コードが十分なサイズとコントラストで表示されていることを確認します。シードは QR コードの上にテキストフィールドとして表示されます。
TOTP コードは時間に敏感です。サーバー時刻が正確で NTP と同期されていることを確認します。time_skew 設定が十分な許容範囲を許可しているか確認します。ユーザーのデバイス時刻も正確であることを確認します。「許容コード数」設定を増やすことを検討してください。
TFA を設定する前に、Encrypt モジュールで暗号化プロファイルを設定する必要があります。Key モジュールをインストールして暗号化キーを設定し、/admin/config/system/encryption で暗号化プロファイルを作成します。
enabled 設定を false に設定してテスト中は TFA を無効にします:drush config-set tfa.settings enabled 0。テスト後に再度有効にします:drush config-set tfa.settings enabled 1
Drupal のメールシステムが正しく設定されていることを確認します。TFA 設定のメールテンプレートに有効な件名と本文が含まれているか確認します。メール送信エラーについて最近のログメッセージを確認します。
Security Notes 7
- TFA シークレットは設定された Encrypt プロファイルを使用して暗号化されます - 暗号化キーが適切に保護され、Web リクエストからアクセスできないことを確認してください
- フラッドコントロールは TFA コードへのブルートフォース攻撃から保護します - セキュリティへの影響を理解せずに、しきい値を無効にしたり大幅に増やしたりしないでください
- 信頼済みブラウザ機能は XSS 攻撃で盗まれる可能性のある Cookie を使用します - サイトに適切な XSS 保護があることを確認してください
- リカバリーコードはワンタイム使用であり、パスワードと同じセキュリティで扱う必要があります
- サービス拒否攻撃に関する特定の懸念がない限り、UID のみのフラッドコントロール(より安全)の使用を検討してください
- 暗号化キーの定期的なローテーションが推奨されます - これにはすべてのユーザーの TFA をリセットする必要があることに注意してください
- TFA イベントログは記録され、異常なアクティビティパターンを監視する必要があります