Amazon RDS for MySQLで接続元のログを取得したい
こんにちは、まるとです。
監査要件の都合上、Amazon RDS for MySQLでログを取得したい場合はありませんか。
Amazon RDS for MySQLでは標準では接続元ログが取得されない形となっています。
今回は、接続元ログを取得する方法を紹介します。
先に結論
- オプショングループを作成 or 既存のオプショングループを変更する
- 変更する内容はMariaDB Audit Pluginの追加、設定
- 接続元ログは
SERVER_AUDIT_EVENTSでCONNECTを入れるのがポイント
- 接続元ログは
- 変更する内容はMariaDB Audit Pluginの追加、設定
やってみる
接続元ログをはじめとした監査ログを取得するには、MariaDB Audit Pluginの追加が必要となります。
MariaDBと記載がありますが、MySQLでも利用できます。
MySQL 用の監査プラグインは、MariaDB 監査プラグインをベースにしています。この記事では、これを MariaDB 監査プラグインと呼びます。
1. オプショングループの作成・編集
利用しているMySQLのバージョンに合わせてオプショングループを作ります。

続いて、作成したオプショングループに「オプションを追加」します。

オプションの追加画面では、以下の設定を行います。
| 項目名 | 設定値 | 備考 |
|---|---|---|
| オプション名 | MARIADB_AUDIT_PLUGIN | MariaDB Audit Pluginを対象に設定 |
| SERVER_AUDIT_EVENTS | CONNECT | データベースへの接続・切断を記録 |
| すぐに適用 | 任意の値 | Yesの場合かつオプショングループがすでにRDSインスタンスに紐づいている場合は即時適用 |
ポイントはSERVER_AUDIT_EVENTSでCONNECTを入れることです。
SERVER_AUDIT_EVENTSの値によって記録するログを変更します。今回の要件では接続元に関するログが欲しいため、CONNECTを指定しています。
その他、クエリの内容なども記録できますが、ログの出力量が増えるため必要なもののみに絞ることをお勧めします。

設定できる値と説明
| パラメータ名 | 説明 |
|---|---|
| CONNECT | 接続成功、失敗、切断時に接続元IPアドレスなどを記録 |
| QUERY | 全てのクエリをで記録 |
| QUERY_DDL | DDLクエリ(CREATE、ALTERなど)のみで記録 |
| QUERY_DML | DMLクエリ(INSERT、UPDATE、SELECTなど)のみで記録 |
| QUERY_DML_NO_SELECT | SELECTを除くDMLクエリを記録 |
| QUERY_DCL | DCLクエリ(GRAND、REVOKEなど)のみを記録 |
参考
2. オプショングループをRDSインスタンスに紐づける
オプショングループを設定した後はRDSインスタンスを変更し、設定したオプショングループを紐付けます。

また、CloudWatch Logsにログを出力したい場合は、「ログのエクスポート」で「監査ログ」を選択します。
※ ログを長期間保管したい場合などは設定をお勧めします。ただし、CloudWatch Logsの料金が発生するためご注意ください。

設定したら、RDSインスタンスの変更を適用します。
接続してみる
RDSインスタンスのログを確認すると、audit/server_audit.logが新規で作成されています。

この状態で試しに接続してみます。(簡易的にCloudSHellからアクセスしてみました。)

接続後、該当ログを表示してみると接続ログが記録されていました。(IPアドレスも確認できますね。)

終わりに
セキュリティポリシー上監査ログが必要となった際、どうすれば良いのかを実際にみてみました。
接続元IP以外にも簡単な設定でさまざまな情報を取得できるようになるため、「RDSで監査ログが欲しいのだけど...」というシーンがでてきたらぜひ参考にしていただけると幸いです。
参考文献






