3. 审计日志基础介绍

咱们直接进入正题。审计日志这东西,说白了就是谁在什么时间、对什么东西、干了什么事的一份流水账。在 BYOK 场景下,这份账本格外重要——因为密钥是你自己的,云厂商到底有没有误操作、有没有越权访问,你得靠日志来验证。

我在项目里踩过不少坑,最典型的就是:租户把密钥交上来了,结果审计日志没开,或者开了但字段不全。等到真要排查问题时,两眼一抹黑。所以,先把这个基础打牢。

3.1 审计日志是什么

审计日志记录的是对云资源的操作行为。它跟普通业务日志不一样。

一个典型的审计日志条目,至少包含四个要素:

  • 主体(谁):调用 API 的用户或服务账号。通常是 AK/SK 对应的身份。
  • 客体(对什么):被操作的具体资源。比如一个 KMS 密钥 ID、一个 Bucket 名称。
  • 动作(干了什么):操作类型。比如 CreateKey、Encrypt、Decrypt。
  • 时间(什么时候):操作发生的精确时间戳。一般精确到毫秒。

你想想看,如果缺少了其中任意一项,这日志就没法用来做责任认定。我见过一个案例,日志里记录了密钥被删除,但查不到是谁删的,因为主体字段是空的——这种日志基本废了。

3.2 为什么在 BYOK 场景下审计日志是刚需

BYOK 的核心信任模型是“密钥由我掌控”。但你要是连谁碰过你的密钥都不知道,还谈什么掌控?

场景 没有审计日志的后果 有审计日志后的能力
密钥被误删除 查无对证,只能投诉 精确定位操作人和时间,确定责任
权限滥用 无法发现越权解密行为 通过 Decrypt 调用记录,发现异常频率
合规审计 拿不出证据,合规不通过 直接导出日志作为合规凭证
安全事件溯源 不知道攻击路径 完整还原操作链,找到突破口

嗯,这里要注意。很多云厂商默认只保留 90 天或 180 天的审计日志。如果你有长期合规需求,我建议提前配置日志转储到你的对象存储里。这份数据是你自己备份的,云厂商删不掉。

3.3 审计日志的核心字段

不同云厂商的审计日志格式略有差异,但核心字段基本通用。咱们以常见的云审计服务为例:

{
  "eventVersion": "1.08",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDA123456789EXAMPLE",
    "arn": "arn:aws:iam::123456789012:user/admin",
    "accountId": "123456789012"
  },
  "eventTime": "2024-03-15T10:30:00Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "Decrypt",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "203.0.113.1",
  "requestParameters": {
    "keyId": "arn:aws:kms:us-east-1:123456789012:key/mrk-1234abcd5678efgh"
  },
  "responseElements": null,
  "requestID": "abcd1234-5678-90ef-ghij-klmnopqrstuv",
  "eventID": "12345678-90ab-cdef-1234-567890abcdef"
}

我个人习惯重点关注这几个字段:

  • eventName:一眼看出操作类型。加密、解密、密钥轮换、删除,都在这里。
  • requestParameters.keyId:操作的是哪个密钥。这是租户隔离检查的关键。
  • sourceIPAddress:来源 IP。可以跟你的准入白名单做交叉验证。
  • userIdentity:谁干的。这里要注意区分是主账号、子账号还是服务角色。
我的小技巧:写自动化检测脚本时,建议先拉取最近 7 天的审计日志,统计每个密钥的 Decrypt 调用次数。如果某个密钥突然暴增,大概率是业务配置有问题或者被滥用了。这个排查思路我用了很多次,很实用。

3.4 审计日志的流转路径

从操作发生到日志落地,大致经过这几个环节:

  1. 用户发起请求:通过 API、CLI 或控制台操作云资源。
  2. 云服务生成事件:KMS 等内部服务记录操作上下文。
  3. 审计服务采集:云审计服务聚合各类操作事件。
  4. 存储与索引:写入日志存储,并建立可检索的索引。
  5. 告警与导出:根据规则触发告警,或转储到外部存储。

为什么会这样设计?因为审计日志写入速度如果影响业务主流程,就是设计失败。所以大部分云厂商把审计日志做成异步的——操作先返回结果,日志后补。这也意味着,日志不是实时到达的,可能会有几十秒到几分钟的延迟。

注意:不要依赖审计日志来做实时拦截。如果日志延迟 5 分钟,你收到告警时,坏事情已经发生完了。审计日志更适合做事后追溯和规律发现。我曾经就因为这个误区吃过亏——想用审计日志做实时阻断,结果发现延迟根本不可控。

3.5 知识结构总览

这一节的核心逻辑可以用下面这张图串起来。它帮你理清楚审计日志在整个 BYOK 租户隔离检查中的位置。

BYOK审计日志知识结构图 BYOK 审计日志知识结构 审计日志定义 主体(谁) 客体(对什么) 动作(干什么) 时间(何时) BYOK 场景下的刚需价值 密钥操作溯源 定位误删/误操作 权限滥用检测 发现异常 Decrypt 合规审计证据 导出日志备查 安全事件溯源 还原攻击路径 核心字段解读 流转路径理解 核心逻辑 定义 → 价值 → 字段与流转 → 检查与溯源

3.6 实操中必须注意的坑

讲几个经验点,都是我在真实项目中碰到过的:

  • 时间戳对齐问题:审计日志用的是 UTC 时间。你的业务系统如果用的本地时间,对比时记得做时区转换。我曾经排查一个问题查了两小时,最后发现是时间差了8小时。
  • 日志量可能很大:高并发场景下,一天可能产生几千万条审计日志。不要对全量日志做盲查,要学会用 keyId 或 eventName 做过滤。
  • 保存与搜索的平衡:全量保存到对象存储(便宜),但搜索慢。建议把关键操作(密钥删除、权限变更)独立出来,做一份快速索引。我一般会用云原生 SLS 服务来实现这个双写策略。
一句话总结:审计日志是 BYOK 租户隔离检查的“黑匣子”。你不需要记住每一条日志的内容,但要清楚它的结构、延迟和检索方式。这样在排查问题时,才能快速定位到那个关键事件。