Skip to content

監査ログ ​

誰が、いつ、何をしたかを記録します。ログイン、権限の変更、Projectの作成・アーカイブ・削除、API tokenの発行と失効、ユーザーの管理、保存先と通知先の変更、Artifactの削除などが対象です。

監査ログは無期限に保存し、削除や変更はできません。画面にもAPIにも削除の機能は無く、DBでも書き換えを拒否します。

見る場所 ​

場所見られる人範囲
[プロジェクト設定]の「監査ログ」ProjectのAdminそのProjectの記録
「全体管理」→[監査ログ]全体管理者すべてのProjectと、Projectに属さない記録(ログイン、ユーザーの管理、保存先、通知先など)。完全に削除したProjectの記録もここで読めます

Projectの監査ログ

新しい順に表示します。古い記録は一覧の下の[さらに読む]で読み込みます。

  • 一覧の上の「すべての結果」で、「拒否」や「失敗」だけに絞り込めます。拒否・失敗の記録は、操作の横にも赤く印が付きます(スマホでも行のまま見えます)。
  • 「全体管理」→[監査ログ]では、ログイン・ログアウトとIdPの同期の記録を、既定で隠します。「ログイン・ログアウトの記録を隠す」を外すと表示します。
列内容
日時記録した時刻
操作者操作したユーザーの表示名。API tokenでの操作は「田中 (API token)」のようにtokenの所有者の名前に続けて表示します。ログインの失敗やSSOのログインの拒否など、ユーザーが操作していないものは「システム」
操作操作の種類。「API tokenの発行」など
結果「成功」「拒否」「失敗」
対象操作の対象(api_token/<ID>など)
詳細操作ごとの情報(変更前後のRole、scope、拒否の理由のコードなど)

記録するもの・しないもの ​

  • 成功した操作は、その操作と同じtransactionで記録します。操作が取り消された(rollbackした)場合は、記録も残りません。
  • 権限不足(403)と競合(409)で断った操作は、「拒否」としてdetails.code(APIのエラーコード)つきで残します。
  • 入力の誤りや、存在しない対象への操作は記録しません。ログインの回数制限で断った試行も記録しません。
  • パスワード、tokenの値とハッシュ、シークレット、通知先のメールアドレスは記録しません。
  • 接続元のIPアドレスとUser-Agentを残します。IPアドレスは、APIの前にあるMMT_TRUSTED_PROXY_HOPS段のproxyがX-Forwarded-Forに足した接続元です(それより左の値は利用者が書き換えられるので読みません。環境変数)。

主な操作 ​

操作(画面の表示)操作名主な詳細
ログインauth.loginmethod(local、oidc、development)。失敗は結果が「失敗」
ログアウトauth.logout
パスワードの変更auth.password.change
初期管理者の作成・再設定auth.bootstrap_admin
SSOのgroupと権限の同期auth.oidc.synccreated、globalRoleBefore/After、groupsAdded/Removed
SSOログインの拒否auth.oidc.deniedreason、subject、email
SSO sessionの再確認による失効auth.oidc.recheckreason、scope(sessionかidentity)、revokedSessions
SSOからのログアウトauth.oidc.backchannel_logoutsubject、sid、revokedSessions
ユーザーの作成・変更・パスワードの再設定admin.user.create、admin.user.update、admin.user.password_reset変更前後の状態・全体管理者・表示名
Projectの作成・変更(説明、公開範囲、保存先)・アーカイブ・元に戻す・完全に削除project.create、project.update、project.archive、project.restore、project.purge名前、公開範囲、保存先、作成時のメンバーの人数、変えた項目
メンバーの権限変更・直接付与の削除project.member.set、project.member.delete変更前後のRole。Projectの作成時に追加したメンバーもproject.member.setで残ります
groupへの権限付与・付与の削除project.group_binding.set、project.group_binding.deletegroup、変更前後のRole
API tokenの発行・失効token.create、token.revoke名前、種類、scope、期限、所有者の種類
Service Accountの作成・変更service_account.create、service_account.update変更前後のRole・状態
コンピュータの追加・変更(設定、公開範囲、有効と無効)compute_target.create、compute_target.update名前、種類、公開範囲、変えた項目。公開範囲を変えたときは変更前後(visibilityのfrom・to)
コンピュータの接続確認の依頼・ディレクトリの読み取りの依頼compute_target.check、compute_target.directory_listing頼んだworker(workerTokenId、workerId。workerを選んでいない接続確認では空)、checkIdかlistingId、読み取りではpath。権限が無くて断ったものは結果が「拒否」
保存先の追加・変更・接続テスト、既定の保存先の変更storage.backend.create、storage.backend.update、storage.backend.test、storage.settings.update
通知先の作成・変更・テスト送信notification.channel.create、update、test名前、種類、環境変数名、宛先の件数
通知ルールの作成・変更notification.rule.create、update
Artifactの削除artifact.delete、artifact.mlflow_deletepath、サイズ、保存先
自動実行ルール・昇格policyの所有者の変更automation_rule.owner.transfer、promotion_policy.owner.transfer

このほか、実験・モデル・データセットの変更、Runの説明文、コメント、保存ビュー、レポート、Sweep、aliasの保護なども記録します。画面に名前の無い新しい操作は、操作名のまま表示します。

APIで読む ​

監査ログはAPIでも読めます。新しい順で、1回に最大200件(既定50件)です。続きは応答のnextCursorをcursorに渡します。

sh
# Projectの記録(ProjectのAdmin。API tokenはadmin scope)
curl -sS -H "Authorization: Bearer $MMT_API_TOKEN" \
  "$MMT_API_URL/api/projects/<Project ID>/audit-events?action=token.create&limit=100"
絞り込み例
actionauth.oidc.denied
actorUserId操作したユーザーのID
outcomesuccess、denied、failure
hideSignInstrueで、ログイン・ログアウトとIdPの同期・再確認(auth.login、auth.logout、auth.oidc.sync、auth.oidc.recheck)を除く
projectId(全体の一覧だけ)ProjectのID

全体の記録(GET /api/audit-events)は、全体管理者がブラウザでログインしているときか、全体管理者がProjectを指定せずに発行したadminとaudit:readを持つtokenで読めます(API tokenとService Account)。ブラウザで全体管理者としてログインした状態で、次のURLを開きます。

text
https://tracking.example.com/api/audit-events?action=auth.oidc.denied

画面の「全体管理」→[監査ログ]には、今は絞り込みがありません。操作や結果で絞り込むときは、このAPIを使います。