2、审计日志基础:什么是审计日志,常见格式、行业合规性要求

审计日志这东西,说白了就是系统里发生的「大事记」。谁、在什么时候、通过什么方式、干了什么事、结果怎样——全都按时间顺序记下来。我刚开始做运维那会儿,觉得日志嘛,能搜到异常就行。直到有一次被合规部门追着要三个月的登录记录,发现之前根本没开审计……嗯,从那以后我再也不敢小看这个环节了。

2.1 什么是审计日志

审计日志(Audit Log)是一组不可篡改的、按时间排序的事件记录。它区别于普通应用日志的地方在于:审计日志关注的是「谁做了什么」,而不是「程序哪里报错」。

核心特征

  • 不可否认性:记录必须防篡改,通常配合哈希链或签名
  • 时间精确:事件时间戳精度建议到毫秒,且集群内统一同步
  • 结构化:便于后续检索、统计和告警
  • 可追溯:能从一条记录反向追踪到完整的操作链路

我记得有一次客户排查内部数据泄露,全靠审计日志里的一条“非工作时间从内网下载敏感文件”记录,才锁定了嫌疑账号。如果没有审计日志,这种案子基本破不了。

2.2 常见审计日志格式

不同厂商、不同类型的设备输出审计日志的格式不一样。我在ELK项目中遇到过三种主流格式,这里逐个说清楚。

2.2.1 JSON 格式

现代系统和云平台(比如AWS CloudTrail、Azure Monitor)最爱用JSON。它的好处是结构清晰,Elasticsearch天然支持JSON嵌套解析,接入ELK基本零成本。

{
  "timestamp": "2025-03-21T14:32:10.123Z",
  "user": "wangwei",
  "action": "DELETE",
  "resource": "/api/v2/orders/10086",
  "source_ip": "10.0.1.5",
  "result": "success"
}

我个人习惯在ELK的filebeat配置里直接把JSON字段映射到target字段,省去额外的grok解析,性能能提升30%左右。

避坑指南:我曾经遇到一个项目,业务方把大段嵌套JSON扔进message字段,导致ES mapping爆炸。建议在logstash里用json { source => "message" }先展开,再丢弃原始message。

2.2.2 Syslog 格式

传统网络设备、Linux系统日志输出常用Syslog(RFC 5424 / RFC 3164)。它的优点是轻量、兼容广,缺点是字段不够丰富,解析起来需要写正则。

<14>1 2025-03-21T14:32:10.123Z host01 sshd 1234 - [timeQuality tzKnown="1"] Failed password for root from 192.168.1.100 port 22 ssh2

你看,这个例子里的用户、源IP、端口都混在一条文本里。在ELK里我一般先用grok过滤器拆成结构化字段,再做告警。你想想看,如果直接拿原始文本去搜索,后面想做“统计失败登录次数”就得吃大亏。

注意时区:Syslog默认不含时区信息时,Elasticsearch可能会按UTC存储,导致查询时偏移。我建议在日志发送端就强制带上timeQuality或统一配置NTP。

2.2.3 CEF 格式

CEF(Common Event Format)是ArcSight提出的一种安全事件格式,在SIEM领域特别常见。它的字段依靠“竖线|”分隔,头固定,后面是键值对扩展。

CEF:0|Security|Firewall|1.0|100|Login Failed|5|src=10.0.0.2 dst=192.168.1.1 dhost=webserver01

我刚接触CEF时觉得这格式反人类,但后来发现它在合规审计场景里很好用——因为它强制要求设备厂商把严重等级、事件类型、源/目标都标准化。

三种格式对比

特性JSONSyslogCEF
可读性优中(需要解析)中(分隔符明确)
ELK接入难度极低(原生支持)较高(需grok)中(可用KV)
扩展字段自由嵌套自定义标签固定扩展键值对
典型场景云平台、微服务网络设备、Linux防火墙、IDS/IPS

2.3 行业合规性要求

很多同学觉得审计日志只是“给老板看的”,其实不然。PCI-DSS和SOX这两个合规标准,直接决定了你的审计日志必须存什么、存多久、谁能改。我之前参与过一个支付系统的审计整改,差点被罚款。

2.3.1 PCI-DSS(支付卡行业数据安全标准)

如果系统里涉及信用卡数据(卡号、有效期、CVV),必须符合PCI-DSS。它明确要求:

  • 记录所有对持卡人数据的访问(谁、何时、访问了哪些字段)
  • 记录所有管理操作(添加用户、更改权限等)
  • 审计日志保留至少12个月,其中最近3个月必须可即时检索
  • 日志文件必须防篡改——我在项目里用ELK的ILM+冻结索引,再配合文件指纹校验来实现

个人经验:PCI-DSS的日志审查官很喜欢检查“是否有未授权的日志删除操作”。我们当时在ELK里对delete API做了唯一白名单,并给所有删除行为单独写了一条审计日志,这才过关。

2.3.2 SOX(萨班斯-奥克斯利法案)

上市公司(尤其是财务系统)必须遵守SOX。它不规定具体格式,但要求:

  • 能够重建完整的事件流(从登录到操作到退出)
  • 日志不能被中间人篡改
  • 审计系统本身也要被审计(你记录了我的修改,那谁记录了你的记录?)

说白了,SOX要的是一个可信任的审计链路。我在ELK里采用的办法是:每条审计日志都写入一个独立的、只追加的索引,并定期对索引做sha256快照。这样即使有人改了索引数据,快照对比也能暴露。

曾经有个坑:我一直以为SOX只要求日志保留3年,结果发现不同交易所(纽约所、纳斯达克)的要求不一样。后来我统一把ELK的冷数据层放到对象存储,保留7年,既不违反任何标准,存储成本也压下来了。

2.4 总结一下核心关系

下面这张图概括了审计日志从产生到合规归档的整个脉络,方便你装进脑子里。

审计日志核心概念关系图 审计日志核心脉络 数据源 网络设备 / 服务器 / 云平台 / 应用 日志格式 JSON / Syslog / CEF(需解析) 采集与传输 Filebeat / Logstash / Syslog-ng / 管道 存储与检索 Elasticsearch / 索引管理 / 快照 合规要求 PCI-DSS / SOX / 留存 1-7 年 / 防篡改 输出与告警 Kibana 可视化 / 邮件 / Webhook 💡 关键提醒 • 每条日志必须包含 时间、用户、操作、结果 • 防篡改:加哈希链或 WORM存储

说实话,审计日志这件事看起来简单,但真正把它做成一个自动化、合规、可追溯的系统,需要考量的细节非常多。后面我们会一步步拆解如何在ELK里搭出这样一套基础设施。