監査ロギング

Solr は、システムに入るすべての HTTP リクエストの監査証跡をログに記録する機能を持っています。監査ロガーは、可能な限りあらゆる形式やログの宛先に合わせてプラグイン可能です。

監査証跡(監査ログとも呼ばれます)は、セキュリティ上重要な時系列の記録、記録のセット、および/または特定の操作、手順、イベント、またはデバイスに影響を与えたアクティビティのシーケンスの文書による証拠を提供する記録の宛先とソースです。
— ウィキペディア
https://ja.wikipedia.org/wiki/%E8%AA%BF%E6%9F%BB%E8%A8%BC%E8%B7%A1

監査ロギングの設定

監査ロギングは、security.jsonauditlogging キーの下で構成されます。

以下の例では、プラグインのデフォルトを使用して、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パラメータで設定できます。デフォルトでは、最終的なイベントタイプであるREJECTEDANONYMOUS_REJECTEDUNAUTHORIZEDCOMPLETED、およびERRORのみがログに記録されます。

以下は、フレームワークによってトリガーされるイベントタイプです。

イベントタイプ 使用法

AUTHENTICATED

ユーザーが正常に認証されました

REJECTED

認証リクエストが拒否されました

ANONYMOUS

リクエストが不明なユーザーで続行されます

ANONYMOUS_REJECTED

不明なユーザーからのリクエストが拒否されました

AUTHORIZED

認可が成功しました

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>:名前によるリクエストタイプ:ADMINSEARCHUPDATESTREAMING、または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設定を増やすことを検討してください。