MOOBON
Technical Article ・ AWS / Security

Enabling GuardDuty RDS Data Activity MonitoringDetecting data exfiltration and deletion in Aurora and RDS for PostgreSQL

Published October 19, 20267 min readMOOBON Tech Blog

In October 2026, GuardDuty RDS Protection gained "RDS Data Activity Monitoring." On top of the existing login monitoring, it looks at the query patterns run against a database and detects data exfiltration (large SELECTs) and deletion (DELETE and DROP). We enabled it across our AWS Organizations from our dedicated security account. Here are the steps.

1. What's new

Until now, GuardDuty RDS Protection monitored logins to a database. The new data activity monitoring looks at what happens after the login.

Login activity monitoringData activity monitoring
Console nameRDS Login Activity MonitoringRDS Data Activity Monitoring
API nameRDS_LOGIN_EVENTS (features)RDS_DATA_RISK (AdditionalConfiguration)
What it watchesSuccessful and failed loginsQuery patterns (volume read or deleted, source, and so on)
Example findingsSuccessful brute-force login, login from a malicious IPSELECTs returning far more rows than usual, DELETE and DROP, queries from Tor
Supported enginesAurora (MySQL / PostgreSQL), RDS for PostgreSQL, MySQL and MariaDBAurora PostgreSQL, RDS for PostgreSQL

If a password has leaked, the login itself may come from "the usual user, from the usual place," and login monitoring alone won't notice. Data activity monitoring detects when the volume of reads or deletes after login differs from normal, so it covers what happens next.

No agent, no parameter group change and no database reboot are needed. Monitoring starts as soon as you enable it in GuardDuty.

2. New finding types

Data activity monitoring adds seven finding types. The severities are the defaults listed in the AWS documentation.

Finding typeDescriptionSeverity
Exfiltration:RDS/AnomalousBehaviorUnusual extraction of a large volume of dataLOW–HIGH
Impact:RDS/AnomalousBehavior.DeleteUnusual DELETE activityLOW–HIGH
Impact:RDS/AnomalousBehavior.DropUnusual DROP activityMEDIUM–HIGH
Exfiltration:RDS/MaliciousIPCallerData extraction from a known malicious IPHIGH
Exfiltration:RDS/TorIPCallerData extraction from a Tor exit nodeHIGH
Impact:RDS/MaliciousIPCallerDestructive statements from a known malicious IPHIGH
Impact:RDS/TorIPCallerDestructive statements from a Tor exit nodeHIGH

For the three AnomalousBehavior types, severity depends on the source and the user who ran the statements.

  • LOW: run from an IP address in a private network (except Drop)
  • MEDIUM: run from a public IP address (Drop is MEDIUM as soon as anomalous DROPs occur)
  • HIGH: the volume is far above normal, and the activity came from a previously unseen public network or was performed by a high-privilege role or administrative client

If the credentials of an application server inside the VPC are used, the source is a private IP, so Exfiltration and Delete findings may come in as LOW. Decide how to handle them in your alert rules (section 7).

3. Supported databases and versions

EngineVersions supported by data activity monitoring
Aurora PostgreSQL11.19 / 12.14 / 13.10 / 14.7 / 15.2 or later, and subsequent major versions
RDS for PostgreSQL11.20 / 12.15 / 13.11 / 14.8 / 15.3 or later, and subsequent major versions
Aurora MySQL, RDS for MySQL, RDS for MariaDBNot supported (login activity monitoring only)
Aurora PostgreSQL Limitless DatabaseNot supported (login activity monitoring only)

RDS for PostgreSQL read replicas require the primary instance to be on a supported version and to be replicating successfully. In an account with only MySQL-family databases, data activity monitoring will not produce findings.

Supported versions may expand. Check the GuardDuty User Guide in "Related links" for the current list.

4. Enable it in the console

With AWS Organizations, only the delegated GuardDuty administrator account can change this setting (member accounts cannot). We use our dedicated security account as the delegated administrator, so we worked from there.

  1. Open the GuardDuty console in the delegated administrator account
  2. In the left menu, choose "Protection Plans" → "Configure all enablements"
  3. Under "RDS Protection", you'll see "RDS Login Activity Monitoring" and "RDS Data Activity Monitoring"
  4. For "RDS Data Activity Monitoring", set "This account" to Enabled and "Auto enable for organization accounts" to "Enable for all accounts"
  5. Choose "Save all" → "Confirm and save"

The screen shows "RDS Protection for login activity is required for RDS Protection for data activity to function." In accounts where login activity monitoring is off, enable it first.

"Enable for all accounts" applies to both existing member accounts and accounts that join the organization later. To cover only new accounts, choose "Configure accounts manually" → "Automatically enable for new member accounts".

GuardDuty settings are per region. Repeat this in every region where you run RDS. Enabling it in a region with no supported databases costs nothing.

5. Enable it with the AWS CLI

Data activity monitoring is specified as RDS_DATA_RISK in the AdditionalConfiguration of RDS_LOGIN_EVENTS. All of the following runs in the delegated administrator account (profile example-security).

The delegated administrator account itself

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

All accounts in the organization (existing + new)

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

Set AutoEnable to NEW to cover only new accounts, or NONE to stop auto-enabling.

Specific member accounts only

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

On success, UnprocessedAccounts is returned as an empty array. To keep login activity monitoring on and turn off only data activity monitoring, set the Status of RDS_DATA_RISK to DISABLED.

Apply to every region at once

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. Check that it's enabled

Right after enabling it, the console showed the delegated administrator account itself as Enabled (Free trial: 30 days), but "Active organization member accounts" stayed at 0/3. As the AWS documentation notes, it can take up to 24 hours for the configuration to reach member accounts.

# status of the delegated administrator account itself
aws guardduty get-detector --detector-id $DET --profile example-security \
  --query 'Features[?Name==`RDS_LOGIN_EVENTS`]'

# status of each member account
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[]]'

You're done when the Status of RDS_DATA_RISK is ENABLED. In the console, the "Accounts" page in the left menu has an "RDS data activity" column showing the status of each account.

For up to two weeks after enabling, GuardDuty learns normal activity. AnomalousBehavior findings may not appear during this period. The same applies to newly created database instances.

7. Review your alert rules

The alert rule from our previous article (GuardDuty findings aggregated in Security Hub with severity MEDIUM or higher and not yet handled) doesn't filter by finding type, so it alerts on the new findings with no extra setup.

However, as noted in section 2, reads and deletes from inside the VPC may be reported as LOW and won't be caught by this rule. Review LOW findings regularly in the Security Hub console, or, where the database is critical, consider a separate rule that alerts on LOW findings for RDS only.

You can test alerts with GuardDuty sample findings. Specifying a HIGH-severity finding type lets you check whether a MEDIUM-or-higher rule sends an alert.

aws guardduty create-sample-findings \
  --detector-id $DET --finding-types "Impact:RDS/MaliciousIPCaller" \
  --profile example-security

Archive the sample findings once you've checked.

8. Costs and caveats

  • There is a 30-day free trial. Even accounts already using login activity monitoring get a 30-day free trial per account and region when they enable data activity monitoring for the first time. It is not disabled automatically when the trial ends, so check the monthly estimate on the "Usage" page of the GuardDuty console during the trial.
  • Cost scales with database size. It is billed separately from login activity monitoring, based on the vCPUs of your database instances (ACUs for Aurora Serverless v2). Prices vary by region, so check the GuardDuty pricing page.
  • You can't see the query logs. GuardDuty doesn't make data activity logs available to you. To find out which rows of which tables were read when a finding appears, you need database-side audit logs, for example with pgAudit.
  • Detection is a starting point, not a fix. The response AWS recommends is to change the database user's password, check the scope in the audit logs, restore from backups if needed, and keep the database in a private subnet with security groups limiting the sources. Before any finding appears, check that the database isn't exposed to the internet and that application users don't have DROP privileges.
FAQ

Frequently Asked Questions

QDoes data activity monitoring work with MySQL or MariaDB?
A

Not as of October 2026. It covers Aurora PostgreSQL and RDS for PostgreSQL. Aurora MySQL, RDS for MySQL and RDS for MariaDB support login activity monitoring only.

QDo I need to change database settings or reboot?
A

No. There is no agent to install, no parameter group change, and no need to turn on Database Activity Streams. You only enable it in GuardDuty. AWS designed it not to affect database performance.

QCan I use data activity monitoring without login activity monitoring?
A

No. Data activity monitoring is an additional configuration (AdditionalConfiguration) of RDS Protection (login activity monitoring), and can only be enabled in accounts where login activity monitoring is on.

QWill findings appear right after enabling it?
A

There is a learning period of up to two weeks to baseline normal activity. During that time, behavior-based findings (AnomalousBehavior) may not appear. Findings based on known malicious IPs or Tor are generated regardless of the learning period.

QCan I see the executed SQL in GuardDuty when a finding appears?
A

GuardDuty doesn't make data activity logs available to you. Findings include the user name, source IP and target database, but to investigate which data was read or deleted you need database-side audit logs, for example with pgAudit.

MOOBONISO/IEC 27001 CertificationAWS Partner Select Tier ServicesKinsta Agency Partner Badge
Copyright © 2026 MOOBON, Inc. All Rights Reserved.
Standard: ISO/IEC 27001:2022
Scope: Web system design support / Development, operation, and maintenance of in-house cloud services / Contract system development, operation, and maintenance / Server construction, operation, and maintenance