Skip to main content
emnode
Compliance Medium severity

AWS Security Hub · RDS

RDS.50: RDS clusters should have adequate backup retention

Written and reviewed by Emnode · Last reviewed

What does AWS Security Hub RDS.50 check?

RDS.50 checks whether an RDS DB cluster's BackupRetentionPeriod meets a minimum threshold. The minimumBackupRetentionPeriod parameter defaults to 7 days and accepts values from 7 to 35; the control reports FAILED for any cluster below it. It applies to AWS::RDS::DBCluster across all cluster engines (Aurora, DocumentDB, Neptune).

Why does RDS.50 matter?

A too-short window quietly defeats the purpose of having backups. Data corruption, a bad schema migration, or an accidental bulk delete is often not noticed for several days, and if the recovery window is one day, the only restore points still available by the time you notice are already corrupted. Seven days is the floor that gives a team a realistic chance to detect a problem and roll back to a clean state. The feature is free up to the size of provisioned storage, so a longer window is almost pure upside.

How do I fix RDS.50?

  1. Set an adequate window with modify-db-cluster --backup-retention-period 7 (or higher to match your RPO).
  2. Confirm the backup window falls in a low-traffic period.
  3. Default the retention into IaC so new clusters inherit it.
  4. Use AWS Backup for longer or cross-Region retention where compliance demands it.

Remediation script · bash

# Set a 7-day backup floor on production databases below it (skip read replicas).
for db in $(aws rds describe-db-instances \
    --query 'DBInstances[?ReadReplicaSourceDBInstanceIdentifier==`null` && BackupRetentionPeriod<`7`].DBInstanceIdentifier' --output text); do
  aws rds modify-db-instance --db-instance-identifier "$db" \
    --backup-retention-period 7 --no-apply-immediately
done

# Turn on DynamoDB point-in-time recovery (instant, no downtime).
aws dynamodb update-continuous-backups --table-name prod-orders \
  --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true

# Stop any snapshot in the account from being shared publicly, ever.
aws ec2 enable-snapshot-block-public-access --state block-all-sharing

Full walkthrough (console steps, edge cases and verification) in the lesson Configure backups and retention.

Is RDS.50 a false positive?

A cluster with backups technically enabled at 1 day still fails RDS.50: the control is about adequacy, not mere presence. Enabling backups is not the same as retaining them long enough to be useful.

Part of the learning path Lock down access
  • RDS.1 An RDS snapshot is shared publicly
  • RDS.2 An RDS instance is publicly accessible from the internet
  • RDS.3 RDS DB instances should be encrypted at rest
  • RDS.4 RDS snapshots should be encrypted at rest
  • RDS.5 RDS DB instances should use multiple AZs
  • RDS.6 RDS lacks enhanced monitoring
  • RDS.7 RDS clusters should have deletion protection
  • RDS.8 RDS DB instances should have deletion protection
  • RDS.9 RDS engine logs are not shipped to CloudWatch
  • RDS.10 RDS relies on long-lived database passwords
  • RDS.11 RDS instances should have automatic backups
  • RDS.12 IAM auth should be configured for RDS clusters