ドキュメント

監査ログ

監査ログは、プロジェクトの設定に対するすべての変更を記録します。誰が、何を、いつ、どの画面から変更したか、変更された各フィールドの変更前と変更後の値です。検索でき、書き換えを検出できるようにチェーンされ、すべてのプランで 400 日間保持され、CSV、XLSX、PDF でエクスポートできます。

記録される内容

画面、画面フォルダー、プレイリスト、メディアファイルまたはフォルダー、アプリケーション、カード、スケジュールまたはレベル、キャンペーン、通知、Webhook、トリガー、ソース、フリートリンク、レポートスケジュール、アラートのミュート、メンバーまたはロール、招待、サービスクライアント、エージェント接続、シングルサインオンまたは SCIM の設定、ID プロバイダーがプロビジョニングするユーザーまたはグループ、グループのバインド、プロジェクトまたは組織の設定に対する変更は、1 件のエントリになります。画面に送るコマンド(再起動、再読み込み、識別、キャッシュの消去、アプリの再起動、更新、トースト、スクリーンショット)とフリート操作も、渡されたパラメーターとともに記録されます。

エントリの内容:

メンバー意味
at変更が確定した日時(UTC)
actor誰が: kind person、agent、service_client、staff、system のいずれか、id と name を伴う
approved_by, review_idエージェントが提案した変更を承認したユーザーと、それを保留したレビュー
source経路: dashboard、api、cli、mcp、staff、device、webhook、system のいずれか
action安定したコード、リソースタイプ、動詞: screen.update、playlist.create、webhook.rotate_secret
resourcetype、id、変更後のリソースの name
changes変更された各メンバー: path(/label のような JSON ポインター)、before、after
revision変更によって生じたリビジョン。コピーではなくリンクされます(プレイリストのリビジョン、メディアのバージョン、リソース自身のリビジョン番号)
request_id, route, client, client_ipその変更が通ったリクエスト
seq, prev_hash, hashチェーン内でのエントリの位置

値は保存されている値です。名前、メールアドレス、アドレス、URL、ID はそのまま表示されます。シークレット(トークン、API キー、パスワード、Webhook や署名のシークレット、ソースの認証情報、ペアリングコード、それ自体が認証情報である受信先 URL)は両側とも (redacted) と表示されるため、ローテーションはどちらの値も見せずに変更として表示されます。1 KiB を超える値はサイズと SHA-256 に置き換えられ、1 件のエントリに保持される変更は最大 100 件、16 KiB です。さらに変更があった場合は truncated で分かります。プレイリストのページとメディアファイルのバイトはコピーされず、エントリはリビジョンにリンクします。

カードデータ、キーと値(Webhook やソースが書き込んだ値を含む)、Player のテレメトリーはデータであり、設定ではありません。監査ログには含まれません。書き込まれたことはプロジェクトのイベントログに記録されます。

読み取れる人

プロジェクトのオーナー、その組織の管理者、プロジェクトを代行表示しているスタッフは、ダッシュボードで読み取れます。プロジェクト権限を持つエージェントまたはサービスクライアントは、API と CLI で読み取れます。組織の管理者、ドメイン、請求設定の変更は組織自身のログに記録され、組織の管理者が GET /api/organizations/{org_id}/audit で読み取れます。

改ざん耐性

エントリを書き込み、編集、削除するものはありません。そのためのルートがないためです。各エントリは、プロジェクト内で直前のエントリにチェーンされています。その hash は、直前のエントリのハッシュ、位置、内容から求めた SHA-256 です。変更の数秒後に、エントリは seq と hash を持ちます。

screenrig audit head
screenrig audit verify
screenrig audit verify --anchor 128:3f2c0b6e9a4d81c7f5e0a2b4c6d8e0f1a3b5c7d9e1f30415263748596a7b8c9d

audit verify(GET /api/audit/verify)は、保存されている内容からすべてのハッシュを再計算し、各リンク、seq の連続性、チェーンの先頭を確認します。問題のあるエントリについて hash_mismatch、prev_mismatch、gap、head_mismatch、anchor_mismatch、floor_mismatch のいずれかを報告し、チェーンが検証できない場合は終了コード 13 で終了します。1 回の呼び出しで最大 5,000 件のエントリを確認し、続きは next_seq を返します。アンカーとは、以前のエクスポートまたは audit head で保管したチェーンの先頭(SEQ:HASH)です。これに対して検証すると、そのエントリまでの履歴が変更されておらず、切り詰められていないことが証明されます。

保持と削除

エントリはすべてのプランで 400 日間保持されます。期限を過ぎたエントリは古いものから削除され、チェーンは現在の開始位置(floor_seq、floor_hash)を記録するため、それ以外の場所での削除は検出されます。プロジェクトを削除すると、その監査ログも一緒に削除されます。screenrig project export DIR はログを log/audit.jsonl に書き出し、チェーンの先頭を log/audit-head.json に書き出すので、コピーはプロジェクトより長く残り、アンカーに対する検証もできます。

エクスポート

screenrig audit export --format csv --output audit.csv
screenrig audit export --format xlsx --since 2026-07-01T00:00:00Z --until 2026-10-01T00:00:00Z
screenrig audit export --format pdf --resource-type playlist --output playlist-changes.pdf

GET /api/audit?format=csv|xlsx|pdf は、すべてのレポートと同じレンダラーで絞り込んだログを書き出します。変更されたフィールドごとに 1 行、古い順で、since の指定がなければ直近 30 日、最大 50,000 行です(ファイルが先頭の行だけを含む場合は truncated で分かります)。チェーンの先頭と保持の下限がファイルに含まれるため、保管したコピーは後の audit verify のアンカーになります。