Back to Checks
RDS cluster event subscription is enabled for maintenance and failure categories
rds_cluster_critical_event_subscription
Service: rdsSeverity: medium
OfficialBuilt-inVerified
Categories:logging
Resource Type:AwsRdsEventSubscription
RDS event subscriptions for the db-cluster source type are enabled and cover critical cluster event categories: maintenance and failure (or all cluster events).
Risk
Without notifications for cluster maintenance and failure, teams may miss engine updates, failovers, or node crashes, impacting availability and increasing MTTR. Prolonged degraded states can cause replication lag and potential data integrity issues, hindering timely containment.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks rds_cluster_critical_event_subscriptionRecommendation
Enable event subscriptions for RDS clusters that include maintenance and failure, delivered via SNS to monitored channels.
- Enforce least privilege on topics
- Separate topics per environment
- Integrate with on-call/IR playbooks and test alerts
- Add multiple recipients and escalation for defense in depth
Remediation
CLI
aws rds create-event-subscription --subscription-name <example_resource_name> --sns-topic-arn <example_resource_arn> --source-type db-cluster --event-categories maintenance failure --enabledTerraform
resource "aws_db_event_subscription" "<example_resource_name>" {
name = "<example_resource_name>"
sns_topic = "<example_resource_arn>" # Critical: SNS topic ARN
source_type = "db-cluster" # Critical: Scope to clusters
event_categories = ["maintenance", "failure"] # Critical: Required categories
enabled = true # Critical: Must be enabled
}NativeIaC
Resources:
<example_resource_name>:
Type: AWS::RDS::EventSubscription
Properties:
SnsTopicArn: <example_resource_arn> # Critical: SNS topic to receive notifications
SourceType: db-cluster # Critical: Scope to DB clusters
EventCategories: # Critical: Subscribe to required categories only
- maintenance
- failure
Enabled: true # Critical: Must be enabled to passOther
1In the AWS Console, go to RDS > Event subscriptions > Create event subscription
2Name: enter <example_resource_name>
3Send notifications to: Choose existing Amazon SNS ARN and select <example_resource_arn>
4Source type: select Clusters
5Event categories: select only Maintenance and Failure (unselect others)
6Ensure Enabled is on
7Click Create
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.rds.rds_client import rds_client
class rds_cluster_critical_event_subscription(Check):
def execute(self):
findings = []
if rds_client.provider.scan_unused_services or rds_client.db_clusters:
for db_event in rds_client.db_event_subscriptions:
report = Check_Report_AWS(metadata=self.metadata(), resource=db_event)
report.status = "FAIL"
report.status_extended = "RDS cluster event categories of maintenance and failure are not subscribed."
report.resource_id = rds_client.audited_account
report.resource_arn = rds_client._get_rds_arn_template(db_event.region)
if db_event.source_type == "db-cluster" and db_event.enabled:
if db_event.event_list == [] or set(db_event.event_list) == {
"maintenance",
"failure",
}:
report = Check_Report_AWS(
metadata=self.metadata(), resource=db_event
)
report.status = "PASS"
report.status_extended = "RDS cluster events are subscribed."
elif db_event.event_list == ["maintenance"]:
report = Check_Report_AWS(
metadata=self.metadata(), resource=db_event
)
report.status = "FAIL"
report.status_extended = (
"RDS cluster event category of failure is not subscribed."
)
elif db_event.event_list == ["failure"]:
report = Check_Report_AWS(
metadata=self.metadata(), resource=db_event
)
report.status = "FAIL"
report.status_extended = "RDS cluster event category of maintenance is not subscribed."
findings.append(report)
return findings