Elasticsearch 审计事件忽略策略
全面的审计追踪对于确保责任追溯至关重要。它在安全事件响应过程中具有极高的价值,甚至可能是满足合规性要求所必需的。
启用审计系统的缺点是不可避免的性能损耗。实际上,审计追踪会消耗掉原本无法用于用户查询的 I/O 操作资源。有时,审计追踪的冗长日志量可能会变成一个问题,而由 include 和 exclude 定义的事件类型限制也无法缓解该问题。
审计事件忽略策略是微调审计追踪冗长程度的更精细方法。这些策略定义的规则可用于匹配将被ignored(即:不记录输出)的审计事件。规则通过匹配审计事件的属性值来工作,并对 include 或 exclude 方法形成补充。可以想象一下,在庞大的审计事件主体中,这些策略会切除掉不需要的事件。除了一个唯一的例外,所有审计事件都受忽略策略的影响。这个例外就是 security_config_change 类型的事件,除非将其完全排除,否则无法被过滤掉。
当使用审计事件忽略策略时,您需要意识到这可能会带来潜在的责任审计盲区,从而使违规或非法操作无法被检测到。每当系统架构发生变更时,请花时间审查这些策略。
策略是一组具名的过滤规则集合。每个过滤规则仅适用于单个事件属性,即 users、realms、actions、roles 或 indices 属性之一。过滤规则定义了一个通配符模式列表或 Lucene 正则表达式列表,规则要实现匹配,审计事件属性的值必须与其中的任何一个相匹配。如果构成某个策略的所有规则都与该事件匹配,则该策略与该事件匹配。如果某个审计事件匹配了任意一个策略,它就会被忽略(即不输出)。所有其他不匹配的事件都会像往常一样正常输出。
所有策略都在 xpack.security.audit.logfile.events.ignore_filters 设置命名空间下进行定义。例如,以下名为 example1 的策略用于匹配来自 kibana_system 或 admin_user 主体、且操作对象为形如 app-logs* 通配符索引的事件
xpack.security.audit.logfile.events.ignore_filters:
example1:
users: ["kibana_system", "admin_user"]
indices: ["app-logs*"]
由 kibana_system 用户生成且跨多个索引操作的审计事件(其中只要有部分索引不匹配该索引通配符),将无法匹配该策略。不出所料,由所有其他用户生成的操作(即使仅在匹配 indices 过滤器的索引上操作)也不会匹配此策略。
以下名为 example2 的策略用于匹配在除 logs-app1 和 logs-app2 之外的任何索引上操作的事件
xpack.security.audit.logfile.events.ignore_filters:
example2:
indices: ["/~(logs-app1|logs-app2)/"]
只有在 logs-app1 和 logs-app2 索引上操作的事件才会不匹配,因此不会被该策略忽略。
不同类型的审计事件可能具有不同的属性。如果某个事件不包含某项策略定义了过滤器的属性,那么该事件将无法匹配该策略。例如,以下策略将永远不会匹配 authentication_success 或 authentication_failed 事件(无论用户的角色是什么),因为这些事件的架构中不包含 role 属性
xpack.security.audit.logfile.events.ignore_filters:
example2:
roles: ["admin", "ops_admin_*"]
同理,对于拥有多个角色的用户所产生的任何事件,如果其中部分角色不匹配通配符模式或正则表达式,也将无法匹配此策略。
为保证完整性(尽管实际用例应该很少),过滤器可以使用空字符串("")或空列表([])来匹配事件中缺失的属性。例如,以下策略将匹配不具备 indices 属性的事件(如 anonymous_access_denied、authentication_success 及其他类型的事件),以及针对 next 索引的操作事件。
xpack.security.audit.logfile.events.ignore_filters:
example3:
indices: ["next", ""]