Files
OmniRoute/docs/i18n/ja/docs/security/COMPLIANCE.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

17 KiB
Raw Blame History

Compliance & Audit (日本語)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


信頼できる情報源: src/lib/compliance/src/app/api/compliance/ 最終更新: 2026-06-28 — v3.8.40

OmniRoute は、管理操作、認証イベント、プロバイダー認証情報のライフサイクル変更、および MCP ツールの呼び出しを、SQLite を基盤とする監査テーブルに記録します。このページでは、記録される内容、保存場所、保持期間、API キーによるオプトアウト方法、およびデータのクエリ方法について説明します。

実装は src/lib/compliance/index.tsT-43 —「コンプライアンス制御」)および src/lib/compliance/providerAudit.ts にあります。監査書き込みは例外をスローしません。監査ログがメインのリクエストフローを中断しないよう、障害が発生しても呼び出しは通知なしに無視されます。

記録される内容

管理監査イベント(audit_log

logAuditEvent({ action, actor, target, details, ... }) を呼び出すたびに、1 行が生成されます。アクション文字列は domain.verb(または domain.verb.outcome)形式に従います。ソースツリー内で確認されているアクションタイプは次のとおりです。

アクション ソース
auth.login.success src/app/api/auth/login/route.ts
auth.login.failed src/app/api/auth/login/route.ts
auth.login.locked src/app/api/auth/login/route.ts
auth.login.error src/app/api/auth/login/route.ts
auth.login.misconfigured src/app/api/auth/login/route.ts
auth.login.setup_required src/app/api/auth/login/route.ts
auth.logout.success src/app/api/auth/logout/route.ts
provider.credentials.created src/app/api/providers/route.ts
provider.credentials.updated src/app/api/providers/[id]/route.ts
provider.credentials.revoked src/app/api/providers/[id]/route.ts
provider.credentials.batch_revoked src/app/api/providers/route.ts
sync.token.created src/app/api/sync/tokens/route.ts
sync.token.revoked src/app/api/sync/tokens/[id]/route.ts
compliance.cleanup src/lib/compliance/index.ts

各エントリには、actionactor(デフォルトは "system")、targetdetails/metadataJSONip_addressresource_typestatusrequest_id、および timestamp が記録されます。機密性の高いキー(apiKeyaccessTokenrefreshTokenpassword*token/*secret/*apikey に一致するものなど)は、行が書き込まれる前に再帰的に "[redacted]" に置換されます。

MCP ツール呼び出し(mcp_tool_audit

MCP ツールが呼び出されるたびに、open-sse/mcp-server/audit.ts を介して行が書き込まれます。スキーマ(src/lib/db/migrations/002_mcp_a2a_tables.sql より)は次のとおりです。

備考
id 自動インクリメント
tool_name MCP ツール識別子
input_hash 入力の sha256ペイロードは保存されない
output_summary 短く切り詰められた要約
duration_ms 経過時間
api_key_id 呼び出し元null 可)
success 1 / 0
error_code 失敗時の最終エラーコード
created_at ISO タイムスタンプ

リクエスト/使用状況ログ

これらは運用テレメトリ(厳密には管理監査ではありません)ですが、同じ保持パイプラインを共有します。

  • usage_history — リクエスト単位の使用状況集計
  • call_logs — リクエスト単位の完全なログ(行数上限の対象。以下を参照)
  • proxy_logs — プロキシトラフィックログ(行数上限の対象)
  • request_detail_logs — 従来の詳細リクエストログ(存在する場合は引き続き削除対象)

ストレージスキーマ

audit_log は、初回使用時に ensureAuditLogSchema() によって遅延作成されます。

CREATE TABLE IF NOT EXISTS audit_log (
  id            INTEGER PRIMARY KEY AUTOINCREMENT,
  timestamp     TEXT NOT NULL DEFAULT (datetime('now')),
  action        TEXT NOT NULL,
  actor         TEXT NOT NULL DEFAULT 'system',
  target        TEXT,
  details       TEXT,
  ip_address    TEXT,
  resource_type TEXT,
  status        TEXT,
  request_id    TEXT,
  metadata      TEXT
);

インデックスは timestampactionactorresource_typestatusrequest_id に作成されます。レガシーDBに存在しない列は、必要に応じて ALTER TABLE によって追加されます。

保持期間とクリーンアップ

2つの異なる保持期間が適用されます。

環境変数 デフォルト 適用対象
APP_LOG_RETENTION_DAYS 7 audit_logmcp_tool_audit
CALL_LOG_RETENTION_DAYS 7 usage_historycall_logsproxy_logsrequest_detail_logs
CALL_LOGS_TABLE_MAX_ROWS 100000 call_logs の行数上限によるトリミング
PROXY_LOGS_TABLE_MAX_ROWS 100000 proxy_logs の行数上限によるトリミング

cleanupExpiredLogs() が保持期間に基づく処理を実行します。これはサーバー起動時に src/instrumentation-node.ts から呼び出されます。実行のたびに、テーブルごとの削除件数を含む compliance.cleanup 監査イベントが記録されます。プロキシ/呼び出しログの トリミングは、長時間の書き込みロックを避けるため、バッチ処理(BATCH_SIZE = 5000)されます。

リクエスト履歴の手動クリーンアップは、保持期間に基づく処理とは別に行われます。Request Logs ページは POST /api/settings/purge-request-history を呼び出し、call_logs、 レガシーの request_detail_logs、および ${DATA_DIR}/call_logs/ 配下のローカルリクエスト成果物を削除します。

デフォルト値は src/lib/logEnv.ts DEFAULT_APP_LOG_RETENTION_DAYS = 7DEFAULT_CALL_LOG_RETENTION_DAYS = 7)で定義されています。

noLog オプトアウトAPIキー単位

APIキーにフラグを設定すると、そのキーによるダウンストリーム呼び出しトラフィックをログに記録しないようにできます。 このフラグは api_keys テーブル(no_log INTEGER DEFAULT 0)に保存され、 ホットパスでの検索用にメモリ内セットにも反映されます。

# ログを記録しないキーを作成(管理者認証が必要)
curl -X POST http://localhost:20128/api/keys \
  -H "Cookie: auth_token=..." \
  -H "Content-Type: application/json" \
  -d '{"name": "Privacy key", "noLog": true}'

ヘルパー(src/lib/compliance/index.ts

  • setNoLog(apiKeyId, true|false) — メモリ内エントリを切り替える
  • isNoLog(apiKeyId) — リクエスト処理パスで確認される。確認できない場合は、30秒間 キャッシュされた api_keys.no_log の読み取りにフォールバックする
  • NO_LOG_API_KEY_IDS(環境変数、カンマ区切り)— 起動時にメモリ内 セットへ事前読み込みされる。列を直接切り替えられない場合に便利

管理上の監査イベントログイン、プロバイダーの変更、MCPツールの呼び出しなどnoLog の影響を受けません。オプトアウトの対象となるのは、リクエスト単位のトラフィックログのみです。

REST API

エンドポイント メソッド 説明 認証
/api/compliance/audit-log GET フィルター付きのページネーションされた管理者監査エントリ management
/api/mcp/audit GET ページネーションされた MCP ツール監査エントリ (open-sse)
/api/mcp/audit/stats GET 集計された MCP 監査統計 (open-sse)

現時点では CSV エクスポート用エンドポイントは提供されていません。ダッシュボードからエクスポートするか、SQLite データベースを直接クエリしてください。

/api/compliance/audit-log のクエリ

サポートされているクエリパラメーター(すべて省略可能。テキストフィルターにはすべて LIKE %value% マッチングを使用):

  • actionactortargetresourceType(または resource_type)、 statusrequestId(または request_id
  • from / sinceto / until — ISO タイムスタンプ
  • limit(デフォルト 50、最小 1、最大 500
  • offset(デフォルト 0、最大 10_000

レスポンスは JSON 配列です。ページネーションのメタデータはヘッダーで返されます: x-total-countx-page-limitx-page-offset

curl "http://localhost:20128/api/compliance/audit-log?action=provider.credentials&from=2026-05-01" \
  -H "Cookie: auth_token=..."

ダッシュボード

ダッシュボードでは /dashboard/audit src/app/(dashboard)/dashboard/audit/page.tsx)で監査データを確認できます。このページには 2 つのタブがあります:

  • コンプライアンスComplianceTab.tsx)— /api/compliance/audit-log から取得した管理者監査イベント。イベントタイプ、重大度info / warning / critical。アクションとステータスから導出、日付範囲でフィルタリングできます。重大度は、アクションステータス文字列からクライアント側で計算されます。
  • MCPMcpAuditTab.tsx)— /api/mcp/audit から取得した MCP ツール監査。ツール名および成功/失敗でフィルタリングできます。

どちらのタブもページネーションに対応しており、ページサイズは 50(コンプライアンス)と 25MCPです。

プロバイダー認証情報ヘルパー

src/lib/compliance/providerAudit.ts は、プロバイダー管理ルートが認証情報イベントを生成する際に使用する整形ヘルパーを提供します:

  • summarizeProviderConnectionForAudit(connection) — 接続スナップショットが details に書き込まれる前に、apiKeyaccessTokenrefreshTokenidTokenproviderSpecificData.consoleApiKey を除去します。
  • getProviderAuditTarget(connection)target フィールド用に、安定した "<provider>:<name|id>" 文字列を構成します。
  • extractProviderWarnings(...payloads) — プロバイダーのレスポンスからポリシー/安全性に関する警告([sanitizer]prompt injection detectedcontent has been filteredsafety filterpolicy violation)を検索し、最大 5 件を抽出します。各項目は 400 文字に切り詰められます。

ベストプラクティス

  • PII法務、医療などを扱う API キーには noLog: true を指定してください。
  • 保持ポリシーに合わせて APP_LOG_RETENTION_DAYS / CALL_LOG_RETENTION_DAYS を調整してください。デフォルトの 7 日間は保守的な設定です。
  • コンプライアンスプログラムで必要とされる頻度で、監査テーブルをプラットフォーム外にエクスポート(sqlite3 dump)してください。組み込みのアーカイブ機能はありません。
  • ブルートフォース攻撃を検出するため、auth.login.failedauth.login.locked の件数を追跡してください。
  • 新しい管理者用エンドポイントを追加する際は、安定した domain.verb.outcome 形式のアクション文字列を指定して logAuditEvent({ ... }) を呼び出し、getAuditRequestContext(request) を使用してリクエストコンテキストを渡してください。これにより、IP と requestId が自動的に記録されます。

関連項目