审计与证据链
wesgine 的审计导出与 hash chain 证据完整性机制。
审计导出 API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /audit/export | 审计导出(JSONL / CSV) |
| GET | /audit/summary | 审计摘要 |
导出格式
GET /audit/export?format=jsonl&from=2026-01-01&to=2026-12-31
GET /audit/export?format=csv&from=2026-01-01&to=2026-12-31
| 参数 | 说明 |
|---|---|
format | jsonl 或 csv |
from | 起始时间 |
to | 结束时间 |
证据链(Evidence Chain)
GET /observe/evidence # JSONL 流
证据链是逐 Run hash chain:每条记录包含前一条的哈希值,形成不可篡改的链式结构。
hash chain 机制
Record N: { data, prev_hash: hash(Record N-1) }
Record N+1: { data, prev_hash: hash(Record N) }
切片后缺环无法校验——这正是证据链不按 Actor 过滤的原因。
Actor 边界(INV-OBS-09)
证据链与审计端点反向裁决——抬作用域到 cell:admin,按 Cell 全量不过滤:
| 端点 | Actor 过滤 | 权限 |
|---|---|---|
/observe/runs | ✅ 按 actor | cell:read |
/observe/evidence | ❌ 全量 | cell:admin |
/audit/* | ❌ 全量 | cell:admin |
为什么不过滤
- 证据链是逐 Run hash chain,切片后缺环无法校验
- 「只给我看我自己的审计记录」不是审计
- 声明必须排在
defaultCellRequiredScope的/observe泛前缀之前
Hypervisor 级审计
GET /admin/observe/crash-log # 崩溃日志
GET /admin/observe/snapshot # Hypervisor 快照
GET /admin/observe/per-cell-stats # 各 Cell 统计
Hypervisor 级观测是跨 Cell 只读聚合,不含业务数据。
Compliance 预设
| 预设 | GovernMode | 审计行为 |
|---|---|---|
StandardPreset | open | 基础审计 |
RegulatedPreset | locked | 完整审计 + Redactor |
ReadonlyPreset | locked | 只读审计 |
Compliance 类决定 RedactorRules——审计导出时自动脱敏。
证据与可观测的关系
| 系统 | 用途 | 数据 |
|---|---|---|
| Observe | 运维监控 | Token、Run、工具调用 |
| Evidence | 合规审计 | hash chain、不可篡改 |
| Audit Export | 外部审计 | 导出 JSONL/CSV |
三者互补,不互相替代。
相关文档
- 可观测性 →
observability.md - 治理模型 →
governance-model.md - Actor 边界 →
actor-boundary.md