表題の通り調査する機会があったため、記録として残しておきます。 監査要件や運用管理を検討する際の一助となれば幸いです。
本記事の情報は、2024年12月9日時点の調査結果に基づいています。
今回の調査で知りたかったのは大まかに以下の 3 つです。
- Amazon RDS で利用可能な監査ログの種類
- 各データベースエンジン(SQL Server、PostgreSQL、MySQL、MariaDB、Aurora)ごとの違い
- AWS サービス(CloudWatch Logs など)へのログ出力が可能か
調査対象
今回調査した対象のDBエンジンは以下の通りです。
- SQL Server
- PostgreSQL
- MySQL
- MariaDB
- Aurora (MySQL 互換 / PostgreSQL 互換)
各データベースエンジンごとの調査結果
1. Amazon RDS for SQL Server
| 種別 | 結果 | 備考 |
|---|---|---|
| クエリログ | 〇 | データベースレベルの監査で各操作(INSERT、UPDATE、DELETEなど)がキャプチャ可能 |
| コネクションログ | 〇 | |
| AWSサービスへの出力 | 〇 | 設定を行うことで、ファイルサイズ制限に達した際にS3バケットにアップロードされる |
- 監査ログ保存
- ログはRDSインスタンスに保存され、オプショングループで保存期間を指定可能
- RDS インスタンス内での最大保持期間:35日間
- クエリを実行して監査ログを確認可能
- マルチAZの場合、データベース監査仕様は全ノードにレプリケートされるが、サーバーレベル監査は手動で作成が必要
参考: Amazon RDS for SQL Server の DB インスタンスの監査
2. PostgreSQL
| 種別 | 結果 | 備考 |
|---|---|---|
| クエリログ | 〇 | デフォルトでログイン失敗、致命的エラー、デッドロックなどをキャプチャlog_statement パラメータを指定することで詳細なログ取得可能 |
| コネクションログ | 〇 | log_connections、log_disconnectionsパラメータで記録可能 |
| AWSサービスへの出力 | 〇 | CloudWatch Logsに発行可能 パフォーマンス低下やセキュリティ監査に有用な情報を取得可能 |
- 監査エクステンション:
pgAudit- DMLステートメントをセッションごと、オブジェクトごとに監査可能
- ログ容量増大に注意
参考: RDS for PostgreSQL データベースログファイル
3. RDS for MySQL および MariaDB
| 種別 | 結果 | 備考 |
|---|---|---|
| クエリログ | 〇 | デフォルトでエラーログ、スロークエリログ、全般ログが取得可能 |
| コネクションログ | 〇 | MariaDB監査プラグインを有効化することで監査ログ取得可能 |
| AWSサービスへの出力 | 〇 | CloudWatch Logsに発行可能 |
監査ログは RDS for MySQL,MariaDB 共に MariaDB監査プラグイン を有効化することで取得可能。
有効化した監査ログでは以下のフィールドが取得可能。
| フィールド | 説明 |
|---|---|
| timestamp | YYYYMMDD の後、ログに記録されたイベントの HH:MI:SS (24 時間制) が続きます |
| serverhost | イベントが記録されているインスタンスの名前 |
| username | ユーザーの接続されたユーザー名 |
| host | ユーザーの接続元のホスト |
| connectionid | 記録されたオペレーションの接続 ID 番号 |
| queryid | クエリ ID 番号。リレーショナルテーブルイベントと関連するクエリの検索に使用できるTABLE イベントの場合、複数の行が追加される |
| オペレーション | 記録されたアクションの種類 指定できる値は CONNECT、QUERY、READ、WRITE、CREATE、ALTER、RENAME、DROP |
| データベース | USE コマンドにより設定されたアクティブなデータベース |
| オブジェクト | QUERY イベントの場合、この値は、データベースが実行したクエリを示すTABLE イベントの場合、テーブル名を示す |
| retcode | 記録されたオペレーションのリターンコード |
| connection_type | サーバーとの接続のタイプを示す 0: 未定義 1: TCP/IP 2: ソケット 3: 名前付きパイプ 4: SSL/TLS 5: 共有メモリ ※ RDS for MySQL バージョン 5.7.34 以降の 5.7 バージョン、およびすべての 8.0 バージョンのみに含まれる |
参考: MySQL に対する MariaDB 監査プラグインのサポート
4. Amazon Aurora(MySQL互換 / PostgreSQL互換)
| 種別 | 結果 | 備考 |
|---|---|---|
| クエリログ | 〇 | MySQL互換: Advanced Auditing機能で詳細な監査ログ取得可能。 PostgreSQL互換: 標準設定と拡張機能利用可能 |
| コネクションログ | 〇 | 上記と同様 |
| AWSサービスへの出力 | 〇 | 各互換エディションの方法に従いログ取得可能 |
Amazon Auroraでは、以下の方法で監査ログを取得できます。
Aurora MySQL互換エディション
Advanced Auditing機能を使用して、接続、クエリ、テーブルアクセスなどのイベントを監査できます。
この機能は、DBクラスタパラメータグループで設定。
Advanced Auditing 機能で取得できるフィールドは以下です。
| フィールド | 説明 |
|---|---|
| timestamp | 記録されたイベントの UNIX タイムスタンプ |
| serverhost | イベントが記録されているインスタンスの名前 |
| username | ユーザーの接続されたユーザー名 |
| host | ユーザーの接続元のホスト |
| connectionid | 記録されたオペレーションの接続 ID 番号 |
| queryid | クエリ ID 番号 リレーショナルテーブルイベントと関連するクエリの検索に使用できます TABLE イベントの場合、複数の行が追加される |
| オペレーション | 記録されたアクションの種類。指定できる値は CONNECT、QUERY、READ、WRITE、CREATE、ALTER、RENAME、DROP |
| データベース | USE コマンドにより設定されたアクティブなデータベース |
| オブジェクト | QUERY イベントの場合、この値は、データベースが実行したクエリを示すTABLE イベントの場合、テーブル名を示す |
| retcode | 記録されたオペレーションのリターンコード |
Aurora PostgreSQL互換エディション
標準のPostgreSQLと同様に、log_statementパラメータの設定や、サードパーティ製拡張機能(pgAudit)を使用して監査ログを取得できます。
ただし、使用する DB バージョンが拡張機能によってサポートされているか確認が必要です。
まとめ
監査ログの種類と対応状況としては、SQL Server、PostgreSQL、MySQL/MariaDB、Aurora のいずれも監査ログの取得が可能であり、運用やセキュリティ要件に応じた設定が可能であることがわかりました。 ただ、各エンジンごとに利用可能なログや取得方法に違いがあるため、どういったログを取得する必要があるかもエンジンの選定に関係しそうです。
PostgreSQL の pgAudit や MySQL/MariaDB の監査プラグインのように、拡張機能の利用が必要な場合は、事前にパフォーマンスへの影響や使用する拡張機能と DB エンジンバージョンの互換性、適用手順を十分に確認する必要あります。
参考資料
- Amazon RDS for SQL Server の DB インスタンスの監査
- RDS for PostgreSQL データベースログファイル - Amazon Relational Database Service
- RDS および Aurora PostgreSQL ログの操作: パート 1 | AWS データベース ブログ
- Working with RDS and Aurora PostgreSQL logs: Part 2 | AWS Database Blog
- pgAudit を使用してデータベースのアクティビティを記録する - Amazon Relational Database Service
- PostgreSQL: ドキュメント: 19.8.3. What to Log
- Amazon RDS for Postgre SQL の拡張機能バージョン
- pgaudit/README.md at main · pgaudit/pgaudit
- RDS for MySQL データベースログの概要 - Amazon Relational Database Service
- MySQL に対する MariaDB 監査プラグインのサポート - Amazon Relational Database Service
- aws/audit-plugin-for-mysql: Audit Plugin for MySQL Server
- RDS for PostgreSQL DB インスタンスのクエリログ記録をオンにする
- Amazon Aurora MySQL DB クラスターでのアドバンストな監査の使用 - Amazon Aurora