セキュリティ監査を有効にした後、ユーザーの操作を監査するために具体的なセキュリティ監査ルールを設定する必要があります。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity Editionは現在、監査機能をサポートしていません。
ログポリシーの設定
構成パラメータaudit_log_strategyを使用して監査ログのポリシーを設定します。ASYNCHRONOUS、PERFORMANCE、SYNCHRONOUS の3種類のログ書き込みポリシーがサポートされており、必要に応じて対応する書き込みポリシーを選択することで、パフォーマンスとログの整合性のバランスを実現できます。
ASYNCHRONOUS:非同期ログ書き込みを示します。bufferが上限になると同期待機します。このポリシーはデフォルトです。
PERFORMANCE:非同期ログ書き込みを示します。bufferが上限になるとデータを破棄します。
SYNCHRONOUS:同期ログ書き込みを示します。
たとえば、監査レコードのファイル書き込みポリシーを非同期ログ書き込みに設定し、bufferが上限になると同期待機します。
obclient [test]> ALTER SYSTEM SET audit_log_strategy='ASYNCHRONOUS';
非同期ログ書き込みを使用する場合、構成パラメータaudit_log_buffer_sizeを使用してbufferサイズを制御できます。
ログ形式の設定
構成パラメータaudit_log_formatを設定して監査ログの形式を選択します。現在はCSV形式のみサポートされています。
obclient [test]> ALTER SYSTEM SET audit_log_format='CSV';
データのマスキングの設定
構成パラメータaudit_log_query_sqlを使用して、監査レコード内のSQL文を選択します。値にはALLとNONEの2種類が含まれます。
ALL:すべてのQuery SQLを記録します。
NONE:Query SQLを記録しません。
たとえば、監査レコード内のSQL文でQuery SQLを記録しないように設定します。
obclient [test]> ALTER SYSTEM SET audit_log_query_sql='NONE';
Query SQLを記録する際、監査ファイルでは以下の文についてデータのマスキングが行われました:
- CMD:パスワード、AK/SKなどの機密情報を含む文、例えばユーザー作成、バックアップ・リカバリの開始、構成パラメータの変更などは、統一的に
***として記録されます。その他のタイプのCMD文は、元のSQLを直接記録します。 - 文のタイプが判断できない場合:Parser失敗なども
***として記録されます。
出力パスの設定
構成パラメータaudit_log_pathを使用して監査ログの出力パスを設定します。ローカルストレージとクラウドストレージがサポートされています。audit_log_pathの値が指定されていない場合、デフォルトで現在の作業パス ${WORK_DIR}/audit を使用します。
ローカルストレージシナリオ
同一テナント内では、異なるOBServerの監査ログは異なるディレクトリに出力されます。同一クラスタ内で、ユーザーが異なるテナントの出力パスを同一に設定した場合、ディレクトリ構造に
tenant_idという階層が追加されます。ローカル出力ディレクトリ構造は以下の図のとおりです:- ${audit_log_path} - tenant_id_1 - ip1:port1 - audit.log.20231031080646317[.zst] - audit.log.20231031084835263[.zst] - audit.log - ip2:port2 - audit.log.20231031072457838[.zst] - audit.log.20231031093023607[.zst] - audit.log.20231031101213751[.zst] - audit.log - tenant_id_2監査ログの出力ディレクトリをローカルに設定する例を以下に示します。
obclient [test]> ALTER SYSTEM SET audit_log_path='file:///logs/audit';クラウドストレージシナリオ
OceanBaseデータベースは、複数のOBServerから同一の
oss/nfsディレクトリに出力するシナリオをサポートしています。並行書き込みのパフォーマンスや、その後の圧縮・暗号化機能はすべてローカルファイルを対象とするため、アーカイブされたファイルのみがクラウドストレージに保存され、追加書き込みはローカルのauditディレクトリのファイルに行われます。クラウドストレージ上の監査ログを下流で消費する際、最新の一部のレコードはOBServerのローカルにのみ存在し、下流からは見えません。監査ログの出力ディレクトリを
OSSに設定する例を以下に示します。obclient [test]> ALTER SYSTEM SET audit_log_path = 'oss://ob-audit/audit/?host=$OSS_HOST&access_id=$OSS_ACCESS_ID&access_key=$OSS_ACCESS_KEY';ここで、
$OSS_HOST、$OSS_ACCESS_ID、$OSS_ACCESS_KEYは実際のホストアドレス、アクセスキーID、アクセスキーに置き換える必要があります。アクセスキーは暗号化されて保存されます。
ログアーカイブの設定
監査レコードは継続的にaudit.logファイルに追加書き込まれます。構成パラメータaudit_log_rotate_on_sizeを設定することで、ログの自動アーカイブを実現できます。audit.logのサイズが指定された値に達すると、新しいファイルが自動的に生成されます。アーカイブは単一のログファイルのサイズを制御する役割を担い、ファイルのクリーンアップは行いません。
例えば、監査レコードの単一ファイルのサイズを256MBに設定します。
obclient [test]> ALTER SYSTEM SET audit_log_rotate_on_size='256M';
ログのクリーンアップの設定
構成パラメータaudit_log_max_sizeとaudit_log_prune_secondsを使用して、アーカイブ後の監査ログの容量と保存期間を制御します。両者は同時に有効にすることができます。アーカイブログが新しいログファイルを生成するたびに、ログのクリーンアップが必要かどうかをチェックします。ログの総量は各OBServerディレクトリで個別に計算されます。
構成パラメータaudit_log_max_sizeを設定して、単一OBServer上の監査ログの最大保存量を制御します。デフォルトは0Mで、監査ログを保存しないことを意味します。
たとえば、単一OBServer上の監査ログの最大保存量を1Gに設定します。
obclient [test]> ALTER SYSTEM SET audit_log_max_size='1G';
構成パラメータaudit_log_prune_secondsを設定して、監査ログの最大保存時間を秒単位で制御します。単位は省略可能で、デフォルトは0で、監査ログを保存しないことを意味します。
たとえば、監査ログの最大保存時間を2時間に設定します。
obclient [test]> ALTER SYSTEM SET audit_log_prune_seconds=7200;
ログ圧縮の設定(オプション)
構成パラメータaudit_log_compressionを設定して、ログ圧縮の有効化を制御します。圧縮が有効になっている場合、ログアーカイブ時に圧縮済みファイルが直接生成されます。圧縮アルゴリズムはZSTDのみサポートしており、ストリーム圧縮もサポートしています。また、圧縮後のファイルは外部ツールzstdを使用して直接解凍できます。
説明
アーカイブ後のファイルのみが圧縮され、audit.logファイルは圧縮されません。
たとえば、監査ログで使用する圧縮アルゴリズムをZSTDに設定します。
obclient [test]> ALTER SYSTEM SET audit_log_compression='ZSTD';