3.3 KiB
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」的强指纹;背景与证据分档见调研档案docs/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.gotable-driven 锁定;若必须调整 legacy 常量,先评估是否会让存量租户找不到既有资源导致重复创建。