Skip to content

多要素認証(MFA)

EMQX 5.9.0では、EMQXダッシュボードのセキュリティ強化のために多要素認証(MFA)機能を導入しました。この機能により、ユーザーはログイン時に2段階の認証プロセスを完了する必要があります。このプロセスは、パスワードと時間ベースのワンタイムパスワード(TOTP)を使用してユーザーの本人確認を行うことで、不正アクセスを防止する追加のセキュリティ層を提供します。

本ページでは、EMQXダッシュボードのMFAの設定および利用方法について、ユーザーと管理者の両方の視点から説明します。

主要な概念

  • MFA:ユーザーのパスワードと、認証アプリで生成されるTOTPなどの第二の認証要素の2種類の本人確認を必要とするセキュリティ機能です。
  • TOTP:Google AuthenticatorやAuthyなどの認証アプリによって生成される一時的なコードで、アプリとサーバー間で共有された秘密情報に基づいています。
  • QRコード:認証アプリでの設定を簡単にするために、共有秘密情報をグラフィカルに表現したコードです。

MFAの仕組み

EMQXダッシュボードでMFAが有効になると、ログインプロセスに追加のセキュリティ層が加わります。MFAの流れは以下の通りです。

  1. ユーザーログイン:ダッシュボードにログインする際、通常通りユーザー名とパスワードを入力します。
  2. MFAプロンプト:アカウントでMFAが有効になっている場合、認証アプリ(Google AuthenticatorやAuthyなど)で生成された検証コードの入力を求められます。
  3. 初回セットアップ:MFAが初めて設定される場合、QRコードをスキャンするか、認証アプリに秘密鍵を手動で入力してセットアップを完了します。
  4. 以降のログイン:初回セットアップ後は、ログインのたびに認証アプリを開き、生成された時間制限付きコードを入力してログインを完了します。

MFAの目的は、パスワードが漏洩しても、認証アプリのコードがなければアカウントにログインできないようにすることです。

TIP

アカウントを保護するために、TOTPのセットアップは速やかに完了させることが重要です。
自身のアカウントまたは他のユーザーのためにTOTPを有効化した後は、できるだけ早くQRコードをスキャンするか秘密鍵を認証アプリに入力してください。
このステップの遅延は、ログイン情報が漏洩した場合に不正な登録リスクを高める可能性があります。

MFAの有効化と設定

MFAはデフォルトで無効になっています。ユーザーに対してMFAを有効にするには、管理者がシステムをMFA対応に設定し、個別のユーザーに対して設定を行う必要があります。MFAの有効化・無効化は管理者権限を持つユーザーのみが行えます。

ダッシュボードの全ユーザーに対してMFAをデフォルトで有効化する

すべてのダッシュボードユーザーに対してMFAをデフォルトで有効にするには、管理者が設定ファイルのdashboard.default_mfaを設定します。値はnone(MFA無効)または{mechanism: totp}(TOTPベースのMFA有効)に設定可能です。

設定例:

bash
dashboard.default_mfa = {mechanism: totp}

EMQXダッシュボードからユーザーに対してMFAを有効化する

管理者はダッシュボードから直接MFAを有効化できます。手順は以下の通りです。

  1. ダッシュボードの左メニューから System -> Users をクリックします。
  2. Users ページでユーザー一覧が表示されます。対象ユーザーの Actions 列にある MFA Settings をクリックします。
  3. MFA Settings ダイアログで Enable をクリックして、選択したユーザーのMFAを有効にします。

注意

自身のアカウントでMFAをダッシュボードから有効にした場合、同じセッション内で即座にMFAセットアップを求められます(初回セットアップ参照)。
管理者が他のユーザーにMFAを有効にした場合、そのユーザーの次回ログイン時までMFAステップは保留されます。

TOTP秘密鍵のリセット

認証アプリをアンインストールした場合や秘密鍵が漏洩した場合など、ユーザーがTOTP設定をリセットする必要がある場合、管理者はMFA SettingsダイアログからTOTP秘密鍵をリセットできます。

  1. System -> Users ページで、TOTP秘密鍵をリセットしたいユーザーを探し、Actions 列の MFA Settings をクリックします。

  2. MFA Settings ダイアログにある Reset TOTP Secret Key ボタンをクリックするとリセット処理が開始されます。

    確認ダイアログが表示され、秘密鍵をリセットすると以前の鍵が無効になることが通知されます。ユーザーは次回ログイン時に新しいTOTP秘密鍵を設定する必要があります。

  3. Confirm をクリックしてリセットを実行します。リセット後、ユーザーは次回ログイン時に初回セットアップと同様の手順(新しいQRコードのスキャンまたは秘密鍵の入力)を行います。

設定ファイルおよびREST APIによるMFAの有効化と管理

管理者は設定ファイルやREST APIを通じてユーザーのMFAを有効化または管理できます。

TIP

/users/{username}/mfa エンドポイントのPOSTおよびDELETEメソッドは、管理者または該当ユーザー本人のみが使用可能です。
つまり、「viewer」ロールのユーザーは他ユーザーのMFA設定を変更できません。現在の認証トークン(ベアラートークン)に紐づくユーザーのみが自身のMFA設定を変更できます。

REST APIのロールベースアクセス制御についてはロールと権限を参照してください。

特定ユーザーに対してMFAを有効化する

管理者は以下のリクエストボディでPOST/users/{username}/mfaエンドポイントに送信して、特定ユーザーのMFAを有効化できます。

json
{
  "mechanism": "totp"
}

特定ユーザーに対してMFAを無効化する

管理者はDELETEリクエストを/users/{username}/mfaエンドポイントに送信して、特定ユーザーのMFAを無効化できます。

MFAを使用したログイン

ユーザーとして、アカウントにMFAが有効化された後は、以下の手順でEMQXダッシュボードにログインします。

初回セットアップ

MFA有効化後の初回ログイン時に認証アプリのセットアップを行います。

  1. ユーザー名とパスワードの入力
    ログインページで通常通りユーザー名とパスワードを入力します。

  2. QRコードのスキャンまたはセットアップキーの入力
    パスワード認証後、ダッシュボードから認証アプリにQRコードをスキャンするか、セットアップキーを手動で入力するよう促されます。

  3. アプリのコードを検証
    認証アプリが今後のログインに使う時間制限付きコードを生成します。アプリのコードを入力し、Confirm をクリックして検証します。

    コードは通常30秒程度の短時間のみ有効なので、素早く入力してください。

mfa_login

以降のログイン

初回セットアップ完了後は、認証アプリを使ってログインします。

  1. ユーザー名とパスワードの入力
    以降のログイン時もユーザー名とパスワードを入力します。
  2. TOTPコードの入力
    パスワード認証後、認証アプリが生成するTOTPコードの入力を求められます。
  3. ログイン成功
    コードが有効であれば、ダッシュボードにログインできます。
  4. コードが無効な場合
    コードが間違っているか期限切れの場合はエラーメッセージが表示されます。その場合は認証アプリの最新コードを再度入力してください。

SSOユーザーに対する強制MFA

EMQX 5.10以降、SSOユーザーに対してもMFAを必須にできます。シングルサインオン(SSO)(SAML、OIDC、LDAP)を有効化した後、各バックエンドごとにforce_mfaスイッチをオンにすることで、そのバックエンドからのすべてのユーザーに対し、IdP認証に加えてTOTPの第二要素認証を要求できます。

これは特にパブリックネットワークに公開されたEMQX環境で重要です。上流のIdPで認証情報が漏洩しても、攻撃者はユーザーの認証デバイスを持っていなければダッシュボードにアクセスできません。

force_mfaは各SSOバックエンド(samloidcldap)ごとに独立して設定されます。ローカルアカウントには影響しません。各SSOユーザーのTOTP秘密鍵はローカルユーザーとは別に管理されます。管理者は任意のSSOユーザーに対してMFAの有効化・無効化・リセットを行えます。MFAが無効なユーザーは、バックエンドでforce_mfa = trueが設定されていてもTOTPを免除されます。これは緊急用管理者アカウントに便利です。

SSOバックエンドに対して強制MFAを有効化する

base.hoconにて、MFAを必須にしたいバックエンドにforce_mfa = trueを追加します。ダッシュボードのSSO設定UIからも設定可能です。詳細はLDAP SSOの設定SAML SSOの設定OIDC SSOの設定を参照してください。

設定例:

hocon
dashboard {
  sso {
    saml {
      enable = true
      force_mfa = true          # すべてのSAMLユーザーはログイン時にTOTPを完了する必要あり
      # ... その他のSAML設定
    }
    oidc {
      enable = true
      force_mfa = false         # 強制しない。ユーザー単位で有効化可能
      # ... その他のOIDC設定
    }
    ldap {
      enable = true
      force_mfa = true
      # ... その他のLDAP設定
    }
  }
}

force_mfaのデフォルト値はfalseで、5.10以前の動作を維持します。

TIP

force_mfaをオンにしても既存のセッションは無効になりません。次回の新規ログイン時に適用されます。

個別SSOユーザーのMFA管理

ダッシュボードの System -> Users にアクセスすると、SSOユーザーはバックエンド名がユーザー名の横に表示されます。Actions 列の MFA Settings ボタンから以下の操作が可能です。

  • MFAを有効化:対応バックエンドでforce_mfaがオフでも、次回ログイン時にTOTP設定を強制します。
  • MFAを無効化:免除ユーザーとしてマークし、バックエンドでforce_mfaがオンでもTOTPをスキップします。緊急用管理者に便利です。
  • TOTP秘密鍵をリセット:現在の秘密鍵をクリアし、次回ログイン時に再セットアップを促します。認証デバイスを紛失した場合に使用します。

MFAを伴うSSOログインフロー

強制MFAはSSOのログイン体験を変更しません。

  1. 通常通り「SSOでログイン」ボタンをクリックします。
  2. IdPで認証します。
  3. ダッシュボードに戻った後、MFA対象ユーザーはTOTPコードの入力を求められます。
  4. force_mfaが有効な初回ログイン時は、一度だけTOTPセットアップ(QRコードスキャンまたはキー入力)が案内されてからダッシュボードにアクセスできます。

セキュリティ注意事項

設計上、TOTP認証に成功するまではダッシュボードのアクセス権限は発行されません。SSOコールバックリンクを傍受してもMFAを回避できません。

FAQ

Q: force_mfaを有効にしたら、すでにログイン中のSSOユーザーはログアウトされますか?
A: いいえ。force_mfaは新規ログイン時のみ適用されます。既存セッションは有効なままです。

Q: 緊急用アカウントのMFAを一時的に無効化するには?
A: System -> Users で対象ユーザーを選び、MFA Settings -> Disable MFA をクリックします。次回ログインまではTOTPがスキップされます。

Q: バックエンド全体ではなく、一部のSSOユーザーだけにMFAを要求できますか?
A: はい。force_mfafalseのままにしておき、対象ユーザーだけをUsersページから個別にMFA有効化してください。