vdi-cloud/docs/cloud-audit-history-20261111.md

43 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 操作审计历史查询与 CSV 导出(2026-11-11)
入口:控制台 `http://127.0.0.1:5182/tasks` →「操作审计」。本轮补齐真实 PostgreSQL 查询和导出,执行任务页维持原有行为。
## 使用方式
- 支持关键词、操作者包含、动作、结果与自定义时间范围;时间控件提供最近 24 小时、7/30/90 天快捷项。不选时间查询全部已有历史,包含超过最近 1000 条的旧记录。
- 动作、结果可以选择中文选项,也可输入原始代码;关键词查对象、操作者、动作、结果、请求标识和审计标识,`%`、`_`、反斜杠按普通文字匹配。
- 点击「查询审计」应用条件。每页 20 条,翻页和导出沿用已应用的条件及截止时间,避免新记录不断插入导致页内容移动;修改输入后需重新查询。查询失败清除旧结果,禁止把旧结果当成新条件的导出。
- 「导出查询结果 CSV」包含所有匹配页,最多 10000 条;超量时禁止导出并提示缩小范围,服务端也返回 413,绝不悄悄截取前几页。API 空结果返回表头。
- 页面时间按浏览器本地时区显示;CSV 时间为 UTC,使用 UTF-8 BOM、CRLF 和 CSV 转义,动作与结果保留原始代码。可能被表格软件当公式的单元格增加前置单引号。
## 接口与边界
`GET /api/v1/audit-logs`:数据库分页,默认 `page=1&pageSize=20`,最多每页 100 条。支持可选 `from`、`to`(含时区的 RFC3339)、`keyword`、`actor`、`action`、`result`。动作和结果精确匹配,操作者包含匹配。时间边界含两端;起止同时提供时要求结束晚于开始。没有隐含 1000 条上限,也没有新加历史清理策略。
`GET /api/v1/audit-logs/export`:使用相同筛选条件,忽略分页;成功返回 `text/csv`、附件名和 `X-Export-Count`。只输出时间、操作者、动作、对象、结果、请求标识、审计标识。不会读取密码、设备令牌、PVE 密钥或任务原始参数。导出文件准备成功会记一条 `export_audit_logs` 审计;它表示服务端生成文件,不证明客户端已保存。
查询与导出均要求有效管理员会话;三角色均可访问,与原有审计读取权限一致。不会新增设备控制权限。单次列表的总数和记录来自同一 PostgreSQL 快照,排序为 `created_at DESC,id DESC`。页面固定截止时间,记录正常追加时保持翻页稳定;审计导入时若回填历史时间,仍可能改变后续查询。
审计不再加入全局定时刷新,进入标签页时按需查询。执行任务查询仍为原有最近 1000 条,本轮未改任务历史分页。既有操作是否产生日志仍取决于对应接口,未新增所有鉴权失败或操作前后差异记录;外部归档、签名防篡改、多租户隔离和日志保留策略仍待后续产品化。
## 验证与部署
验证结果和现场部署记录见同目录下 `evidence/cloud-audit-history-20261111/`。测试使用独立一次性 PostgreSQL,不对现场库执行测试清空。
仓库另有并行的独占显卡切换开发。本轮部署使用独立源码目录,只包含已部署的终端告警基线和本轮审计改动;排除这部分并行修改,不修改工作区原文件。通过重建基线与现场二进制比较确认部署基础,保留数据库备份、原镜像标签和源码校验清单。
专用 VM、Windows 模板副本、额外磁盘及真实快照还原继续暂缓。本轮不需要对 VM 或终端发控制命令。
## 本轮验收结果
- 已部署到 5182 真实环境;Go 全量测试与 vet、前端 lint/typecheck/build、3 项单元测试、65 项安全 fixture 页面测试通过,其中新增审计页面 4 项。后端专用测试覆盖超过 1000 条历史记录、10000 条完整导出及 10001 条拒绝、三角色与未登录拒绝、筛选组合和 CSV 转义/公式防护。
- 现场将 root 的 187 条匹配记录按每页 2 条查询,共 94 页;CSV 的 187 个审计标识及顺序与所有匹配页完全一致。另用真实界面按操作者和保存告警规则筛选并下载 CSV。
- 深浅主题、1440 和 390px 真实界面通过;没有页面脚本异常、失败 API 或前端业务写请求。导出接口本身按设计新增审计,验收登录/退出也保留正常审计。
- 账号/密码指纹、用户授权、终端身份及配置版本、告警规则一致;PVE 三台 VM 配置摘要和电源状态保持验收前基线,任务仍为 8 条。验证时 VM100/102 为 running、VM101 为 stopped;这是本轮只读观测,不代表本轮执行过开机。
- 独立打包基线二进制 SHA-256 与部署前二进制一致:`8c87f4e2183bd6f96ff5d67544f0467dc832c6af524ba8f1426aa5ec54d82d75`。本次未部署仓库中并行的独占 GPU 逻辑和相关 Compose 配置。
部署前备份为 `.local/live/backups/before-audit-history-20261111-101812.dump`,原 API/console 镜像保留 `before-audit-history-20261111-101812` 标签。本轮没有新增数据库结构变更。需回退时先核对其他会话是否又有部署,再将两项镜像重新打回原名称,并使用 `.local/audit-review/compose.release.yml` 及 `--project-directory deploy`、原环境文件执行 `up -d --no-build --no-deps api console`。不要删除 PostgreSQL 业务卷,也不要把本轮只读验收的电源状态当成需要强制恢复的目标。
后续更新:执行任务也已补齐[完整历史分页与 CSV 导出](cloud-task-history-20261111.md),本文“最近 1000 条”描述仅为审计批次当时边界。