TiDB Cloud Essentialのデータベース監査ログ機能 (PREVIEW)
TiDB Cloud Essentialは、実行されたSQLステートメントなど、データベースへのユーザーアクセスアクティビティを記録する監査ログ機能を提供します。
組織のユーザーアクセスポリシーやその他の情報セキュリティ対策の有効性を評価するには、データベース監査ログを定期的に分析することがセキュリティ上のベストプラクティスです。
監査ログ機能はデフォルトでは無効になっています。TiDB Cloud Essentialインスタンスの監査を行うには、監査ログを有効にする必要があります。
監査ログの設定
データ編集
TiDB Cloud Essentialは、デフォルトでは監査ログ内の機密データをマスキングします。以下のSQL文を例に挙げます。
INSERT INTO `test`.`users` (`id`, `name`, `password`) VALUES (1, 'Alice', '123456');
以下のように編集されています。
INSERT INTO `test`.`users` (`id`, `name`, `password`) VALUES ( ... );
ログファイルのローテーション
TiDB Cloud Essentialは、以下のいずれかの条件が満たされた場合に新しい監査ログファイルを生成します。
- 現在のログファイルがローテーションサイズ(デフォルトでは100MiB)に達しました。
- 前回のログ生成から、ローテーション間隔(デフォルトでは1時間)が経過しました。内部スケジューリングメカニズムによっては、ログ生成が数分遅れる場合があります。
監査ログの場所
監査ログは以下の場所に保存できます。
Amazon S3
監査ログをAmazon S3に保存するには、以下の情報を提供する必要があります。
- URI:
s3://<bucket-name>/<folder-path>/ - アクセス認証情報:以下のいずれかを選択してください。
詳細については、 Amazon S3へのアクセスを設定するを参照してください。
Google Cloud Storage
監査ログをGoogle Cloud Storageに保存するには、以下の情報を提供する必要があります。
- URI:
gs://<bucket-name>/<folder-path>/ - アクセス資格情報:
storage.objects.createおよびstorage.objects.delete権限を持つサービスサービスアカウントキー。
詳細については、 GCSへのアクセスを設定するを参照してください。
Azure Blob Storage
Azure Blob Storage に監査ログを保存するには、以下の情報を提供する必要があります。
- URI:
azure://<account-name>.blob.core.windows.net/<container-name>/<folder-path>/またはhttps://<account-name>.blob.core.windows.net/<container-name>/<folder-path>/ - 共有アクセス署名(SAS)トークン資格情報:
ReadおよびWriteおよび {ContainerObject権限を持つ共有アクセス宣言(SAS) ブラウザ。
詳細については、 Azure Blob Storageへのアクセスを構成するを参照してください。
アリババクラウドOSS
Alibaba Cloud OSSに監査ログを保存するには、以下の情報を提供する必要があります。
- URI:
oss://<bucket-name>/<folder-path>/ - アクセス資格情報: OSS バケットへのデータのエクスポートを許可する
oss:PutObjectおよびoss:GetBucketInfo権限を持つアクセスキーペアキーペア。
詳細については、 Alibaba Cloudオブジェクトストレージサービス(OSS)へのアクセスを設定するを参照してください。
監査ログフィルタルール
監査ログをフィルタリングするには、ログに記録するイベントを指定するフィルタルールを作成する必要があります。
フィルタルールには以下のフィールドが含まれます。
users: 監査イベントをフィルタリングするためのユーザー名のリスト。ワイルドカード%を使用すると、任意のユーザー名に一致させることができます。filters: フィルタオブジェクトのリスト。各フィルタオブジェクトには、次のフィールドが含まれます。classes: 監査イベントをフィルタリングするためのイベントクラスのリスト。例:["QUERY", "EXECUTE"]。tables: テーブル フィルターのリスト。詳細については、 テーブルフィルターを参照してください。statusCodes: 監査イベントをフィルタリングするためのステータスコードのリスト。1は成功、0は失敗を意味します。
以下の表は、データベース監査ログにおけるすべてのイベントクラスを示しています。
監査ログの設定
監査ログの有効化、編集、無効化が可能です。
監査ログを有効にする
TiDB CloudコンソールまたはTiDB Cloud CLIを使用して、 TiDB Cloud Essentialインスタンスの監査ログを有効にすることができます。
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
対象のTiDB Cloud Essentialインスタンスの名前をクリックして概要ページに移動し、左側のナビゲーションペインで「設定」 > 「DB監査ログ」をクリックします。
DB監査ログのページで、 [有効にする]をクリックします。
監査ログのストレージの場所を選択し、必要な情報を入力します。次に、 「接続をテスト」をクリックし、「次へ」または「次へ」をクリックします。利用可能なストレージの場所の詳細については、監査ログの場所を参照してください。
データベース監査ログ設定ダイアログで、ログファイルのローテーションとログのマスキング設定を入力し、 [保存]をクリックします。
Amazon S3ストレージを例にとってみましょう。監査ログを有効にして監査ログをAmazon S3に保存するには、次のコマンドを実行します。
ticloud serverless audit-log config update -c <cluster-id> --enabled --cloud-storage S3 --s3.uri <s3-url> --s3.access-key-id <s3-access-key-id> --s3.secret-access-key <s3-secret-access-key> --rotation-size-mib <size-in-mb> --rotation-interval-minutes <interval-in-minutes> --unredacted=<true|false>
--rotation-size-mib 、 --rotation-interval-minutes 、および--unredactedパラメータはオプションです。これらを指定しない場合、デフォルト値が使用されます。
監査ログの編集
TiDB Cloud Essentialインスタンスの監査ログは、有効化後に編集できます。
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
対象のTiDB Cloud Essentialインスタンスの名前をクリックして概要ページに移動し、左側のナビゲーションペインで「設定」 > 「DB監査ログ」をクリックします。
DB監査ログのページで、 [設定]をクリックします。
データベース監査ログ設定ダイアログで、ログファイルのローテーションまたはログのマスキング設定を更新し、 [保存]をクリックします。
TiDB Cloud CLI を使用して監査ログ設定を更新するには、次のコマンドを実行します。
ticloud serverless audit-log config update -c <cluster-id> --rotation-size-mib <size-in-mb> --rotation-interval-minutes <interval-in-minutes> --unredacted=<true|false>
監査ログを無効にする
TiDB Cloud Essentialインスタンスの監査ログを無効にすることができます。
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
対象のTiDB Cloud Essentialインスタンスの名前をクリックして概要ページに移動し、左側のナビゲーションペインで「設定」 > 「DB監査ログ」をクリックします。
DB監査ログのページで、右上隅の...をクリックし、次に無効にします。
「DB監査ログを無効にする」ダイアログで、 「無効にする」をクリックします。
TiDB Cloud CLI を使用して監査ログを無効にするには、次のコマンドを実行します。
ticloud serverless audit-log config update -c <cluster-id> --disabled=true
監査ログフィルタルールの管理
監査ログフィルタルールを作成、編集、無効化、削除できます。
フィルタルールを作成する
フィルタルールを作成するには、監査ログに記録するユーザーとイベントを定義します。ユーザー、イベントクラス、テーブル、ステータスコードを指定することで、ログ記録をニーズに合わせてカスタマイズできます。
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
対象のTiDB Cloud Essentialインスタンスの名前をクリックして概要ページに移動し、左側のナビゲーションペインで「設定」 > 「DB監査ログ」をクリックします。
DB監査ログのページで、 [フィルタルールの追加]をクリックします。
[フィルター ルールの追加]ダイアログで、 [フィルター名] 、 [SQL ユーザー] 、および[フィルター ルール]フィールドに入力し、 [確認]をクリックします。これらのフィールドの詳細については、監査ログフィルタルールを参照してください。
TiDB Cloud CLI を使用してフィルタルールを作成するには、次のコマンドを実行します。
ticloud serverless audit-log filter create --cluster-id <cluster-id> --display-name <rule-name> --rule '{"users":["%@%"],"filters":[{}]}'
フィルタールールを編集する
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
対象のTiDB Cloud Essentialインスタンスの名前をクリックして概要ページに移動し、左側のナビゲーションペインで「設定」 > 「DB監査ログ」をクリックします。
DB監査ログページで、編集するフィルタルールを見つけ、その行の...をクリックしてから、 [編集]をクリックします。
「フィルタールールの編集」ダイアログで、 「フィルター名」または「フィルタールール」フィールドを更新し、 「確認」をクリックします。
TiDB Cloud CLI を使用してフィルタルールを編集するには、次のコマンドを実行します。
ticloud serverless audit-log filter update --cluster-id <cluster-id> --filter-rule-id <rule-id> --rule '{"users":["%@%"],"filters":[{"classes":["QUERY"],"tables":["test.t"]}]}'
フィルタルールを無効にする
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
対象のTiDB Cloud Essentialインスタンスの名前をクリックして概要ページに移動し、左側のナビゲーションペインで「設定」 > 「DB監査ログ」をクリックします。
DB監査ログのページで、無効にしたいフィルタルールを見つけ、トグルをオフにしてフィルタルールを無効にします。
TiDB Cloud CLI を使用してフィルタルールを無効にするには、次のコマンドを実行します。
ticloud serverless audit-log filter update --cluster-id <cluster-id> --filter-rule-id <rule-id> --enabled=false
フィルタルールを削除する
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
対象のTiDB Cloud Essentialインスタンスの名前をクリックして概要ページに移動し、左側のナビゲーションペインで「設定」 > 「DB監査ログ」をクリックします。
DB監査ログページで、削除するフィルタルールを見つけて、 ...をクリックします。
「削除」をクリックし、次に「了解しました。削除して確定します」をクリックしてください。
ticloud serverless audit-log filter delete --cluster-id <cluster-id> --filter-rule-id <rule-id>
監査ログフィールド
TiDB Cloudは、監査ログ内の各データベースイベントレコードに対して、以下のフィールドを提供します。
一般情報
すべての監査ログの種類には、以下の情報が含まれています。
SQLステートメント情報
イベントクラスがQUERYまたはQUERYのサブクラスである場合、監査ログには次の情報が含まれます。
接続情報
イベントクラスがCONNECTIONまたはCONNECTIONのサブクラスである場合、監査ログには次の情報が含まれます。
監査操作情報
イベントクラスがAUDITまたはAUDITのサブクラスである場合、監査ログには次の情報が含まれます。
監査ログの制限
TiDB Cloud Essential は監査ログの順序を保証しないため、最新のイベントを見つけるにはすべてのログファイルを確認する必要がある場合があります。ログを時系列順に並べ替えるには、監査ログのTIMEフィールドを使用できます。