会话出现在仪表板上,用户名一列却始终为空,第一反应往往是指责解析器。这种反应跳过了此前三个可能丢失该值的阶段。网关可以按策略掩蔽身份,摄取规则可以在建索引之前删除它,而检索时的提取也可能根本没把它命名出来。修复取决于你能证明哪一段边界负有责任,因此有用的工作是比对而不是改配置。

从一个事件开始,而不是从仪表板开始

挑一条认证事件,记下能标识它的信息:网关型号与版本、认证方式、事件标识符、时间戳以及源地址。按本人输入的原样添加用户名,包括大小写,因为区分大小写的查询可能把确实存在的字段藏起来。把那条事件当作之后每一次比对的基准。

各类事件的模式并不统一。一次失败尝试、一次无客户端成功登录和一次隧道重连各自产生的字段可能不同,有些网关在尝试从未到达用户认证时就省略身份。因此,仅凭某一类事件的空白列就断定管道有问题,证据很弱。

用经批准的测试身份而不是真实员工账号来操作,并让比对始终落在已经约束日志数据的访问规则之内。仅仅为了拿到样本而大范围开启详细认证日志,会改变你要测量的系统本身。

按顺序比对四段边界

该值可能在四个位置之一消失。每个位置的责任人和修复方式都不同。

BoundaryWhat to compareA gap means
Gateway event viewThe device's own event display and logging policyThe identity was masked or never emitted
Collector receiveThe raw event as received, before parsingTransport, filter or source selection dropped it
Index-time pipelineTransforms applied before storageRedaction or rewriting removed the value
Search-time extractionThe field name and regex used by the queryThe label does not match the stored key

在值消失的第一段边界就停下来。设备视图与原始副本不一致,指向传输或采集器配置;那里一致但已建索引的事件里没有该值,指向一次转换;已建索引的事件里有、仪表板上却没有,指向提取或查询。

这个顺序很重要,因为后段只能丢信息,永远无法把它补回来。正则表达式无法找回被前段替换成占位符的字符串,隐私设置也无法解释一个从未发送过的值。

在源头掩蔽是策略,不是解析器的缺陷

Cisco 的 ASA 日志文档把隐藏用户名描述为一种可配置的行为,其中也包括无效或未知用户名如何呈现。因此源事件中被掩蔽的身份可能正是隐私策略所要求的,把它当成解析失败会导致一项削弱该控制的需求。

具体表现形式取决于版本和消息类型。某个事件可能带占位符,另一个可能完全省略该字段,而认证失败也许从不包含姓名。应当核对该事件在文档中的行为,而不是把旧缺陷报告套用到每一个缺失的身份上。

当掩蔽是有意为之,问题就从如何恢复该字段,变成审计要求能否换一种方式满足。会话标识符、由更小范围掌握的受控身份映射,或更窄的授权事件流,往往就能满足需要,而不必把每个尝试过的用户名都摆在每位日志读者面前。

建索引之前的匿名化无法撤回

Splunk 关于事件处理的文档描述了通过 sed 表达式以及在建索引前重写或删除数据的转换来实现匿名化。位置正是关键:原始事件在进入时就被改动,检索时的提取也就没有东西可找。

建索引时的脱敏与检索时的字段提取解决的是不同问题。脱敏限制的是谁最终能看到该值;提取只决定查询用哪个名字。哈希是一种保留关联性的折中方案,但在很小的用户名空间上做稳定哈希,只要有人能拿候选名字去试,就仍然可以识别。

如果存储的事件仍含身份,问题就在下游:源类型、断行、分隔符处理、字段别名或查询本身。这些属于常规解析修复,不触及隐私边界。

选择与边界相匹配的修复

有三个条件决定应对方式。第一,隐私策略是否打算排除该身份?第二,审计或调查流程需要的是身份、化名,还是只需要会话?第三,值在哪一段边界上才需要:收集、存储还是呈现?

如果策略就是要排除,改需求或呈现方式,而不是改控制。如果策略允许但收集环节把它丢了,修采集器并确认原始事件。如果存储完好,修提取,并用一开始抓到的经批准事件来验证。

把边界写进变更记录,才算收尾:在源头被掩蔽、在摄取中被删除,还是被提取漏掉。这一句话告诉下一位工程师该先看哪里,也能避免仪表板上的抱怨变成一项被悄悄关掉的隐私功能。

相关文章