1. 何が追加されたか
GuardDuty の RDS Protection は、これまで DB へのログインを監視する機能でした。今回追加されたデータアクティビティ監視は、ログインした後に何をしたかを監視します。
| ログイン監視 | データアクティビティ監視 | |
|---|---|---|
| コンソールの表示名 | RDS Login Activity Monitoring | RDS Data Activity Monitoring |
| API の名前 | RDS_LOGIN_EVENTS(features) | RDS_DATA_RISK(AdditionalConfiguration) |
| 見ているもの | ログインの成功・失敗 | クエリのパターン(読み出し・削除の量、接続元など) |
| 検出の例 | 総当たりでのログイン成功、悪意ある IP からのログイン | 普段より大量の行の SELECT、DELETE・DROP、Tor からのクエリ |
| 対応エンジン | Aurora(MySQL / PostgreSQL)、RDS for PostgreSQL・MySQL・MariaDB | Aurora PostgreSQL、RDS for PostgreSQL |
パスワードが漏れていた場合、ログイン自体は「いつものユーザーが、いつもの場所から」行われることがあり、ログイン監視だけでは気づけません。データアクティビティ監視は、ログイン後の読み出しや削除の量が普段と違うことを検出するため、その後ろを補えます。
エージェントの導入、パラメータグループの変更、DB の再起動はいずれも不要です。GuardDuty 側で有効にするだけで監視が始まります。
2. 追加された検出タイプ
データアクティビティ監視で追加された検出タイプは 7 つです。重要度は AWS のドキュメントに記載されている既定値です。
| 検出タイプ | 内容 | 重要度 |
|---|---|---|
| Exfiltration:RDS/AnomalousBehavior | 普段と異なる、大量のデータの読み出し | LOW〜HIGH |
| Impact:RDS/AnomalousBehavior.Delete | 普段と異なる DELETE | LOW〜HIGH |
| Impact:RDS/AnomalousBehavior.Drop | 普段と異なる DROP | MEDIUM〜HIGH |
| Exfiltration:RDS/MaliciousIPCaller | 悪意ある IP からのデータの読み出し | HIGH |
| Exfiltration:RDS/TorIPCaller | Tor の出口ノードからのデータの読み出し | HIGH |
| Impact:RDS/MaliciousIPCaller | 悪意ある IP からの破壊的な操作 | HIGH |
| Impact:RDS/TorIPCaller | Tor の出口ノードからの破壊的な操作 | HIGH |
AnomalousBehavior の 3 つは、接続元と実行したユーザーによって重要度が変わります。
- LOW:プライベートネットワークの IP から実行された(Drop を除く)
- MEDIUM:パブリック IP から実行された(Drop は異常な DROP があった時点で MEDIUM)
- HIGH:量が普段より大幅に多く、かつ見たことのないパブリックネットワークから、または高い権限のロールや管理用クライアントから実行された
VPC 内のアプリケーションサーバーの認証情報が使われた場合、接続元はプライベート IP になるため、Exfiltration と Delete は LOW で出ることがあります。7 章の通知ルールで扱いを決めておきます。
3. 対応する DB とバージョン
| エンジン | データアクティビティ監視の対応バージョン |
|---|---|
| Aurora PostgreSQL | 11.19 / 12.14 / 13.10 / 14.7 / 15.2 以降、およびそれ以降のメジャーバージョン |
| RDS for PostgreSQL | 11.20 / 12.15 / 13.11 / 14.8 / 15.3 以降、およびそれ以降のメジャーバージョン |
| Aurora MySQL・RDS for MySQL・RDS for MariaDB | 非対応(ログイン監視のみ) |
| Aurora PostgreSQL Limitless Database | 非対応(ログイン監視のみ) |
RDS for PostgreSQL のリードレプリカは、プライマリが対応バージョンで、正常にレプリケーションされていることが条件です。MySQL 系の DB しかないアカウントでは、データアクティビティ監視の検出は出ません。
4. コンソールで有効にする
Organizations を使っている場合、設定を変更できるのは GuardDuty の委任管理者アカウントだけです(メンバーアカウントからは変更できません)。当社ではセキュリティ専用アカウントを委任管理者にしているので、そこから操作しました。
- 委任管理者アカウントで GuardDuty コンソールを開く
- 左メニューの「Protection Plans」→「Configure all enablements」
- 「RDS Protection」の下に「RDS Login Activity Monitoring」と「RDS Data Activity Monitoring」が並んでいる
- 「RDS Data Activity Monitoring」の「This account」を Enabled、「Auto enable for organization accounts」を「Enable for all accounts」にする
- 「Save all」→「Confirm and save」
画面には「RDS Protection for login activity is required for RDS Protection for data activity to function.」と表示されます。ログイン監視が無効なアカウントでは、先にログイン監視を有効にします。
「Enable for all accounts」は、既存のメンバーアカウントと、今後組織に追加されるアカウントの両方が対象です。新しいアカウントだけを対象にする場合は「Configure accounts manually」→「Automatically enable for new member accounts」を選びます。
5. AWS CLI で有効にする
データアクティビティ監視は、RDS_LOGIN_EVENTS の AdditionalConfiguration に RDS_DATA_RISK として指定します。以下はすべて委任管理者アカウント(プロファイル example-security)で実行します。
委任管理者アカウント自身
DET=$(aws guardduty list-detectors --query 'DetectorIds[0]' --output text \
--profile example-security)
aws guardduty update-detector \
--detector-id $DET \
--features '[{
"Name": "RDS_LOGIN_EVENTS",
"Status": "ENABLED",
"AdditionalConfiguration": [
{ "Name": "RDS_DATA_RISK", "Status": "ENABLED" }
]
}]' \
--profile example-security組織の全アカウント(既存 + 新規)
aws guardduty update-organization-configuration \
--detector-id $DET \
--auto-enable-organization-members ALL \
--features '[{
"Name": "RDS_LOGIN_EVENTS",
"AutoEnable": "ALL",
"AdditionalConfiguration": [
{ "Name": "RDS_DATA_RISK", "AutoEnable": "ALL" }
]
}]' \
--profile example-securityAutoEnable を NEW にすると新規アカウントだけ、NONE にすると自動有効化をやめます。
特定のメンバーアカウントだけ
aws guardduty update-member-detectors \
--detector-id $DET \
--account-ids <ACCOUNT_ID_1> <ACCOUNT_ID_2> \
--features '[{
"Name": "RDS_LOGIN_EVENTS",
"Status": "ENABLED",
"AdditionalConfiguration": [
{ "Name": "RDS_DATA_RISK", "Status": "ENABLED" }
]
}]' \
--profile example-security成功すると UnprocessedAccounts が空の配列で返ります。ログイン監視は有効のまま、データアクティビティ監視だけを止める場合は、RDS_DATA_RISK の Status を DISABLED にします。
全リージョンにまとめて適用する
for r in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text \
--profile example-security); do
DET=$(aws guardduty list-detectors --region $r \
--query 'DetectorIds[0]' --output text --profile example-security)
aws guardduty update-organization-configuration --region $r \
--detector-id $DET \
--auto-enable-organization-members ALL \
--features '[{"Name":"RDS_LOGIN_EVENTS","AutoEnable":"ALL",
"AdditionalConfiguration":[{"Name":"RDS_DATA_RISK","AutoEnable":"ALL"}]}]' \
--profile example-security
done6. 有効化の確認
有効にした直後のコンソールでは、委任管理者アカウント自身は Enabled(Free trial: 30 days)になりましたが、「Active organization member accounts」は 0/3 のままでした。AWS のドキュメントにある通り、メンバーアカウントへの反映には最大 24 時間かかります。
# 委任管理者アカウント自身の状態 aws guardduty get-detector --detector-id $DET --profile example-security \ --query 'Features[?Name==`RDS_LOGIN_EVENTS`]' # メンバーアカウントごとの状態 aws guardduty get-member-detectors --detector-id $DET \ --account-ids <ACCOUNT_ID_1> <ACCOUNT_ID_2> --profile example-security \ --query 'MemberDataSourceConfigurations[].[AccountId, Features[?Name==`RDS_LOGIN_EVENTS`].AdditionalConfiguration[]]'
RDS_DATA_RISK の Status が ENABLED になっていれば完了です。コンソールでは、左メニューの「Accounts」に「RDS data activity」列があり、アカウントごとの状態を一覧で確認できます。
7. 通知ルールの見直し
前回の記事で作った通知ルール(Security Hub に集約された GuardDuty の検出のうち、重要度 MEDIUM 以上・未対応のもの)は、検出タイプで絞っていないため、追加の設定なしで今回の検出も通知されます。
ただし 2 章の通り、VPC 内からの読み出しや削除は LOW で出ることがあり、このルールでは通知されません。LOW の検出は Security Hub の画面で定期的に確認するか、DB の重要度が高い環境では、RDS の検出に限って LOW も通知するルールを別に作ることを検討します。
通知の動作確認には、GuardDuty のサンプル検出を使えます。重要度 HIGH の検出タイプを指定すると、MEDIUM 以上のルールで通知されるかを確認できます。
aws guardduty create-sample-findings \ --detector-id $DET --finding-types "Impact:RDS/MaliciousIPCaller" \ --profile example-security
確認後は、サンプルの検出をアーカイブしておきます。
8. 費用と注意点
- 30 日間の無料トライアルがある。すでにログイン監視を使っているアカウントでも、データアクティビティ監視を初めて有効にしたときにアカウント・リージョンごとに 30 日の無料トライアルが付きます。トライアルが終わっても自動では無効にならないため、期間中に GuardDuty コンソールの「Usage」で月額の見込みを確認します。
- 料金は DB の規模に比例する。ログイン監視とは別に、DB インスタンスの vCPU(Aurora Serverless v2 は ACU)の量に応じて課金されます。単価はリージョンで異なるため、GuardDuty の料金ページで確認してください。
- クエリのログは見られない。GuardDuty はデータアクティビティのログを利用者に公開しません。検出が出たときに「どのテーブルの何行が読まれたか」を調べるには、pgAudit などで DB 側の監査ログを取っておく必要があります。
- 検出は入口であって、対策ではない。AWS が示している対応も、DB ユーザーのパスワード変更、監査ログでの影響範囲の確認、必要に応じたバックアップからの復旧、DB をプライベートサブネットに置きセキュリティグループで接続元を絞ること、です。検出が出る前に、DB がインターネットに公開されていないか、アプリケーション用のユーザーに DROP の権限が付いていないかを確認しておきます。
関連リンク
AWS のセキュリティ設定の点検はセキュリティ無料診断、GuardDuty・Security Hub を含むマルチアカウントの運用は AWS 運用保守サービスで承っています。
参考
よくある質問
QMySQL や MariaDB でもデータアクティビティ監視は使えますか?
2026 年 10 月時点では使えません。対象は Aurora PostgreSQL と RDS for PostgreSQL です。Aurora MySQL・RDS for MySQL・RDS for MariaDB はログイン監視のみ対応しています。
Qデータベースの設定変更や再起動は必要ですか?
不要です。エージェントのインストール、パラメータグループの変更、Database Activity Streams の有効化はいずれも必要なく、GuardDuty 側で有効にするだけです。AWS はデータベースの性能に影響しない設計としています。
Qログイン監視を有効にせずに、データアクティビティ監視だけ使えますか?
使えません。データアクティビティ監視は RDS Protection(ログイン監視)の追加設定(AdditionalConfiguration)として提供されており、ログイン監視が有効なアカウントでのみ有効にできます。
Q有効にしてすぐに検出が出ますか?
通常の利用パターンを学習する期間が最大 2 週間あります。その間は、異常な振る舞いにもとづく検出(AnomalousBehavior)が出ないことがあります。既知の悪意ある IP や Tor からのアクセスにもとづく検出は、学習期間に関係なく出ます。
Q検出が出たとき、実行された SQL を GuardDuty で確認できますか?
GuardDuty はデータアクティビティのログを利用者に公開しません。検出結果にはユーザー名・接続元 IP・対象の DB などが含まれますが、どのデータが読まれたか・消されたかの調査には、pgAudit などで DB 側の監査ログを取っておく必要があります。
