Files
oci-portal/.trellis/spec/backend/oci-audit.md
T
wangdefa 23b2820101
CI / test (push) Successful in 22s
Release / release (push) Successful in 44s
发布 v0.8.3
2026-07-30 12:44:14 +08:00

3.3 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 供前端展示回溯进度,前端自动补批必须封顶,由用户显式继续。

日志回传链路(logrelay)资源命名与描述纪律

  • 命名派生:Topic 前缀、IAM Policy 名、SCH Connector DisplayName 一律由 relayResourceNames(tenancyOCID)(见 internal/oci/logrelay_names.go)基于 SHA-256(tenancyOCID)[:4] 派生 <8hex>-audit / <8hex>-audit-p不得在 logrelay.go 里再引入品牌明文(oci-portal / ociportal / logs 等),否则跨租户恒定字面量会成为 Oracle 内部风控识别「共用同一套 oci-portal」的强指纹;背景与证据分档见工作区任务归档 .trellis/tasks/archive/2026-07/07-22-research-oci-caller-info/research/oci-sdk-caller-fingerprint.md
  • 描述文本:Topic 与 Policy 的 Description 用集中常量 relayTopicDescNew / relayPolicyDescNew(中性英文),不允许写 oci-portal 日志回传:... 等品牌/中文明文;SCH Connector 干脆不设 Description,避免恒定文案。
  • 向后兼容 legacy 命名:findRelayTopic / findRelayPolicy / findRelayConnector 支持传入多前缀/多名称,顺序为「新命名 → legacy 命名」;新增查找需求要沿用变参签名,不要单独硬编码 legacy 常量到业务函数里。命中 legacy 资源时,refreshRelayTopicDesc / refreshRelayPolicyDesc 会尽力刷新描述为中性文案,失败不阻塞主流程(权限/服务限流等场景直接忽略)。
  • 测试:命名派生、legacy 常量值、描述中性性由 logrelay_names_test.go table-driven 锁定;若必须调整 legacy 常量,先评估是否会让存量租户找不到既有资源导致重复创建。