Skip to content

認証方式とローカルアカウント ​

mado ML Trackingのログイン方法は、API serverの環境変数AUTH_MODEで選びます。Authentik(SSO)だけ、ローカルアカウントだけ、両方の3つから選べます。Madoと同じ構成です。

AUTH_MODE使えるログイン必須の設定こんなときに向いています
localローカルアカウントなし(OIDC_*は読みません)SSOが無い環境、閉じたLANで使う
oidcAuthentik(SSO)だけOIDC_ISSUER_URL、OIDC_CLIENT_ID、OIDC_ALLOWED_GROUPS、MMT_SESSION_ENCRYPTION_KEYSSOへの移行を終えた本番
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のターミナルで作ります。ユーザー名とパスワードはターミナルで入力し、コマンドの引数やログには残りません。

sh
npm run bootstrap-admin -w @mmt/api

Docker Composeで動かしている場合は、APIのコンテナの中で実行します。

sh
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ではローカルアカウントでログインできません。

「全体管理」の「ユーザー」の画面

  1. 右上のユーザーメニューの[全体設定]を開き、サイドバーの「全体管理」で[ユーザー]を開きます(/settings/users)。
  2. [ローカルユーザーを作成]を押します。AUTH_MODEがdevelopmentかoidcでローカルログインが無効なときは、ダイアログに「今のAPI serverの設定(AUTH_MODE)では、ローカルアカウントでログインできません」と出ます。作成はできますが、ログインできるのはAUTH_MODEをlocalかhybridにしたときです。
  3. 次の値を入力して保存します。
項目入力値
ユーザー名小文字英数字と. _ -、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を再起動すると元に戻ります。存在しないユーザー名、誤ったパスワード、無効化したユーザーは、どれも同じ「ユーザー名またはパスワードが正しくありません」になります。

ユーザーを止める・戻す ​

退職や異動でユーザーを止めるときは、全体管理者が「全体管理」→[ユーザー]で操作します。

  1. 対象の行で[無効化]を押し、確認のダイアログで確定します。ログイン中のsessionは直ちに終了し、そのユーザーのAPI token(MLflow互換APIを含む)も次の要求から401になります。
  2. SSOのユーザーは、Authentik側でもgroupから外します。外さずに有効化すると、次のログインでgroupから決まる全体管理者の判定に戻ります。
  3. 戻すときは同じ行で[有効化]を押します。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を経由します。

  1. AUTH_MODE=hybridとAuthentikの設定を.envに入れ、npm run db:migrateを実行してからAPIを再起動します。
  2. bootstrap-adminでローカルの管理者を作り、パスワードを変更しておきます。
  3. 管理者と一般のメンバーがSSOでログインし、全体管理者の判定とProjectの権限が正しいことを確かめます。
  4. 確かめられたらAUTH_MODE=oidcに変えて再起動します。ローカルアカウントのログインは404になります。

Authentikが止まってログインできなくなったときは、AUTH_MODE=hybridへ戻して再起動すると、ローカルの管理者でログインできます。

自分のアカウントを確認する ​

右上のユーザーメニュー(アバター)から[アカウント]を開くと(/settings/account)、表示名、メールアドレス、認証方式、全体管理者かどうか、所属group(SSOのユーザーだけ。最終同期の日時つき)、自分のAPI tokenを確認できます。ローカルアカウントでは、パスワードもここで変えられます。全体設定のサイドバーの[アカウント]からも開けます。

アカウント画面