rdsadmin とは何か?Aurora の監査ログに大量出力される rdsadmin ユーザーについてと、rdsadmin に関するアクティビティログを除外する方法
コーヒーが好きな 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
- MySQL 内部のデータやシステム情報を格納するための特別なユーザーです。
- root が変更されてしまったときの不具合を防ぎます。
- ロックされており、ユーザーが直接操作することはできません。
- 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
を設定しています。
- OSCAR (Oracle Standard Cluster and Replication) レプリケーションで使用されるパラメータ
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 へのログ保存量も減るため、コスト削減も期待できます。