Skip to main content
emnode / learn
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