3、权限审计的基本原理归纳总结

3.1 到底什么是权限审计?

先问个问题:你给用户开了个权限,然后呢?

很多团队只关心“开权限”这一步,至于后面有没有人拿这个权限干坏事,没人管。权限审计,说白了就是事后翻旧账。

我经历过一个真实案例:某运维同事离职后,他的账号还挂在生产环境某关键密钥的审批名单里。三个月后才发现,他已经用那个权限把几台服务器上的日志全清了。要是当时有权限审计,第一时间就能发现账号异常。

权限审计的核心就三件事:

  • 谁(主体)——哪个用户、哪个角色、哪个应用
  • 对什么(客体)——哪把密钥、哪个接口、哪台机器
  • 干了什么(操作)——申请、审批、执行、拒绝、修改

这三个要素缺一不可。你想想,如果只记了“张三申请了密钥”,不记他申请的是哪把密钥、申请后做了什么,审计就毫无意义。

我的建议:在设计日志结构时,把subject、object、action三个字段设成非空。我踩过坑——早期只存了用户名,后来查问题根本对不上操作记录。

3.2 审计链条:从申请到归档

权限审计不是截个屏,而是一整条链。我习惯把它拆成四个阶段:

  1. 申请阶段——谁提交了什么权限需求,附带理由
  2. 审批阶段——第一个审批人、第二个审批人各自的操作时间、审批结果、备注
  3. 执行阶段——权限实际生效的时间、使用的IP、操作的密钥ID
  4. 复核阶段——定期或触发式复查,确认权限是否仍然合理

为什么非要四个阶段?因为很多权限失控就发生在“审批通过”到“执行”之间的空档。比如审批通过了,但执行脚本被篡改,实际给了更大权限。

阶段 关键记录 常见漏洞
申请阶段 申请人、申请时间、权限范围 理由字段为空,事后无法追溯业务原因
审批阶段 审批人列表、审批时间、审批结果 单人审批通过,无二次确认
执行阶段 执行人、实际生效配置、返回码 执行与审批结果匹配,但日志丢失
复核阶段 检核时间、是否通过、整改记录 复核频率过低,沉睡权限积压
注意:千万不要把四个阶段的日志混在同一张表里。我见过一个项目把所有操作都塞到一张“通用日志表”,结果查一条审批链要扫几百万行。分开存,按阶段加索引,查起来才快。

3.3 双人审批的核心原理

为什么这篇课程一直在强调“双人审批”?因为单点故障太可怕了。

你想想,如果一个人就能批准密钥权限,那这个人的账号一旦被盗,整个密钥体系就完了。双人审批的本质是制衡——任何敏感操作必须经过两个不同的人确认。

这里面有两个关键设计:

  • 互斥原则:两个审批人不能是同一个人,也不能属于同一个管理组。我曾经在项目里忘了做这个校验,结果两个人手动串通,还是过了双审。
  • 不可跳过原则:任何接口调用,只要涉及敏感权限,都必须走完两次审批。不能有“紧急情况先执行后补单”的后门。后门一开,审计就形同虚设。

还有一种常见误区:觉得双人审批就是两个人点个同意就行。但实际上,真正的双人审批需要记录每个人的完整身份验证信息——比如每次审批都要重新登录、验证二次认证,而不是直接从会话里拿用户ID。我在调整一个金融系统的审计时发现,它们的双审记录里两个审批人竟然是同一个session ,等于一个人批了两次。

3.4 审计日志的可信与不可篡改

审计日志自己要是能被篡改,那整个审计就没意义了。

基本原则是:日志写入权限和普通用户权限隔离。生成日志的服务,只能用最小的写入接口,而且日志表不能有UPDATE、DELETE的权限。我习惯把日志扔到独立的数据库里,连应用服务器都不能直连,只能通过消息队列写入。

另外,时间戳必须使用NTP时钟源,避免服务器时间被回退。如果某条日志的时间比前一条还早,那肯定有问题。

核心结论:审计日志 = 不可变记录 + 严格权限 + 可靠时间。缺一条,审计证书就是废纸。

3.5 一张图总结权限审计原理

下面这张SVG图,我把上面提到的核心要点画在了一起。你可以把它当成手边的速查卡片。

权限审计基本原理结构图 权限审计基本原理体系 权限审计 审计三要素 主体 (谁) 客体 (什么) 操作 (干什么) 双人审批制衡 互斥原则 不可跳过 审计流程四阶段 申请 审批 执行 复核 日志不可篡改 + 严格时间 审计不是目的,安全才是 —— 记录、制衡、复核,闭环才能防篡改

3.6 常见的审计模型对比

选哪种模型,取决于你对权限细粒度的要求。

模型 核心思想 适用场景
RBAC(基于角色) 用户通过角色获得权限 大部分内部系统,角色固定
ABAC(基于属性) 通过用户、资源、环境属性动态计算权限 云平台、细粒度多租户
ReBAC(基于关系) 权限继承自用户与资源的关系 社交平台、共享文档

在双人审批的场景下,RBAC相对容易实现——你只要控制“审批角色”必须由两个人担任就行。ABAC虽然灵活,但动态策略的审计日志更难做全。我个人更倾向于用RBAC做基线,再用属性扩展做例外规则。

另一个坑:不管用什么模型,千万别忘了权限回收审计。只记录开通,不记录回收,权限会越积越多。我遇到过一家公司,一年后发现数据库里有200个“已离职”用户的权限,全是审计缺口。

3.7 这一章的核心印象

  • 权限审计=主体+客体+操作,三者缺一不可
  • 审计流程分四段:申请→审批→执行→复核,每段都要独立记录
  • 双人审批的本质是制衡,必须互斥且不可跳过
  • 日志要防篡改,时间要可信
  • 模型选择要匹配业务,但双审机制通用

我把这些总结成一句话:审计不是为了让你管人,而是为了让系统在任何时候都能回答“谁在什么时候做了什么”。