VPN 用户名在日志管道中于何处消失?
在更改日志隐私控制之前,先比较网关事件、采集器原始副本、已建索引的事件与检索时的字段。
会话出现在仪表板上,用户名一列却始终为空,第一反应往往是指责解析器。这种反应跳过了此前三个可能丢失该值的阶段。网关可以按策略掩蔽身份,摄取规则可以在建索引之前删除它,而检索时的提取也可能根本没把它命名出来。修复取决于你能证明哪一段边界负有责任,因此有用的工作是比对而不是改配置。
从一个事件开始,而不是从仪表板开始
挑一条认证事件,记下能标识它的信息:网关型号与版本、认证方式、事件标识符、时间戳以及源地址。按本人输入的原样添加用户名,包括大小写,因为区分大小写的查询可能把确实存在的字段藏起来。把那条事件当作之后每一次比对的基准。
各类事件的模式并不统一。一次失败尝试、一次无客户端成功登录和一次隧道重连各自产生的字段可能不同,有些网关在尝试从未到达用户认证时就省略身份。因此,仅凭某一类事件的空白列就断定管道有问题,证据很弱。
用经批准的测试身份而不是真实员工账号来操作,并让比对始终落在已经约束日志数据的访问规则之内。仅仅为了拿到样本而大范围开启详细认证日志,会改变你要测量的系统本身。
按顺序比对四段边界
该值可能在四个位置之一消失。每个位置的责任人和修复方式都不同。
| Boundary | What to compare | A gap means |
|---|---|---|
| Gateway event view | The device's own event display and logging policy | The identity was masked or never emitted |
| Collector receive | The raw event as received, before parsing | Transport, filter or source selection dropped it |
| Index-time pipeline | Transforms applied before storage | Redaction or rewriting removed the value |
| Search-time extraction | The field name and regex used by the query | The label does not match the stored key |
在值消失的第一段边界就停下来。设备视图与原始副本不一致,指向传输或采集器配置;那里一致但已建索引的事件里没有该值,指向一次转换;已建索引的事件里有、仪表板上却没有,指向提取或查询。
这个顺序很重要,因为后段只能丢信息,永远无法把它补回来。正则表达式无法找回被前段替换成占位符的字符串,隐私设置也无法解释一个从未发送过的值。
在源头掩蔽是策略,不是解析器的缺陷
Cisco 的 ASA 日志文档把隐藏用户名描述为一种可配置的行为,其中也包括无效或未知用户名如何呈现。因此源事件中被掩蔽的身份可能正是隐私策略所要求的,把它当成解析失败会导致一项削弱该控制的需求。
具体表现形式取决于版本和消息类型。某个事件可能带占位符,另一个可能完全省略该字段,而认证失败也许从不包含姓名。应当核对该事件在文档中的行为,而不是把旧缺陷报告套用到每一个缺失的身份上。
当掩蔽是有意为之,问题就从如何恢复该字段,变成审计要求能否换一种方式满足。会话标识符、由更小范围掌握的受控身份映射,或更窄的授权事件流,往往就能满足需要,而不必把每个尝试过的用户名都摆在每位日志读者面前。
建索引之前的匿名化无法撤回
Splunk 关于事件处理的文档描述了通过 sed 表达式以及在建索引前重写或删除数据的转换来实现匿名化。位置正是关键:原始事件在进入时就被改动,检索时的提取也就没有东西可找。
建索引时的脱敏与检索时的字段提取解决的是不同问题。脱敏限制的是谁最终能看到该值;提取只决定查询用哪个名字。哈希是一种保留关联性的折中方案,但在很小的用户名空间上做稳定哈希,只要有人能拿候选名字去试,就仍然可以识别。
如果存储的事件仍含身份,问题就在下游:源类型、断行、分隔符处理、字段别名或查询本身。这些属于常规解析修复,不触及隐私边界。
选择与边界相匹配的修复
有三个条件决定应对方式。第一,隐私策略是否打算排除该身份?第二,审计或调查流程需要的是身份、化名,还是只需要会话?第三,值在哪一段边界上才需要:收集、存储还是呈现?
如果策略就是要排除,改需求或呈现方式,而不是改控制。如果策略允许但收集环节把它丢了,修采集器并确认原始事件。如果存储完好,修提取,并用一开始抓到的经批准事件来验证。
把边界写进变更记录,才算收尾:在源头被掩蔽、在摄取中被删除,还是被提取漏掉。这一句话告诉下一位工程师该先看哪里,也能避免仪表板上的抱怨变成一项被悄悄关掉的隐私功能。