監査ロギング
Solr は、システムに入るすべての HTTP リクエストの監査証跡をログに記録する機能を持っています。監査ロガーは、可能な限りあらゆる形式やログの宛先に合わせてプラグイン可能です。
監査証跡(監査ログとも呼ばれます)は、セキュリティ上重要な時系列の記録、記録のセット、および/または特定の操作、手順、イベント、またはデバイスに影響を与えたアクティビティのシーケンスの文書による証拠を提供する記録の宛先とソースです。
https://ja.wikipedia.org/wiki/%E8%AA%BF%E6%9F%BB%E8%A8%BC%E8%B7%A1
監査ロギングの設定
監査ロギングは、security.json
の auditlogging
キーの下で構成されます。
以下の例では、プラグインのデフォルトを使用して、Solr のデフォルトログファイルへの同期監査ロギングを構成します。
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin"
}
}
デフォルトでは、どの監査ロギングプラグインもリクエストの速度を低下させないように、バックグラウンドで非同期的にログを記録します。監査ロギングを同期的に行うには、パラメーター async
に値 false
を追加します。
非同期ロギングを使用する場合、オプションでキューサイズ、スレッド数、およびキューが満杯になった場合にブロックするか、イベントを破棄するかを設定することもできます。
{
"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
を使用して、3つのカテゴリのリクエスト(SEARCH
リクエスト、ユーザーjohndoe
からのリクエスト、IPアドレス192.168.0.10
からのリクエスト)の監査ログをミュートします。
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin",
"muteRules": [ "type:SEARCH", "user:johndoe", "ip:192.168.0.10" ]
}
}
ミュートルールはリストである場合もあり、その場合、ミュートが発生するにはリスト内のすべての項目がtrueである必要があります。以下の設定には3つのミュートルールがあります。
{
"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 | これにより、クライアントIP192.168.0.10 からのすべてのイベントがミュートされます。 |
2 | このルールは、action=LIST を持つCollection APIリクエストをミュートします。 |
3 | 最後のルールは、test という名前のコレクションのCollection 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"
}
]
}
}
代替の宛先へのロギングは、カスタムの監査ロギングプラグインで定義する必要があることに注意してください。ベースクラスのjavadocについては、AuditLoggerPluginを参照してください。
メトリクス
監査ロギングプラグインは、ログリクエストの回数とタイミング、および非同期ロガーのキューサイズに関するメトリクスを記録します。メトリクスキーはすべてSECURITY
カテゴリに記録され、各メトリクス名は/auditlogging
のスコープとロガーのクラス名(例:SolrLogAuditLoggerPlugin
)がプレフィックスとして付けられます。個々のメトリクスは次のとおりです。
-
count
:(メーター)書き込まれた監査ログの数とレートを記録します。 -
errors
:(メーター)エラーの数とレートを記録します。 -
lost
:(メーター)キューが満杯でblockAsync=false
の場合に失われたイベントの数とレートを記録します。 -
requestTimes
:(タイマー)監査ロギングのパフォーマンスのレイテンシとパーセンタイルを記録します。 -
totalTime
:(カウンター)ログに費やした合計時間を記録します。 -
queueCapacity
:(ゲージ)非同期ロギングキューの最大サイズを記録します。 -
queueSize
:(ゲージ)現在キューで待機しているイベントの数を記録します。 -
queuedTime
:(タイマー)イベントがキューで待機した時間を記録します。これをrequestTimes
メトリクスと追加すると、イベントからロギング完了までの合計時間が表示されます。 -
async
:(ゲージ)このロガーが非同期モードであるかどうかを示します。
リクエストレートが非常に高く、監査ロガープラグインが遅い場合は、queueSize およびqueuedTime メトリクスが増加し、イベントがドロップし始める(lost カウントの増加で示される)可能性があります。この場合、numThreads 設定を増やすことを検討してください。 |