RDS for MySQLの監査ログは、rdsadmin等の特定ユーザーのログを除外設定にしても一部のログは保存されます

2024.01.22

困っていた内容

Amazon RDS for MySQLの監査ログを設定する際、AWS側で管理操作するユーザーであるrdsadminのアクティビティログは不要だったため、rdsadminを除外する設定を行いました。

しかし、CloudWatch Logsには以下のようにrdsadminユーザーのログが出力されていました。

20240117 xx:xx:xx,ip-xx-xx-xx-xx,rdsadmin,localhost,xx,xx,DISCONNECT,,,0,SOCKET
20240117 xx:xx:xx,ip-xx-xx-xx-xx,rdsadmin,localhost,xx,CONNECT,,,0,SOCKET

原因と対処方法を教えてください。

どう対応すればいいの?

ドキュメントには、以下の記載があります。

CONNECT アクティビティは、ユーザーがこのオプション設定で指定されていても、すべてのユーザーについて常に記録されます。

そのため、監査ログから特定のユーザーのアクティビティを除外した場合でも、ログに記録するアクティビティのうち、CONNECTログを保存する設定になっていれば、全てのユーザーのCONNECTDISCONNECTが保存されます。

ただし、私が検証したところ、全ユーザーのログを出力する設定からrdsadminを除外する設定に変更した際、監査ログには以下のクエリが保存されていました。これはログを記録する対象ユーザーの除外設定や監査ログファイルの保存場所を指定しています。

設定変更時、下記のクエリは、例外で保存されてしまうのかもしれません。

20240117 xx:xx:x,ip-xx-xx-xx-xx,rdsadmin,localhost,xxxxx,xxxxx,QUERY,,'SET GLOBAL server_audit_incl_users = \'\'',0,,
20240117 xx:xx:x,ip-xx-xx-xx-xx,rdsadmin,localhost,xxxxx,xxxxx,QUERY,,'SET GLOBAL server_audit_file_path = \'/rdsdbdata/log/audit/\'',0,,
20240117 xx:xx:x,ip-xx-xx-xx-xx,rdsadmin,localhost,xxxxx,xxxxx,QUERY,,'SET GLOBAL server_audit_incl_users = \'\'',0,,
20240117 xx:xx:x,ip-xx-xx-xx-xx,rdsadmin,localhost,xxxxx,xxxxx,QUERY,,'SET GLOBAL server_audit_excl_users = \'rdsadmin\'',0,,

除外したユーザーのうち、CONNECTDISCONNECT、上記のクエリ以外のアクティビティもログに出力されている場合、監査ログ設定のミスの可能性があるため、設定を見直しましょう。

確認方法としては、オプショングループのオプション(MARIADB_AUDIT_PLUGIN)の中で、SERVER_AUDIT_EXCL_USERSにrdsadminが設定されているかを確認します。

SERVER_AUDIT_EVENTSでは、デフォルトで[CONNECT,QUERY]と設定されているため、SERVER_AUDIT_EXCL_USERSに設定したユーザーも含めて全てのユーザーで接続ログが保存されます。

rdsadminが設定されていなかった場合は、ユーザー名を入力して[すぐに適用]をクリックし、設定を保存して反映させます。

設定はこれで完了です。

ちなみに、RDS for MySQLだけでなく、Aurora MySQLクラスターにおいても、接続記録を保存する設定を行った場合、全ユーザーに対する接続ログが保存されることになります。

接続および切断イベントは、この可変の影響を受けません。指定された場合は常に記録されます。