平台操作审计日志需要保留哪些信息:字段清单与落地步骤
平台操作审计日志至少要回答五个问题:谁、在什么时间、从哪里、对什么对象、做了什么,以及结果如何。落到字段上,需要保留操作者身份、带时区的时间戳、来源地址与接入方式、操作对象的唯一标识、动作类型、执行结果,再补充请求ID、会话ID和变更前后值。本文给出一份可直接照抄的字段清单,并说明采集范围、留存期限、访问控制、角色分工与上线检查怎么做。
Table of Contents
要点总览(TL;DR)
- 审计日志字段以“谁、何时、从哪、对什么、做了什么、结果如何”为基准,至少保留操作者身份、带时区时间戳、来源IP与接入方式、对象唯一标识、动作类型、执行结果六类必填信息。
- 变更类操作必须记录变更前后值,敏感字段只记录“已变更”和字段名并做脱敏或哈希处理;动作类型收敛为有限枚举,避免同一操作多种写法影响检索。
- 采集按风险排序,优先覆盖登录、授权变更、配置修改、数据导出;留存分级,高风险动作不少于12个月,一般操作3至6个月,并配置自动清理规则。
- 日志查看权限与平台管理权限分开授予,审计方只读;通过只追加写入、摘要异地保存、独立存储实现防篡改,查询行为本身也要记录。
- 上线前用清单逐项核对:字段完整性、时间与来源准确、留存与访问控制生效、防篡改与备份可用、抽样还原真实操作、失败操作覆盖、字段变更复核机制。
一份可用的审计日志字段清单
审计日志的字段设计有一个基本判断标准:拿到一条记录,不看其他材料也能说清“谁对什么做了什么、结果怎样”。满足这个标准,字段就够用了;做不到,字段再多也只是堆砌。下表按信息类别列出常用字段,其中“必填”指该字段缺失会导致事件无法追溯,不建议省略。
| 类别 | 字段名 | 含义 | 是否必填 | 示例 |
|---|---|---|---|---|
| 主体身份 | operator_id | 操作者账号唯一标识 | 必填 | zhang.wei |
| 主体身份 | operator_name | 操作者姓名或显示名 | 必填 | 张伟 |
| 主体身份 | operator_role | 操作发生时生效的角色 | 必填 | 项目管理员 |
| 主体身份 | operator_org | 所属组织或团队 | 建议填写 | 支付研发部 |
| 时间 | event_time | 操作发生时间,精确到秒 | 必填 | 2025-03-12 14:08:31 |
| 时间 | time_zone | 时间戳所用时区 | 必填 | UTC+8 |
| 来源 | source_ip | 发起操作的IP地址 | 必填 | 10.20.3.45 |
| 来源 | client_info | 终端类型与客户端版本 | 建议填写 | Web / Chrome 122 |
| 来源 | access_method | 接入方式 | 建议填写 | SSO登录 / API调用 |
| 对象 | object_type | 被操作对象的类型 | 必填 | 项目成员权限 |
| 对象 | object_id | 对象唯一标识 | 必填 | proj-1024 |
| 动作 | action_type | 动作类型 | 必填 | grant_role |
| 结果 | result | 执行成功或失败 | 必填 | success |
| 结果 | fail_reason | 失败原因 | 失败时必填 | 权限不足 |
| 关联 | request_id | 单次请求的唯一标识 | 必填 | req-8f3a91 |
| 关联 | session_id | 会话标识,用于串联同一会话内的操作 | 建议填写 | sess-77c2 |
| 变更 | before_value | 变更前的值 | 变更类操作必填 | 角色:开发者 |
| 变更 | after_value | 变更后的值 | 变更类操作必填 | 角色:项目管理员 |
变更前后值是最容易被忽略、却最影响追溯效率的一类字段。只记录“修改了权限”,事后无法判断影响范围;记录“从开发者改为项目管理员”,才能快速定位这次变更扩大了哪些能力。对于密码、令牌、密钥等敏感字段,日志中应记录“已变更”这一事实和字段名,具体值做脱敏或哈希处理,避免日志本身成为泄露渠道。
字段命名建议一次定好并写入规范,包括大小写风格、时间格式、动作类型的枚举值。动作类型尤其需要收敛成有限枚举,例如 login、logout、grant_role、revoke_role、config_update、data_export,避免同一种操作在不同模块里出现三四种写法,导致后续检索和统计失效。
从字段到机制:采集、留存与访问控制怎么定
字段清单确定后,真正决定日志是否可用的是三件事:高风险动作有没有被采集到、日志能保存多久、谁能看。采集范围建议按风险排序,优先覆盖会改变权限边界或带走数据的动作,再逐步扩展到一般配置操作。
| 动作类别 | 典型动作 | 建议留存期 | 可访问角色 |
|---|---|---|---|
| 身份与登录 | 登录、登出、登录失败、SSO绑定变更 | 不少于6个月 | 平台管理员、安全负责人 |
| 授权变更 | 授予角色、回收权限、成员加入移出项目 | 不少于12个月 | 平台管理员、安全负责人、审计方 |
| 配置修改 | 项目配置、集成配置、安全策略调整 | 不少于12个月 | 平台管理员、安全负责人 |
| 数据导出 | 批量导出工作项、代码仓库、附件 | 不少于12个月 | 安全负责人、审计方 |
| 一般操作 | 工作项创建与状态流转 | 3至6个月 | 团队负责人按项目范围查看 |
留存期限的确定依据通常来自三方面:所在行业或客户合同对审计证据的时限要求、内部安全事件回溯的实际需要、存储成本。分级策略比“一律永久保存”更现实:高风险动作长期保留,一般操作按需保留。期限一旦确定,应写入制度并配置自动清理规则,避免靠人工删减。
访问控制遵循最小授权。日志查看权限与平台管理权限分开授予,审计方通常只读、不可修改、不可删除。查询行为本身也应记录,形成“谁看了日志”的二次审计。防篡改方面,常见做法包括日志写入后只追加不修改、定期生成摘要或哈希并异地保存、将日志同步到独立的存储或日志服务,使平台管理员无法单独改写历史记录。日志自身的备份要与平台数据备份分开考虑,明确备份频率和恢复演练方式,避免出现“平台故障连带日志一起丢失”的情况。
在ONES这类研发管理平台中落地时,账号与组织信息是日志主体字段的来源。ONES Account支持从企业微信、钉钉同步账号与组织架构,也支持对接LDAP、Microsoft AD以及CAS、SAML等单点登录方式,这些接入方式可以作为access_method字段的取值依据;平台侧通过HTTPS、TLS 1.2传输,并提供数据备份与存储组件健康监控,可作为日志传输与备份链路的组成部分。审计日志具体记录哪些字段、留存多久,需以实际部署版本的配置为准,在方案评审阶段向平台方确认。
角色分工与各环节交付物
审计日志方案失败,多数时候不是技术问题,而是没人对字段定义负责、没人定期看日志。建议在项目启动时就明确四类角色及其交付物。
| 角色 | 职责边界 | 主要交付物 |
|---|---|---|
| 平台管理员 | 负责日志采集配置、存储与备份,执行字段变更 | 采集配置说明、字段变更记录、备份与恢复记录 |
| 安全负责人 | 定义字段标准与留存策略,组织评审,牵头异常响应 | 字段规范文档、留存策略表、事件响应记录 |
| 研发团队负责人 | 确认本团队高风险动作范围,参与抽样验证 | 团队动作清单、抽样验证结论 |
| 审计方 | 按授权查阅日志,核验完整性与可追溯性 | 审计查阅记录、问题清单 |
字段定义的评审与变更要有固定流程:安全负责人提出或收集字段变更需求,平台管理员评估采集可行性,双方与研发团队负责人共同评审,通过后更新字段规范文档并记录版本。新增高风险动作类型时,同步补充对应的动作枚举值和采集配置,避免出现“功能上线了、日志没跟上”的空档。
日志接入与上线检查由平台管理员执行、安全负责人确认。定期审阅建议按月或按季度进行,由安全负责人牵头,重点看授权变更和批量导出两类记录;发现异常时明确响应责任人和时限,把处理过程记录在案,形成闭环。
示例:一次权限变更在日志中的完整记录
以下为演示情景,用于说明字段如何组合,不对应任何真实客户或真实操作。场景设定:某成员被授予项目管理员权限,操作由平台管理员张伟在Web端完成。
| 字段 | 取值 |
|---|---|
| operator_id / operator_name | zhang.wei / 张伟 |
| operator_role | 平台管理员 |
| operator_org | 支付研发部 |
| event_time / time_zone | 2025-03-12 14:08:31 / UTC+8 |
| source_ip / client_info / access_method | 10.20.3.45 / Web Chrome 122 / SSO登录 |
| object_type / object_id | 项目成员权限 / proj-1024 |
| action_type | grant_role |
| before_value / after_value | 角色:开发者 / 角色:项目管理员 |
| result / fail_reason | success / 空 |
| request_id / session_id | req-8f3a91 / sess-77c2 |
一次授权操作往往不止产生一条日志:权限校验、角色写入、通知发送可能分别记录。通过request_id可以把同一次请求产生的多条记录串起来,按时间排序还原完整过程;session_id则用于判断这次操作是否与同一会话内的其他动作相关,例如在授权前后是否还发生了成员移出或配置修改。
变更前后值是判断影响范围的直接依据。本例中角色从开发者提升为项目管理员,意味着该成员获得了项目配置修改和成员管理能力,追溯时应重点检查此后一段时间内该项目是否出现配置变更或批量导出。若日志只记录了“权限已修改”,这一步判断就只能靠人工询问,追溯效率大幅下降。
上线前的完成检查
方案是否达到可用状态,可以用下面这份清单逐项核对。建议每项都留下核对记录和核对人,作为上线材料的一部分。
- 字段完整性:登录、授权变更、配置修改、数据导出四类高风险动作逐一触发一次,确认每条记录都包含主体、时间、来源、对象、动作、结果六类必填字段。
- 时间与来源准确:抽查记录中的时间戳与实际操作时间一致,时区标注正确,来源IP与终端信息可对应到实际操作环境。
- 留存与访问控制生效:确认自动清理规则按策略执行,非授权账号无法查询日志,审计方账号为只读权限。
- 防篡改与备份可用:验证日志写入后不可修改,备份任务按计划执行,并完成至少一次恢复演练。
- 抽样还原:随机抽取一次真实操作,仅凭日志还原操作者、操作对象、变更内容和结果,还原结论与当事人确认一致。
- 失败操作覆盖:人为制造一次权限不足的失败操作,确认失败记录包含失败原因。
- 变更复核机制:确认字段规范文档有版本记录,下一次评审时间已排入计划。
清单全部通过,说明日志已经具备基本的追溯能力。此后每次平台新增高风险功能或调整权限模型,都应回到字段规范和采集配置做一次复核,让审计日志与平台能力保持同步。
常见问题
审计日志里记录操作者姓名就够了,为什么还要记录操作发生时的角色?
姓名只能说明是谁,角色才能说明这次操作凭借什么权限完成。成员的角色会随时间调整,事后查看日志时,当前角色未必等于操作发生时的角色。记录操作发生时生效的角色,可以判断这次操作是否在授权范围内,也能在权限模型调整后回溯旧记录。若组织架构变动频繁,建议同时保留所属组织字段,便于按团队范围检索。
留存期限定多长比较合适?有没有统一标准?
留存期限通常由三方面共同决定:所在行业或客户合同对审计证据的时限要求、内部安全事件回溯的实际需要、存储成本。常见做法是分级设置,授权变更、配置修改、数据导出等高风险动作保留不少于12个月,登录类记录不少于6个月,一般操作保留3至6个月。期限确定后写入制度并配置自动清理规则,避免依赖人工删减。涉及具体合规要求时,以适用的法规和合同条款为准。
日志已经写入数据库,还需要单独做防篡改吗?
需要。拥有平台管理权限的账号通常也能接触日志存储,仅靠数据库权限无法证明记录未被改写。常见做法包括日志写入后只追加不修改、定期生成摘要或哈希并异地保存、将日志同步到独立存储或日志服务,使平台管理员无法单独改写历史记录。日志备份也应与平台数据备份分开规划,明确备份频率并完成恢复演练。
平台新增功能后,审计日志经常漏记,怎么避免?
把日志接入纳入功能上线流程,而不是上线后补。字段规范文档中维护动作类型枚举清单,新功能涉及权限变更、配置修改或数据导出时,由平台管理员评估采集可行性,安全负责人确认字段是否齐全,评审通过后同步更新采集配置和枚举值。上线检查清单中增加一项:新功能的高风险动作是否已触发并留下完整记录。
ONES 平台上的账号与组织信息能否直接作为审计日志的主体字段来源?
可以作为来源之一。ONES Account 支持从企业微信、钉钉同步账号与组织架构,也支持对接 LDAP、Microsoft AD,以及 CAS、SAML 等单点登录方式,这些信息可用于填充操作者账号、姓名、所属组织等字段,接入方式也可作为来源字段的取值依据。审计日志具体记录哪些字段、留存多久,需以实际部署版本的配置为准,建议在方案评审阶段与平台方确认。



