多要素認証(MFA) (Pro)

多要素認証は、ログインに2番目のステップを追加します。パスワードの後、DefectDojoは認証アプリからの6桁のコードを要求します。SSOを利用していないインスタンスでは、すべてのユーザーにこれを必須とすることを強くお勧めします。

DefectDojo ProのMFAは、TOTP認証アプリを使用します — Google Authenticator、1Password、Authy、または標準のQRコードをスキャンできるその他のアプリです。メールやSMSのオプションはありません。

Setting up MFA on your account

  1. Connect > Authorization > MFA Settingsに移動します。
  2. Personal Multi-Factor Authentication Settingsで、Set Up MFAをクリックします。
  3. 認証アプリでQRコードをスキャンします。スキャンできない場合、セットアップ画面にはキーがテキストとしても表示されるため、アプリに手動で入力できます。
  4. アプリに表示された6桁のコードを入力し、Verify & enableをクリックします。
  5. DefectDojoがリカバリーコードを表示します。続行する前に、安全な場所に保存してください — 下記参照。Copy codesをクリックして保存し、I’ve saved them. Continueをクリックします。

これ以降、MFAが有効になります。次回ログイン時には、DefectDojoはパスワードの後にコードを要求します。

Recovery codes

MFAを有効にすると、10個の使い捨てリカバリーコードが発行されます。各コードは、認証アプリのコードの代わりに1回だけ使用でき、使用すると消費されます。

これらは、最後のセットアップ画面で一度だけ表示されます。それ以降、MFA Settingsページには残りの個数のみが表示され、コード自体は表示されません。

リカバリーコードを紛失した場合、またはいくつか使用した後に新しいセットが必要な場合は、MFA SettingsページでRegenerate Recovery Codesをクリックします。これにより、既存のコードはすべて置き換えられます。以前保存したコードは直ちに使用できなくなるため、新しいセットをすぐに保存してください。

リカバリーコードは、電話を紛失した際に再度アクセスできるようにするためのものです。そのため、認証アプリを実行しているデバイスとは別の場所に保管してください。

Turning MFA off

MFA SettingsページのDisable MFAは、自分のアカウントのMFAをオフにします。ログインしているだけでよく、確認のためのコードは求められません。

管理者がMFAを必須に設定している場合、次回ログイン時に再度設定するよう求められます。

Logging in with MFA

ユーザー名とパスワードを入力すると、DefectDojoは6桁のコードを要求します。認証アプリが手元にない場合は、代わりに同じフィールドにリカバリーコードのいずれかを入力してください — そのコードはその時点で使用済みになります。

Requiring MFA for everyone

スーパーユーザーは、インスタンス全体でMFAを必須にすることができます。

  1. Connect > Authorization > MFA Settingsに移動します。
  2. スーパーユーザーのみに表示されるMFA Settingsカードで、Require Multi-Factor Authentication Globallyにチェックを入れます。
  3. 送信します。

これはデフォルトではオフです。

これがオンになると、まだ登録していないユーザーは、次回ログイン時にMFAのセットアップ画面に送られ、スキップすることはできません。登録を完了し、リカバリーコードを保存すると、本来向かっていた画面に移動します。

SSO users

MFAはDefectDojoによって強制されるものであり、IDプロバイダーに委譲されるものではありません。グローバルMFAが必須の場合、SSO経由でサインインするユーザーも、プロバイダーがDefectDojoに戻した後にMFAのセットアップに送られ、以降のログインではコードの入力を求められます。

SSOユーザーを除外する設定はありません。IDプロバイダーが既に独自のMFAを強制している場合は、両方を有効にしたいかどうかを慎重に判断してください — グローバルMFAをオンにすると、SSOユーザーには2回のプロンプトが表示されることになります。

Recovering a user who has lost their MFA device

以下を順番に試してください。

  1. リカバリーコードを使用する。 ユーザーがまだリカバリーコードを持っている場合、ログイン時にアプリのコードの代わりにそれを入力し、MFAを最初から再設定します。

  2. どこかでまだログインしている場合、 MFA Settingsに移動し、コードを必要とせずにDisable MFAをクリックしてから、再登録できます。

  3. 管理者にMFAのクリアを依頼する。 サーバーアクセス権を持つ管理者は、アカウントからMFAを削除できます。

    python manage.py remove_mfa --username <username>

    このコマンドは、--usernameの代わりに--user-idまたは--emailも受け付けます(いずれか1つが必須で、--emailでは大文字と小文字が区別されません)。変更を行う前に確認を求められます。その後、ユーザーはパスワードのみでログインし、再度登録できます。

    これはシェルコマンドであるため、DefectDojoのコンテナまたはホストへのアクセスが必要です。UIに相当するボタンやAPIのエンドポイントはありません。DefectDojo Cloudでは、に連絡して実行を依頼してください。

代替アカウントを作成する必要はありません — MFAをクリアしても、ユーザーの既存の権限、履歴、割り当ては保持されます。

MFA and the API

ユーザーがMFAを有効にしている場合、ユーザー名とパスワードをAPIトークンと交換するエンドポイントである/api/v2/api-token-auth/へのリクエストには、認証情報と共にmfa_codeフィールドにMFAコードも含める必要があります。現在のTOTPコードまたは未使用のリカバリーコードのいずれかが受け付けられます。ここでリカバリーコードを渡すと、それは消費されます

コードが欠落しているか誤っている場合、パスワードが誤っている場合と同じ一般的な*“Unable to log in with provided credentials”*エラーが返されます。そのため、ユーザーがMFAを有効にした後にトークンリクエストが失敗し始めた場合、まずこれを確認してください。

既存のAPIトークンは引き続き機能します。 MFAの有効化または無効化は、既に発行されたトークンを失効させたりローテーションしたりしません — MFAチェックはトークン発行時に適用されるものであり、トークンを使用した各リクエストごとに適用されるものではありません。ユーザーがMFAに登録しても、既にトークンを保持している長期稼働の自動化処理には影響がありません。