审计日志记录

Solr 能够记录进入系统的全部 HTTP 请求的审计跟踪。审计记录器是可插入的,以适应任何可能的格式或日志目标。

审计跟踪(也称为审计日志)是一个与安全相关的按时间顺序排列的记录、记录集和/或记录的目标和来源,提供在任何时间影响特定操作、过程、事件或设备的活动序列的书面证据。
— 维基百科

https://en.wikipedia.org/wiki/Audit_trail

配置审计记录

security.json 中的 auditlogging 键下配置审计记录。

以下示例使用插件默认值将同步审计记录配置到 Solr 的默认日志文件中。

{
  "auditlogging":{
    "class": "solr.SolrLogAuditLoggerPlugin"
  }
}

默认情况下,任何审计记录插件都将在后台异步记录,以避免降低请求速度。若要使审计记录同步进行,请添加值为 false 的参数 async

在使用异步记录时,你还可以选择配置队列大小、线程数,以及在队列已满时是否应阻塞或丢弃事件

{
  "auditlogging":{
    "class": "solr.SolrLogAuditLoggerPlugin",
    "async": true,
    "blockAsync" : false,
    "numThreads" : 2,
    "queueSize" : 4096,
    "eventTypes": ["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"]
  }
}

审计记录参数

这些参数是

class

必需

默认值:无

审计记录插件类名称。solr.SolrLogAuditLoggingPluginsolr.MultiDestinationAuditLogger(在 链接多个记录器 部分中描述)。

async

可选

默认值:true

定义事件是否异步记录。此默认值为 true,以避免降低请求速度。但是,如果你确信系统的性能特征,并且需要同步记录事件,则可以将其更改为 false

blockAsync

可选

默认值:false

定义如果队列已满,是否应阻塞请求。默认值为 false,将丢弃未记录的事件。仅在 async=true 时使用。

numThreads

可选

默认值:2

可用于审计记录的线程数。如果服务器可用的 CPU 内核数高于 4,则默认值将修改为 CPU 内核数 / 2。仅在 async=true 时使用。

queueSize

可选

默认值:4096

队列的大小。仅在 async=true 时使用。

eventTypes

可选

默认值:["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"]

要记录的事件类型。请参阅下面的 事件类型 部分以了解类型选项。

muteRules

可选

默认值:无

定义不应记录(静音)事件的情况。可能的规则可以排除来自某些用户、IP、路径或请求参数的请求。有关静音规则选项,请参见下文的静音某些事件部分。

事件类型

可以利用 eventTypes 参数配置记录的事件类型。默认情况下,仅记录最终事件类型 REJECTEDANONYMOUS_REJECTEDUNAUTHORIZEDCOMPLETEDERROR

以下是框架触发的事件类型

事件类型 用法

AUTHENTICATED

用户成功通过身份验证

REJECTED

身份验证请求被拒绝

ANONYMOUS

请求继续,但用户未知

ANONYMOUS_REJECTED

来自未知用户的请求被拒绝

AUTHORIZED

授权成功

UNAUTHORIZED

授权失败

COMPLETED

请求成功完成

ERROR

由于错误,请求未执行

静音某些事件

配置参数 muteRules 可让你静音某些事件的记录。你可以指定多条规则和规则组合,这些规则和组合将导致静音。你可以按请求类型、用户名、集合名称、路径、请求参数或 IP 地址静音。

以下示例使用 muteRules 静音三类请求的审计记录:任何 SEARCH 请求、用户 johndoe 发出的任何请求以及来自 IP 地址 192.168.0.10 的任何请求

{
  "auditlogging":{
    "class": "solr.SolrLogAuditLoggerPlugin",
    "muteRules": [ "type:SEARCH", "user:johndoe", "ip:192.168.0.10" ]
  }
}

静音规则也可以是列表,在这种情况下,列表中的所有项目都必须为真,静音才会发生。以下配置有三个静音规则

{
  "auditlogging":{
    "class": "solr.SolrLogAuditLoggerPlugin",
    "muteRules": [
      "ip:192.168.0.10", (1)
      [ "path:/admin/collections", "param:action=LIST" ], (2)
      [ "path:/admin/collections", "param:collection=test" ] (3)
    ]
  }
}
1 这将静音来自客户端 IP 192.168.0.10 的所有事件。
2 此规则将静音带有 action=LIST 的集合 API 请求。
3 最终规则将静音名为 test 的集合的集合 API 请求。

请注意,你可以将单个字符串规则与必须全部匹配的规则列表混合使用

静音规则的选项包括

  • type:<request-type>:按名称命名的请求类型:ADMINSEARCHUPDATESTREAMINGUNKNOWN

  • collection:<collection-name>:按名称命名的集合。

  • user:<userid>:按用户 ID 命名的用户。

  • path:</path/to/handler>:相对于 /solr 的请求路径,或相对于集合的搜索或更新请求。路径是前缀匹配,即 /admin 也将静音任何子路径。

  • ip:<ip-address>:IPv4 地址。

  • param:<param>=<value>:请求参数。这可能主要与 path 规则结合使用,如上文示例所示。

链接多个记录器

使用 MultiDestinationAuditLogger,可以将多个审计记录器插件配置为一个链,以便记录到多个目标。

{
  "auditlogging":{
    "class" : "solr.MultiDestinationAuditLogger",
    "plugins" : [
      { "class" : "solr.SolrLogAuditLoggerPlugin" },
      { "class" : "solr.MyOtherAuditPlugin",
        "customParam" : "value"
      }
    ]
  }
}

请注意,记录到备用目标需要使用自定义审计记录插件来定义。请参阅 AuditLoggerPlugin 中基类的 javadoc。

指标

审计记录插件会记录有关日志请求数量和时序的指标,以及异步记录器的队列大小。指标键全部记录在 SECURITY 类别中,每个指标名称都以范围 /auditlogging 和记录器的类名为前缀,例如 SolrLogAuditLoggerPlugin。各个指标如下:

  • count:(仪表)记录写入的审计日志的数量和速率。

  • errors:(仪表)记录错误的数量和速率。

  • lost:(仪表)记录队列已满且 blockAsync=false 时丢失的事件数量和速率。

  • requestTimes:(计时器)记录审计记录性能的延迟和百分位数。

  • totalTime:(计数器)记录记录日志所花费的总时间。

  • queueCapacity:(量规)记录异步记录队列的最大大小。

  • queueSize:(量规)记录当前在队列中等待的事件数量。

  • queuedTime:(计时器)记录事件在队列中等待的时间量。将此指标与 requestTimes 指标相加,将显示从事件到完成记录的总时间。

  • async:(量规)指示此记录器是否处于异步模式。

如果您遇到非常高的请求速率并且审计记录器插件很慢,您可能会看到 queueSizequeuedTime 指标增加,并且可能开始丢弃事件(通过 lost 计数的增加来显示)。在这种情况下,您可能需要增加 numThreads 设置。