認証方式とローカルアカウント
mado ML Trackingのログイン方法は、API serverの環境変数AUTH_MODEで選びます。Authentik(SSO)だけ、ローカルアカウントだけ、両方の3つから選べます。Madoと同じ構成です。
AUTH_MODE | 使えるログイン | 必須の設定 | こんなときに向いています |
|---|---|---|---|
local | ローカルアカウント | なし(OIDC_*は読みません) | SSOが無い環境、閉じたLANで使う |
oidc | Authentik(SSO)だけ | OIDC_ISSUER_URL、OIDC_CLIENT_ID、OIDC_ALLOWED_GROUPS、MMT_SESSION_ENCRYPTION_KEY | SSOへの移行を終えた本番 |
hybrid(既定) | SSOとローカルアカウント | oidcと同じ | SSOの導入中。ローカルの管理者を緊急用のログイン経路として残す |
development | 開発用ログイン | なし | ローカル開発。NODE_ENV=productionでは起動しません |
必須の設定が欠けていると、APIは足りない設定の名前だけを表示して起動しません。値はログに出しません。選んでいない方式のログイン経路は404を返します(localではSSOの開始とcallback、oidcではローカルアカウントのログイン)。
Authentik側の設定と、groupで権限を決める方法はAuthentik(SSO)で説明します。
ログイン画面
ログイン画面には、AUTH_MODEで有効な方式だけが表示されます。
oidc: SSOのボタンだけ。ボタンの表示名はOIDC_LABEL(既定はAuthentik)hybrid: SSOのボタンと、その下に「またはローカルアカウント」のユーザー名・パスワード欄local: ユーザー名・パスワード欄だけ
ログインのsessionは、操作しないままAUTH_SESSION_IDLE_SECONDSが過ぎるか、ログインからAUTH_SESSION_ABSOLUTE_SECONDSが過ぎた時点の早い方で切れます。どちらも既定604800秒(7日)なので、操作しない期間を含め、ログインから7日保持します。idleがabsoluteより長い設定では、APIが起動しません。
初期管理者を作る
localとhybridでは、最初の全体管理者をAPI serverのターミナルで作ります。ユーザー名とパスワードはターミナルで入力し、コマンドの引数やログには残りません。
npm run bootstrap-admin -w @mmt/apiDocker Composeで動かしている場合は、APIのコンテナの中で実行します。
docker compose run --rm api npm run bootstrap-admin -w @mmt/api| 表示 | 入力するもの |
|---|---|
Admin username: | 管理者のユーザー名。小文字の英数字と. _ -(例: admin) |
New admin password: | 初回だけ使うパスワード(12〜1024 byte)。入力した文字は表示されません |
Confirm password: | 同じパスワードをもう一度 |
Admin ready: admin (<ユーザーID>); password change requiredと表示されれば作成できています。ブラウザでログインすると「パスワードを変更」の画面になります。変更するまでは、ほかの画面とAPIは使えません(403 password_change_required)。
同じユーザー名が既にある場合は、そのユーザーを全体管理者・有効の状態に戻し、パスワードを置き換え、ログイン中のsessionを終了します。管理者がパスワードを忘れたときや、全体管理者が全員締め出されたときの復旧にも、このコマンドを使います。作成と再設定は監査ログに「初期管理者の作成・再設定」(auth.bootstrap_admin)として残ります。
ローカルアカウントを作る
全体管理者が画面から作ります。AUTH_MODEに関係なく作成できますが、oidcではローカルアカウントでログインできません。
![]()
- 右上のユーザーメニューの[全体設定]を開き、サイドバーの「全体管理」で[ユーザー]を開きます(
/settings/users)。 - [ローカルユーザーを作成]を押します。
AUTH_MODEがdevelopmentかoidcでローカルログインが無効なときは、ダイアログに「今のAPI serverの設定(AUTH_MODE)では、ローカルアカウントでログインできません」と出ます。作成はできますが、ログインできるのはAUTH_MODEをlocalかhybridにしたときです。 - 次の値を入力して保存します。
| 項目 | 入力値 |
|---|---|
| ユーザー名 | 小文字英数字と. _ -、64文字まで。例: tanaka |
| 表示名 | 画面に出る名前。例: 田中 |
| メールアドレス(任意) | 例: tanaka@example.com |
| 初回パスワード | 12文字以上。[生成]でランダムな値を作れます |
| 全体管理者にする | 全体管理者にする場合だけ選ぶ |
作成したユーザーが一覧に出れば完了です。初回パスワードは本人へ安全な方法で伝えてください。初回ログインでパスワードの変更を求められます。
作成したユーザーは、PublicのProjectならすぐに使えます。PrivateのProjectで使うには、[プロジェクト設定]の「Members」で追加します(権限とRole)。
パスワード
ローカルアカウントのパスワードは、Argon2idでハッシュ化して保存します。12〜1024 byteで、現在と異なる値に変更できます。
- 自分で変える: 右上のユーザーメニュー(アバター)から[パスワードの変更]を開きます(
/settings/account/password)。全体設定の[アカウント]の「パスワード」でも変えられます。変更すると、ほかのブラウザやマシンのログインは終了します。 - 忘れた: 全体管理者が「全体管理」→[ユーザー]の対象の行で[パスワード再設定]を押します。一時パスワードが1回だけ表示されるので、本人へ安全な方法で伝えます。本人のsessionは終了し、次のログインで変更を求められます。
- SSOだけのユーザーは、このアプリにパスワードを持ちません。パスワードはAuthentikで管理します。
ログインと現在のパスワードの確認には回数の上限があります。上限を超えると「試行回数の上限に達しました」と表示され、APIは429とRetry-Afterを返します。
| 対象 | 上限 |
|---|---|
| 同じ接続元からのログイン | 1分に30回 |
| 同じユーザー名へのログインの失敗 | 15分に10回 |
| パスワード変更時の現在のパスワードの確認 | 同じユーザーで15分に10回 |
回数はAPIのプロセスのメモリで数えているので、APIを再起動すると元に戻ります。存在しないユーザー名、誤ったパスワード、無効化したユーザーは、どれも同じ「ユーザー名またはパスワードが正しくありません」になります。
ユーザーを止める・戻す
退職や異動でユーザーを止めるときは、全体管理者が「全体管理」→[ユーザー]で操作します。
- 対象の行で[無効化]を押し、確認のダイアログで確定します。ログイン中のsessionは直ちに終了し、そのユーザーのAPI token(MLflow互換APIを含む)も次の要求から401になります。
- SSOのユーザーは、Authentik側でもgroupから外します。外さずに有効化すると、次のログインでgroupから決まる全体管理者の判定に戻ります。
- 戻すときは同じ行で[有効化]を押します。API tokenは再び使えますが、終了したsessionは戻りません。もう一度ログインが必要です。
ユーザーは削除できません。Runやモデルバージョンの作成者の記録を保つためです。最後の有効な全体管理者は、無効化も管理者を外すこともできません(409 last_global_admin)。画面ではその行の[無効化][管理者を外す]が押せなくなり、理由が出ます。先に別の全体管理者を用意してください。
- 自分の行には「あなた」と付きます。自分を無効化する・自分の管理者を外すときは、確認のダイアログに、すぐにログアウトされる(または全体管理を使えなくなる)ことと、戻すにはほかの全体管理者に頼む必要があることが出ます。
- Service Accountの行には「Service Account(Project名)」と出ます。押すと、そのProjectの[プロジェクト設定]の「Service Accounts」が開きます。無効化すると、そのProjectのworkerなどが使っているtokenも止まります。
SSOのユーザーの全体管理者の判定と表示名はAuthentikが正本なので、画面からは変えられません。[全体管理者]の欄に「Authentikのgroupが正本」と表示されます。
SSOへ移行する
ローカルアカウントで運用していた環境をSSOへ移すときは、hybridを経由します。
AUTH_MODE=hybridとAuthentikの設定を.envに入れ、npm run db:migrateを実行してからAPIを再起動します。bootstrap-adminでローカルの管理者を作り、パスワードを変更しておきます。- 管理者と一般のメンバーがSSOでログインし、全体管理者の判定とProjectの権限が正しいことを確かめます。
- 確かめられたら
AUTH_MODE=oidcに変えて再起動します。ローカルアカウントのログインは404になります。
Authentikが止まってログインできなくなったときは、AUTH_MODE=hybridへ戻して再起動すると、ローカルの管理者でログインできます。
自分のアカウントを確認する
右上のユーザーメニュー(アバター)から[アカウント]を開くと(/settings/account)、表示名、メールアドレス、認証方式、全体管理者かどうか、所属group(SSOのユーザーだけ。最終同期の日時つき)、自分のAPI tokenを確認できます。ローカルアカウントでは、パスワードもここで変えられます。全体設定のサイドバーの[アカウント]からも開けます。
![]()