MOOBON
Technical Article ・ AWS / Security

GuardDuty の RDS データアクティビティ監視を有効にするAurora・RDS for PostgreSQL のデータ持ち出しと削除を検出

2026年10月19日 公開読了 約7分MOOBON 技術ブログ

2026 年 10 月、GuardDuty の RDS Protection に「RDS Data Activity Monitoring」が追加されました。これまでのログイン監視に加えて、DB に対して実行されたクエリのパターンから、データの持ち出し(大量の SELECT)や削除(DELETE・DROP)を検出します。当社の AWS Organizations でも、セキュリティ専用アカウントから組織全体で有効にしました。その手順をまとめます。

1. 何が追加されたか

GuardDuty の RDS Protection は、これまで DB へのログインを監視する機能でした。今回追加されたデータアクティビティ監視は、ログインした後に何をしたかを監視します。

ログイン監視データアクティビティ監視
コンソールの表示名RDS Login Activity MonitoringRDS Data Activity Monitoring
API の名前RDS_LOGIN_EVENTS(features)RDS_DATA_RISK(AdditionalConfiguration)
見ているものログインの成功・失敗クエリのパターン(読み出し・削除の量、接続元など)
検出の例総当たりでのログイン成功、悪意ある IP からのログイン普段より大量の行の SELECT、DELETE・DROP、Tor からのクエリ
対応エンジンAurora(MySQL / PostgreSQL)、RDS for PostgreSQL・MySQL・MariaDBAurora PostgreSQL、RDS for PostgreSQL

パスワードが漏れていた場合、ログイン自体は「いつものユーザーが、いつもの場所から」行われることがあり、ログイン監視だけでは気づけません。データアクティビティ監視は、ログイン後の読み出しや削除の量が普段と違うことを検出するため、その後ろを補えます。

エージェントの導入、パラメータグループの変更、DB の再起動はいずれも不要です。GuardDuty 側で有効にするだけで監視が始まります。

2. 追加された検出タイプ

データアクティビティ監視で追加された検出タイプは 7 つです。重要度は AWS のドキュメントに記載されている既定値です。

検出タイプ内容重要度
Exfiltration:RDS/AnomalousBehavior普段と異なる、大量のデータの読み出しLOW〜HIGH
Impact:RDS/AnomalousBehavior.Delete普段と異なる DELETELOW〜HIGH
Impact:RDS/AnomalousBehavior.Drop普段と異なる DROPMEDIUM〜HIGH
Exfiltration:RDS/MaliciousIPCaller悪意ある IP からのデータの読み出しHIGH
Exfiltration:RDS/TorIPCallerTor の出口ノードからのデータの読み出しHIGH
Impact:RDS/MaliciousIPCaller悪意ある IP からの破壊的な操作HIGH
Impact:RDS/TorIPCallerTor の出口ノードからの破壊的な操作HIGH

AnomalousBehavior の 3 つは、接続元と実行したユーザーによって重要度が変わります。

  • LOW:プライベートネットワークの IP から実行された(Drop を除く)
  • MEDIUM:パブリック IP から実行された(Drop は異常な DROP があった時点で MEDIUM)
  • HIGH:量が普段より大幅に多く、かつ見たことのないパブリックネットワークから、または高い権限のロールや管理用クライアントから実行された

VPC 内のアプリケーションサーバーの認証情報が使われた場合、接続元はプライベート IP になるため、Exfiltration と Delete は LOW で出ることがあります。7 章の通知ルールで扱いを決めておきます。

3. 対応する DB とバージョン

エンジンデータアクティビティ監視の対応バージョン
Aurora PostgreSQL11.19 / 12.14 / 13.10 / 14.7 / 15.2 以降、およびそれ以降のメジャーバージョン
RDS for PostgreSQL11.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 しかないアカウントでは、データアクティビティ監視の検出は出ません。

対応バージョンは今後広がる可能性があります。最新の一覧は「関連リンク」の GuardDuty ユーザーガイドで確認してください。

4. コンソールで有効にする

Organizations を使っている場合、設定を変更できるのは GuardDuty の委任管理者アカウントだけです(メンバーアカウントからは変更できません)。当社ではセキュリティ専用アカウントを委任管理者にしているので、そこから操作しました。

  1. 委任管理者アカウントで GuardDuty コンソールを開く
  2. 左メニューの「Protection Plans」→「Configure all enablements」
  3. 「RDS Protection」の下に「RDS Login Activity Monitoring」と「RDS Data Activity Monitoring」が並んでいる
  4. 「RDS Data Activity Monitoring」の「This account」を Enabled、「Auto enable for organization accounts」を「Enable for all accounts」にする
  5. 「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」を選びます。

GuardDuty の設定はリージョンごとです。RDS を使っているリージョンすべてで同じ操作をします。使っていないリージョンで有効にしても、対象の DB がなければ料金はかかりません。

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-security

AutoEnable を 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
done

6. 有効化の確認

有効にした直後のコンソールでは、委任管理者アカウント自身は 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」列があり、アカウントごとの状態を一覧で確認できます。

有効にしてから最大 2 週間は、通常の利用パターンを学習する期間です。この間は AnomalousBehavior 系の検出が出ないことがあります。新しく作った DB インスタンスも同様です。

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 の権限が付いていないかを確認しておきます。
FAQ

よくある質問

QMySQL や MariaDB でもデータアクティビティ監視は使えますか?
A

2026 年 10 月時点では使えません。対象は Aurora PostgreSQL と RDS for PostgreSQL です。Aurora MySQL・RDS for MySQL・RDS for MariaDB はログイン監視のみ対応しています。

Qデータベースの設定変更や再起動は必要ですか?
A

不要です。エージェントのインストール、パラメータグループの変更、Database Activity Streams の有効化はいずれも必要なく、GuardDuty 側で有効にするだけです。AWS はデータベースの性能に影響しない設計としています。

Qログイン監視を有効にせずに、データアクティビティ監視だけ使えますか?
A

使えません。データアクティビティ監視は RDS Protection(ログイン監視)の追加設定(AdditionalConfiguration)として提供されており、ログイン監視が有効なアカウントでのみ有効にできます。

Q有効にしてすぐに検出が出ますか?
A

通常の利用パターンを学習する期間が最大 2 週間あります。その間は、異常な振る舞いにもとづく検出(AnomalousBehavior)が出ないことがあります。既知の悪意ある IP や Tor からのアクセスにもとづく検出は、学習期間に関係なく出ます。

Q検出が出たとき、実行された SQL を GuardDuty で確認できますか?
A

GuardDuty はデータアクティビティのログを利用者に公開しません。検出結果にはユーザー名・接続元 IP・対象の DB などが含まれますが、どのデータが読まれたか・消されたかの調査には、pgAudit などで DB 側の監査ログを取っておく必要があります。

MOOBONISO/IEC 27001 CertificationAWS Partner Select Tier ServicesKinsta Agency Partner Badge
Copyright © 2026 MOOBON, Inc. All Rights Reserved.
適用規格:ISO/IEC 27001:2022
適用範囲:Web 系システム設計支援 / 自社クラウドサービス開発・運用・保守 / 受託システム開発・運用・保守 / サーバ構築・運用・保守