访问映射中的每条边都携带两个独立的事实:访问是否被允许以及是否被观测到。这两层之间的差异是区分因素——它将静态图转变为发现。
一条边上的两个层次
映射不维护独立的”策略图”和”遥测图”。每条边是一个单一关系(源到资源,类型为读或读写),同时携带两个标志:
- 允许(Permitted) ——授权或策略允许此访问。信号来源是声明的策略本身。
- 观测(Observed) ——访问实际被观察到发生了,来自遥测数据和原生审计(来自协作代理的 OpenTelemetry、PostgreSQL pgAudit、云审计日志、内核级 eBPF 后备)。
对诚实性重要的一个细微之处:未允许意味着**“未知是否被允许”**,而非”被禁止”。映射记录它能从声明的授权中证明的内容;授权的缺失是需要调查的缺口,而非执行裁决。
差异:价值所在
最小权限漂移就是两个标志不一致的边集合。它分为两个操作上不同的发现:
- 意外访问 ——被观测到但未被允许。代理触及了一个没有授权覆盖的资源。这是安全相关的部分,作为头条发现呈现。
- 未使用的授权 ——被允许但从未被观测到。一个从未被行使的授权。这是你具体的最小权限清理列表,而非模糊的”审查你的 IAM”提醒。
两个标志一致的边——既被允许又被使用,或两者都不是——是无聊的、预期的稳态。差异是其中小而可操作的切片。
差异中的诚实性
简单的差异会产生虚假发现,因此调和过程有意保守。
待调和
审计将访问归因于凭证或角色;授权是针对身份编写的;协作信号命名一个代理或会话。当访问映射尚无法确定地将执行代理与其授权所对应的身份关联时,它无法证明访问是被允许的——但也不能将其作为违规来展示。此类边被标记为 reconciliation_pending:诚实的不确定性,而非捏造的发现。一旦按代理身份将凭证与代理关联,它们就能干净地解析。
无人监控资源上的授权
某些授权存在于没有观测侧收集器的资源类型上——没有人在监控谁实际使用了 LDAP 目录或 IdP 应用分配。对于这些,“从未被观测到”是预期的稳态,而非过度配置的证据。它们被排除在头条未使用授权列表之外,而非用噪声充斥列表。
覆盖范围和归因仍跟随边传递
差异继承了底层边的分层保真度。在 opaque 存储(Redis、SQLite、D1)上完全没有被动的读/写信号,因此观测边的缺失不是访问未发生的证据——而是沉默。同样,共享服务账户将归因折叠为 approximate。差异永远不会将低可信度的发现呈现得好像是确定的。
当差异在部分窗口(超过分页限制的非常大的资产)上计算时,结果被明确标记为部分的,而非呈现为权威的。
检测性,不在路径中
产生这个差异是一个带外、检测性活动。控制平面在你自己的基础设施中运行(可以气隙隔离);它通过日志、OpenTelemetry 和原生审计进行观测,它不会处于代理与其资源之间的请求路径中。收集器故障永远不会中断生产流量。
两个结论随之而来。首先,差异是一份报告,而非一个关口:它浮现已经发生的事情。在产品对发现采取行动的地方,它以默认拒绝和按需方式执行——绝不作为全面执行器。其次,读取差异本身是一项特权操作,限定于租户范围并完全受审计:检查谁能访问什么的行为本身就具有侦察相关性,读取在任何边返回之前就记录在仅追加的审计账本中。
这也是为什么差异可以安全地在敏感资产上运行:映射存储的是关系——源、资源、读/写、来源、可信度、时间戳——而非流经边的载荷、SQL 内容、密钥或 PII。未存储的内容无法泄露。