审计日志记录
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.SolrLogAuditLoggingPlugin
或solr.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
参数配置记录的事件类型。默认情况下,仅记录最终事件类型 REJECTED
、ANONYMOUS_REJECTED
、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>
:按名称命名的请求类型:ADMIN
、SEARCH
、UPDATE
、STREAMING
或UNKNOWN
。 -
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
:(量规)指示此记录器是否处于异步模式。
如果您遇到非常高的请求速率并且审计记录器插件很慢,您可能会看到 queueSize 和 queuedTime 指标增加,并且可能开始丢弃事件(通过 lost 计数的增加来显示)。在这种情况下,您可能需要增加 numThreads 设置。 |