多要素認証(MFA)
EMQX 5.9.0では、EMQXダッシュボードのセキュリティ強化のために多要素認証(MFA)機能が導入されました。この機能により、ユーザーはログイン時に2段階の認証プロセスを完了する必要があります。このプロセスは、パスワードと時間ベースのワンタイムパスワード(TOTP)を使用してユーザーの本人確認を行い、不正アクセスを防止するための追加のセキュリティ層を提供します。
本ページでは、EMQXダッシュボードにおけるMFAの設定および利用方法について、ユーザーと管理者の両方の視点から説明します。
主要な概念
- MFA:ユーザーのパスワードと、認証アプリで生成されるTOTPなどの第二の認証要素の2種類の本人確認を要求するセキュリティ機能です。
- TOTP:Google AuthenticatorやAuthyなどの認証アプリによって生成される一時的なコードで、アプリとサーバー間で共有された秘密情報に基づいています。
- QRコード:認証アプリのセットアップを簡略化するために、共有秘密情報をグラフィカルに表現したものです。
MFAの動作概要
EMQXダッシュボードでMFAが有効化されると、ログインプロセスに追加のセキュリティ層が加わります。MFAの流れは以下の通りです。
- ユーザーログイン:ダッシュボードにログインする際、まず通常通りユーザー名とパスワードを入力します。
- MFAプロンプト:アカウントにMFAが設定されている場合、認証アプリ(Google AuthenticatorやAuthyなど)で生成された検証コードの入力を求められます。
- 初回セットアップ:MFAを初めて設定する場合は、QRコードをスキャンするか、認証アプリに秘密鍵を手動で入力してセットアップを完了させます。
- 以降のログイン:初回セットアップ後は、ログイン時に認証アプリを開き、生成された時間制限付きのコードを入力してログインを完了します。
MFAの目的は、パスワードが漏洩しても認証アプリのコードがなければログインできないようにし、不正アクセスを防ぐことです。
TIP
アカウントを保護するために、TOTPのセットアップは速やかに完了させることが重要です。
自身または他のユーザーのためにTOTPを有効化した後は、できるだけ早くQRコードをスキャンするか秘密鍵を認証アプリに入力してください。
この手順の遅延は、ログイン情報が漏洩した場合に不正登録のリスクを高める可能性があります。
MFAの有効化と設定
MFAはデフォルトで無効になっています。ユーザーに対してMFAを有効にするには、管理者がシステムをMFA対応に設定し、個別のユーザーに対してセットアップを行う必要があります。MFAの有効化・無効化は、管理者権限を持つユーザーのみが実施可能です。
ダッシュボードの全ユーザーに対してMFAをデフォルトで有効化する
全てのダッシュボードユーザーに対してMFAをデフォルトで有効化するには、管理者が設定ファイルのdashboard.default_mfaを設定します。値はnone(MFA無効)または{mechanism: totp}(TOTPベースのMFA有効)を指定できます。
設定例:
dashboard.default_mfa = {mechanism: totp}EMQXダッシュボードからユーザーごとにMFAを有効化する
管理者はダッシュボードから以下の手順でユーザーごとにMFAを有効化できます。
- ダッシュボードの左メニューから System -> Users をクリックします。
- Users ページでユーザー一覧が表示されます。対象ユーザーの Actions 列にある MFA Settings をクリックします。
- MFA Settings ダイアログで Enable をクリックし、選択したユーザーのMFAを有効化します。
補足
自身のアカウントでダッシュボードからMFAを有効化した場合、同一セッション内で即座にMFAセットアップが求められます(初回セットアップ参照)。
管理者が他のユーザーのMFAを有効化した場合、そのユーザーの次回ログイン時までMFAステップは保留されます。
TOTP秘密鍵のリセット
認証アプリをアンインストールした場合や秘密鍵が漏洩した場合など、ユーザーがTOTPセットアップをリセットする必要がある場合、管理者はMFA Settingsダイアログから対象ユーザーのTOTP秘密鍵をリセットできます。
System -> Users ページで、TOTP秘密鍵をリセットしたいユーザーを探し、そのユーザーの Actions 列の MFA Settings をクリックします。
MFA Settings ダイアログ内にある Reset TOTP Secret Key ボタンをクリックするとリセット処理が開始されます。
確認ダイアログが表示され、秘密鍵をリセットすると以前の鍵が無効になることが通知されます。ユーザーは次回ログイン時に新しいTOTP秘密鍵のセットアップが必要です。
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を有効化できます。
{
"mechanism": "totp"
}特定ユーザーに対してMFAを無効化する
管理者はDELETEリクエストを/users/{username}/mfaに送信することで、特定ユーザーのMFAを無効化できます。
MFAを使用したログイン
ユーザーはアカウントにMFAが有効化された後、以下の手順でEMQXダッシュボードにログインします。
初回セットアップ
MFA有効化後の初回ログイン時に認証アプリのセットアップを行います。
ユーザー名とパスワードの入力
ログインページで通常通りユーザー名とパスワードを入力します。QRコードのスキャンまたはセットアップキーの入力
パスワード認証後、ダッシュボードからQRコードのスキャンまたはセットアップキーの手動入力を求められます。認証アプリにこれらを登録してセットアップを完了させます。認証アプリのコードによる検証
認証アプリが生成する時間制限付きコードを入力し、Confirm をクリックします。
コードは通常30秒程度の有効期限があるため、速やかに入力してください。

以降のログイン
初回セットアップ完了後は、認証アプリを使ってログインします。
ユーザー名とパスワードの入力
以降のログイン時も通常通りユーザー名とパスワードを入力します。TOTPコードの入力
パスワード認証後、認証アプリが生成するTOTPコードの入力を求められます。ログイン成功
入力したコードが有効であれば、ダッシュボードにログインできます。コード不正時
コードが誤っているか期限切れの場合、エラーメッセージが表示されます。この場合は認証アプリの最新コードを再度入力してください。
SSOユーザーに対する強制MFA
EMQX 5.10以降、SSOユーザーに対してもMFAを強制できます。シングルサインオン(SSO)(SAML、OIDC、LDAP)を有効化後、各バックエンドごとにforce_mfaスイッチをオンにすることで、そのバックエンドからのすべてのユーザーに対し、IdP認証に加えてTOTPによる第二要素認証を必須にできます。
これは特にパブリックネットワークに公開されたEMQX環境で重要です。上流のIdPで認証情報が漏洩しても、攻撃者はユーザーの認証デバイスを持っていなければダッシュボードにアクセスできません。
force_mfaは各SSOバックエンド(saml、oidc、ldap)ごとに独立して設定されます。ローカルアカウントには影響しません。各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の設定を参照してください。
設定例:
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のログイン体験を変更しません。
- 通常通り「SSOでログイン」ボタンをクリックします。
- IdPで認証を行います。
- ダッシュボードに戻った後、MFAが適用されていればTOTPコードの入力を求められます。
force_mfaが有効な初回ログイン時は、QRコードのスキャンや秘密鍵の入力による一度限りのTOTPセットアップが案内されます。
セキュリティ注意事項
設計上、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_mfaをfalseにしたまま、Users ページから対象ユーザーごとにMFAを有効化してください。