rdsadmin とは何か?Aurora の監査ログに大量出力される rdsadmin ユーザーについてと、rdsadmin に関するアクティビティログを除外する方法

rdsadmin によるアクティビティの数はかなり多く、不審なアクティビティがあったとき、誰が操作したのか確認したいときなどにノイズになる可能性があります。 カスタムクラスターパラメーターグループで server_audit_excl_users パラメーターに rdsadmin を設定すると、監査ログから rdsadmin のログを除外することができます。
2023.05.05

コーヒーが好きな emi です。

Aurora MySQL 互換クラスターの監査ログを確認したところ、rdsadmin というユーザーの監査ログが大量出力されていました。自身がマスターユーザーで操作したログにたどり着くのに苦労したため、rdsadmin が何者なのか調査しました。
ついでに特定ユーザーの監査ログを除外する設定も発見したので、rdsadmin の監査ログを除外してみました。

監査ログが「rdsadmin」のログで埋め尽くされる

以下のような構成で Amazon Aurora MySQL 互換クラスターの監査ログを CloudWatch Logs にエクスポートしています。

項目 詳細
エンジンのタイプ Aurora(MySQL Compatible)
エンジンバージョン 5.7.mysql_aurora.2.11.2
キャパシティータイプ プロビジョニング済み: シングルマスター

Aurora MySQL 互換クラスターの監査ログを CloudWatch Logs にエクスポートする方法については以下ブログを参照ください。

CloudWatch Logs にエクスポートした Amazon Aurora MySQL 互換クラスターの監査ログを、CloudWatch Logs Insights で表示してみます。

fields @timestamp, @message
| sort @timestamp desc
| limit 25

画像の通り監査ログが表示されますが、すべてのログが rdsadmin によるアクティビティです
このように、監査ログを見てみたらほとんどのアクティビティが rdsadmin によるもので埋め尽くされており、確認したいログになかなかたどり着けないことがあります。

「rdsadmin」の詳細

rdsadmin とは何者なのでしょうか?

作成直後の Aurora MySQL 互換クラスターにログインし、以下のようにユーザーを確認すると 3 つユーザーが存在します。

MySQL [(none)]> SELECT Host, User FROM mysql.user;
+-----------+-----------+
| Host      | User      |
+-----------+-----------+
| %         | admin     |
| localhost | mysql.sys |
| localhost | rdsadmin  |
+-----------+-----------+
3 rows in set (0.01 sec)

MySQL [(none)]>

最初に結論ですが、rdsadmin は AWS 側の管理操作をおこなうユーザーで、Aurora のレプリケーションステータス確認などを裏でおこなっています。

  • マスターユーザー
    • デフォルトで admin となります。Aurora 作成時に他の名前を付けることも可能です。
  • mysql.sys
  • rdsadmin
    • AWS 側の管理操作をおこなうユーザーです。
    • Aurora のレプリケーションステータス確認等をおこなっています。

AWS 公式ドキュメント「Aurora MySQL でのマスターユーザー特権」には以下のように記載されています。

各 DB クラスターに管理サービスを提供するために、DB クラスターの作成時に admin および rdsadmin ユーザーが作成されます。rdsadmin アカウントの削除、名前の変更、パスワードの変更、または権限の変更を行おうとすると、エラーになります。

rdsadmin の権限は以下のように全権限が付与されています。GRANT OPTION によって自分が所有している権限を他のユーザーに付与または取り消すことも可能です。

MySQL [(none)]> SHOW GRANTS FOR rdsadmin@localhost;
+-------------------------------------------------------------------------+
| Grants for rdsadmin@localhost                                           |
+-------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'rdsadmin'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------------+
1 row in set (0.00 sec)

MySQL [(none)]>

マスターユーザー admin は以下のような権限が付与されています。

MySQL [(none)]> SHOW GRANTS FOR admin@'%';
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for admin@%                                                                                                                                                                                      |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA, INVOKE SAGEMAKER, INVOKE COMPREHEND ON *.* TO 'admin'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MySQL [(none)]>

マスターユーザー admin には以下の権限が付与されていないことがわかります。

rdsadmin のアクティビティを少し抜き出して見てみます。

  • SET @@sql_log_bin=on
    • MySQL でバイナリログを有効化しています。バイナリログは MySQL が実行されているサーバーで実行されたすべてのクエリを記録するために使用されるログ形式であり、バックアップやレプリケーションなどの目的で使用されます。
  • INSERT INTO mysql.rds_heartbeat2(id, value) values (1,1682910899768) ON DUPLICATE KEY UPDATE value = 1682910899768'
    • INSERT では ID と値(ミリ秒単位の UNIX タイムスタンプ)のペアを mysql.rds_heartbeat2 テーブルに挿入し、ON DUPLICATE KEY UPDATE で既に ID が存在する場合はレコードの値を更新するよう指定しています。
  • set local oscar_local_only_replica_host_status=0, set local oscar_local_only_replica_host_status=1
    • OSCAR (Oracle Standard Cluster and Replication) レプリケーションで使用されるパラメータ oscar_local_only_replica_host_status を設定しています。
  • SELECT durable_lsn, current_read_point, server_id, last_update_timestamp FROM information_schema.replica_host_status
    • レプリケーションの進行状況を確認するために使用されるもので、information_schema.replica_host_status テーブルから情報を取得します。
  • SELECT @@aurora_reserved_memory_pct
    • Aurora クラスターで予約されたメモリの割合を取得するために使用されます。

これらより、rdsadmin は利用者からは操作できない AWS 側の内部的な操作や、データベースエンジンが搭載されている RDS インスタンス自体の操作、Aurora のレプリケーション状態の確認等をおこなうものであるとわかります。

監査ログから「rdsadmin」のログを除外する方法

rdsadmin ユーザーによって AWS 側の管理操作が行われており、内部的にどのような操作が走っているのかも確認できることが分かりました。
しかし、rdsadmin によるアクティビティの数はかなり多く、不審なアクティビティがあったとき、誰が操作したのか確認したいときなどにノイズになる可能性があります。

カスタムクラスターパラメーターグループで server_audit_excl_users パラメーターに rdsadmin を設定すると、監査ログから rdsadmin のログを除外することができます。

監査ログから rdsadmin を除外する対象の Aurora クラスターに紐づいているカスタムクラスターパラメーターグループを選択します。

カスタムクラスターパラメーターグループ画面に遷移したら、server_audit_excl_users パラメーターを検索し、[パラメーターの編集] をクリックして編集します。

server_audit_excl_users パラメーターの値に rdsadmin を入力し、[変更のプレビュー] をクリックします。

「新しい値」に rdsadmin が入っていることを確認し、[変更の保存] で変更を保存します。

これで、rdsadmin によるアクティビティログを除外する設定が完了しました。
再度 Aurora MySQL 互換クラスターの監査ログを CloudWatch Logs Insights で表示してみます。

fields @timestamp, @message
| sort @timestamp desc
| limit 25

上記のように、カスタムクラスターパラメーターグループを変更した時間の後 rdsadmin は除外され表示されないようになり、マスターユーザー admin での操作ログが表示されていることが分かります。

おわりに

Aurora ユーザーガイド server_audit_excl_users では、rdsadmin を含む記載が例示されています。

Contains the comma-delimited list of user names for users whose activity isn't logged. There should be no white space between the list elements, for example: rdsadmin,user_1,user_2.

rdsadmin の監査ログがノイズになってしまう場合は、本設定を実施してみるのはいかがでしょうか。
CloudWatch Logs へのログ保存量も減るため、コスト削減も期待できます。

参考

Amazon Aurora MySQL でのマスターユーザー特権