監査ログ
Cassandraの監査ログは、Cassandraノードへの認証(成功/失敗したログイン)と同様に、すべての着信CQLコマンドリクエストをログに記録します。現在、2つの実装が提供されています。カスタムロガーを実装し、`cassandra.yaml`ファイルのパラメータとしてクラス名で挿入できます。
-
`BinAuditLogger`:バイナリ形式でイベントをファイルに記録する効率的な方法(パフォーマンスのためにコミュニティ推奨のロガー)
-
`FileAuditLogger`:slf4jロガーを使用して`audit/audit.log`ファイルにイベントを記録します
監査ログは何をキャプチャするか
監査ログは、以下のイベントをキャプチャします
-
成功したログイン試行と失敗したログイン試行
-
ネイティブCQLプロトコルを介して実行されたすべてのデータベースコマンド(試行または正常に実行された)
制限事項
プリペアドステートメントを実行すると、準備呼び出しでクライアントによって提供されたクエリが、実行タイムスタンプと他のすべての属性(下記参照)とともにログに記録されます。プリペアドステートメントの実行にバインドされた実際の値は、監査ログに表示されません。
監査ログは何を記録するか
各監査ログ実装は、以下の属性にアクセスできます。デフォルトのテキストベースのロガーの場合、これらのフィールドはパイプで連結されて最終的なメッセージが生成されます。
-
`user`:ユーザー名(利用可能な場合)
-
`host`:コマンドが実行されているホストIP
-
`source ip address`:リクエストが開始されたソースIPアドレス
-
`source port`:リクエストが開始されたソースポート番号
-
`timestamp`:UNIXタイムスタンプ
-
`type`:リクエストのタイプ(SELECT、INSERTなど)
-
`category` - リクエストのカテゴリ(DDL、DMLなど)
-
`keyspace` - リクエストの実行対象となるキースペース(該当する場合)
-
`scope` - テーブル/集計名/関数名/トリガー名など、該当する場合
-
`operation` - 実行されているCQLコマンド
設定方法
監査ログは、`cassandra.yaml`ファイルを使用して設定できます。1つのノードで監査ログを使用するには、そのファイルを編集するか、`nodetool`を使用して有効化および設定します。
AuditLogのcassandra.yaml設定
以下のオプションがサポートされています
-
`enabled`:このオプションは、監査ログを有効/無効にします
-
`logger`:ロガー/カスタムロガーのクラス名。
-
`audit_logs_dir`:監査ログディレクトリの場所。設定されていない場合、デフォルトは<span class="title-ref">cassandra.logdir.audit</span>または<span class="title-ref">cassandra.logdir</span>/audit/です
/audit/ -
`included_keyspaces`:監査ログに含めるキースペースのコンマ区切りリスト。デフォルトではすべてのキースペースが含まれます
-
`excluded_keyspaces`:監査ログから除外するキースペースのコンマ区切りリスト。デフォルトでは、<span class="title-ref">system</span>、<span class="title-ref">system_schema</span>、<span class="title-ref">system_virtual_schema</span>を除くキースペースは除外されません
-
`included_categories`:監査ログに含める監査ログカテゴリのコンマ区切りリスト。デフォルトではすべてのカテゴリが含まれます
-
`excluded_categories`:監査ログから除外する監査ログカテゴリのコンマ区切りリスト。デフォルトではカテゴリは除外されません
-
`included_users`:監査ログに含めるユーザーのコンマ区切りリスト。デフォルトではすべてのユーザーが含まれます
-
`excluded_users`:監査ログから除外するユーザーのコンマ区切りリスト。デフォルトではユーザーは除外されません
使用可能なカテゴリのリスト:QUERY、DML、DDL、DCL、OTHER、AUTH、ERROR、PREPARE
AuditLogを有効にするためのNodeToolコマンド
`nodetool enableauditlog`コマンドは、`cassandra.yaml`ファイルのデフォルトでAuditLogを有効にします。これらのデフォルトは、このnodetoolコマンドでオプションを使用してオーバーライドできます。
nodetool enableauditlog
オプション
--excluded-categories
-
監査ログから除外する監査ログカテゴリのコンマ区切りリスト。設定しない場合、cassandra.yamlの値が使用されます
--excluded-keyspaces
-
監査ログから除外するキースペースのコンマ区切りリスト。設定しない場合、cassandra.yamlの値が使用されます。<span class="title-ref">system</span>、<span class="title-ref">system_schema</span>、<span class="title-ref">system_virtual_schema</span>はデフォルトで除外されることに注意してください。nodetoolを介してこのオプションを上書きする場合は、監査ログにこれらのキースペースを含めたくない場合は、これらのキースペースを必ず追加してください
--excluded-users
-
監査ログから除外するユーザーのコンマ区切りリスト。設定しない場合、cassandra.yamlの値が使用されます
--included-categories
-
監査ログに含める監査ログカテゴリのコンマ区切りリスト。設定しない場合、cassandra.yamlの値が使用されます
--included-keyspaces
-
監査ログに含めるキースペースのコンマ区切りリスト。設定しない場合、cassandra.yamlの値が使用されます
--included-users
-
監査ログに含めるユーザーのコンマ区切りリスト。設定しない場合、cassandra.yamlの値が使用されます
--logger
-
AuditLoggingに使用するロガー名。デフォルトはBinAuditLogger。設定しない場合、cassandra.yamlの値が使用されます
監査ログファイルの内容を表示する
`auditlogviewer`は、監査binlogファイルの内容を人間が読めるテキスト形式で表示するために使用されます。
auditlogviewer <path1> [<path2>...<pathN>] [options]
オプション
-f,--follow
-
- ログの最後に達したら、無期限に続行します
-
より多くのレコードを待っています
-r,--roll_cycle
-
- ログファイルがロールされた頻度。必要になる場合があります
-
Chronicleがファイル名を正しく解析するために必要です。(MINUTELY、HOURLY、DAILY)。デフォルトはHOURLYです。
-h,--help
-
このヘルプメッセージを表示する
たとえば、監査ログファイルの内容をコンソールにダンプするには
auditlogviewer /logs/cassandra/audit
結果は
LogMessage: user:anonymous|host:localhost/X.X.X.X|source:/X.X.X.X|port:60878|timestamp:1521158923615|type:USE_KS|category:DDL|ks:dev1|operation:USE "dev1"
BinAuditLoggerの設定
AuditLoggingでロガーとして`BinAuditLogger`を使用するには、`cassandra.yaml`ファイルの`audit_logging_options`セクションでロガーを`BinAuditLogger`に設定します。`BinAuditLogger`は、`cassandra.yaml`の高度なオプションを使用してさらに設定できます。
BinAuditLoggerの高度なオプション
block
-
監査ログが遅れた場合にブロックするか、監査ログレコードをドロップするかを示します。デフォルトは`true`に設定されているため、監査ログレコードは失われません
max_queue_weight
-
ログレコードをブロックまたはドロップする前に、監査ログファイルに書き込まれるのを待機しているレコードのメモリ内キューの最大ウェイト。デフォルトは`256 * 1024 * 1024`に設定されています
max_log_size
-
ディスク上に保持するロールファイルの最大サイズ。このサイズを超えると、最も古いファイルが削除されます。デフォルトは
16L * 1024L * 1024L * 1024L
です。 ロールサイクル
-
監査ログセグメントをロールする頻度。これにより、ログの再利用が可能になります。利用可能なオプションは、MINUTELY、HOURLY、DAILY、LARGE_DAILY、XLARGE_DAILY、HUGE_DAILY です。その他のオプションについては、net.openhft.chronicle.queue.RollCycles を参照してください。デフォルトは
"HOURLY"
です。
FileAuditLogger の設定
AuditLogging でロガーとして FileAuditLogger
を使用するには、cassandra.yaml
ファイルにクラス名を設定し、監査ログイベントが system.log ではなく別のログファイルに流れるように設定します。
<!-- Audit Logging (FileAuditLogger) rolling file appender to audit.log -->
<appender name="AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${cassandra.logdir}/audit/audit.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${cassandra.logdir}/audit/audit.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!-- each file should be at most 50MB, keep 30 days worth of history, but at most 5GB -->
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- Audit Logging additivity to redirect audt logging events to audit/audit.log -->
<logger name="org.apache.cassandra.audit" additivity="false" level="INFO">
<appender-ref ref="AUDIT"/>
</logger>