1.8 KiB
1.8 KiB
OCI 审计事件集成约定
2026-07 审计日志重构(数据源切换 + 检索 + 配额回退)沉淀;实现见
internal/oci/audit.go。
数据源:双通道,Search 主路 + Audit API 回退
- Audit API(
audit.ListEvents)无排序参数,窗口内固定按处理时间正序分页。任何"从最新往更早"的列表需求禁止直接用它凑批——首批会拿到窗口内最旧的一段(2026-07-16 曾以此形态上线出 bug)。 - 倒序列表一律走 Logging Search(
loggingsearch.SearchLogs,search "<tenancy>/_Audit" | ... | sort by datetime desc)。硬约束:单次查询时间窗 ≤ 14 天、limit ≤ 1000、时间过滤基于处理时间而非发生时间。 - 部分免费租户 Logging Search 服务配额为零(报错含
Rate limit exceeded+maxQueriesPerMinute: 0,SDK 解析该错误体还会失败),属永久不可用,须自动回退 Audit API(小窗正序 + 前端全局重排);普通限流(配额非零)不回退。游标携带通道模式,续查不再试错。
检索语义
logContent = '*词*'是对整条日志 JSON 所有字段值的包含匹配,会命中隐藏认证元数据(如opc-principal头里的ttype: login),只可作服务端粗筛;用户可见语义必须再做客户端精筛(只匹配列表可见字段,不区分大小写,*通配分段)。- 用户输入进检索语句前必须消毒(去引号/反斜杠/控制字符、截断),见
SanitizeAuditTerm。
批式回溯的预算纪律
- 单批双预算:页数(
maxAuditPages)+ 时间(auditBatchTimeBudget≈20s)。全文检索命中稀疏时大窗扫描单页可达十余秒,没有时间预算会出现 3 分钟级单请求。 - 空窗按倍增扩窗(上限受 14 天查询窗约束);响应回传
scannedThrough供前端展示回溯进度,前端自动补批必须封顶,由用户显式继续。