认识 Splunk 审计日志:你的第一道安全防线

说实话,很多刚接触 Splunk 的运维同学,上来就急着写搜索查日志。但有个东西被忽略了——审计日志。

我记得有一次帮一家金融客户做巡检,他们每天处理上亿条日志,但密钥相关的操作记录完全没被追踪。后来出了个内部事故,花了整整两周才定位到问题源头。从那以后,我养成了一个习惯:先搞清楚审计日志在哪、记什么、怎么用,再动手做巡检。

这一章我们就来聊聊审计日志是什么,Splunk 里有哪些审计事件,以及密钥审计到底要盯哪些场景。

什么是审计日志

审计日志,说白了就是系统里谁、在什么时间、通过哪个组件、做了什么操作的流水账。它和普通的应用日志不太一样——应用日志记录的是业务逻辑的运行结果,而审计日志记录的是人对系统的访问和操作行为。

你想想看,密钥管理系统的核心是私钥、证书、密码本。如果有人偷摸导出或者修改了这些敏感对象,没有审计日志,你根本不知道出了事。

核心特征:

  • 不可篡改性(最起码有强校验)
  • 时间戳精确到秒级
  • 包含主体(谁做的)、客体(做了什么)、动作(操作类型)
  • 必须保留足够长的周期(合规要求通常 1 年以上)

我在项目中见过不少人把审计日志和调试日志混在一起,结果合规审计时要找一条关键操作记录,翻了一个月的日志都没找到。嗯,这就是没做好分类归档的坑。

Splunk 中的审计事件类型

Splunk 内部有一套完善的审计机制。audittrail 索引收集了所有和 Splunk 平台本身相关的操作。我平时做密钥审计巡检,重点关注的子类型如下:

审计事件类型 对应 sourcetype 典型场景
用户登录与退出 audittrail 谁在什么时间登录了 Splunk Web 或 API
角色与权限变更 audittrail 管理员授予或撤销了某人的搜索、导出权限
对象操作(创建/修改/删除) audittrail 保存的搜索、数据模型、知识对象被编辑
数据导出与转发 audittrail 有人通过 REST API 导出大量日志或密钥信息
认证与 管理 audittrail 创建/吊销 API 、修改 LDAP/SSO 配置
系统配置变更 audittrail 修改 server.conf、limits.conf 等影响安全策略的文件
授权与委托 audittrail 将某搜索权限委托给另一个用户

经验之谈:很多人只看 action=failure 的记录,觉得只有失败操作才有问题。其实 action=success 的成功操作更需要关注——尤其是“导出”“删除”“修改密钥”这类高危动作。我曾经碰到过内部人员利用合法权限批量导出证书,成功日志里干干净净,但行为异常却没人发现。

密钥审计场景:我们到底要盯什么?

密钥审计不是泛泛地扫一遍所有 audit 日志。我个人的习惯是先画一个场景矩阵,从“谁、何时、哪里、做了什么、为什么”五个维度去卡控。

场景一:敏感对象的访问与导出

密钥文件一般存在 Splunk 的 passwords 存储或外部密钥管理系统中。通过 Splunk 的 REST API 访问 /services/storage/passwords 端点时,audittrail 会记录。如果你发现某个非管理员的账号在短时间内反复读取该端点,就要立刻拉警报。

index=audittrail sourcetype=audittrail action=access 
uri_path="/services/storage/passwords/*"
| stats count by user, clientip, _time
| where count > 5

曾经踩过的坑:有一个客户的 Splunk 部署启用了 search head 集群,audittrail 日志分散在多个节点上,结果单节点查到的记录不全。正确做法是加 index=audittrail splunk_server_group=shc 才能看到完整的审计轨迹。这个细节不注意,你可能会漏掉一半的关键记录。

场景二:密钥配置的变更记录

密钥配置的变更往往出现在 splunk.secret 文件、加密种子(seed)的更新场景。Splunk 自身会用密钥加密存储敏感元数据,如果有人手动修改了这些文件,audittrail 里会有对应的配置更新事件。

index=audittrail sourcetype=audittrail 
object="/opt/splunk/etc/auth/splunk.secret" 
action=update
| table _time, user, action, result

场景三:非法或异常的认证行为

密钥审计还包含对认证系统本身的监控。比如,短时间内多次尝试用错误的 API 访问 /services/auth/login,可能是在尝试爆破密钥管理接口。

index=audittrail sourcetype=audittrail 
action=failure 
info="Authentication failed"
| timechart span=1m count by user

场景四:权限提升与委托异常

如果你发现一个只读用户突然被授予了 admin 角色,或者某个用户将自己的搜索权限委托给了外部账号,这些都属于高风险操作,必须纳入审计范围。

一张图看懂审计日志与密钥审计

下面这张图梳理了本章的核心知识结构:从 Splunk 审计日志的源头(audittrail 索引),到各类审计事件类型,再到密钥审计的四类典型场景。你读完这一章后,可以用它做快速参考。

Splunk 审计日志与密钥审计知识框架 Splunk Audittrail 索引 用户认证事件 权限与角色变更 对象与配置变更 场景一 敏感对象访问导出 场景二 密钥配置变更 场景三 异常认证行为 场景四 权限提升与委托 核心原则:审计必须覆盖身份认证、权限变更、密钥对象访问、配置变更四个维度 每个维度都对应具体的 spl 搜索模板,后续章节会逐一展开

总结一下本章要点

  • 审计日志≠应用日志,它的核心是“谁在什么时间对什么做了什么”。
  • Splunk 通过 audittrail 索引收集所有平台操作,sourcetype=audittrail 是查询的起点。
  • 密钥审计需要重点关注对象访问导出、配置变更、认证异常、权限委托四个场景。
  • 写搜索时不要忘记考虑 splunk_server_group 字段,尤其在集群环境中。