Skip to main content
MEDIUMRDSOperational Excellence

RDS Enhanced Monitoring Disabled

rds-enhanced-monitoring-disabled

What this rule checks

Detects RDS instances without enhanced monitoring (MonitoringInterval missing or set to 0). OS-level metrics are not published to CloudWatch Logs.

How to fix it

  1. 1Set MonitoringInterval to one of 1, 5, 10, 15, 30, or 60 (seconds)
  2. 2Provide MonitoringRoleArn pointing at an IAM role with AmazonRDSEnhancedMonitoringRole attached
FlaggedNo MonitoringInterval is set, so enhanced monitoring is off and OS-level metrics are never published to CloudWatch.
import { Stack, App } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as rds from 'aws-cdk-lib/aws-rds';

new rds.CfnDBInstance(this, 'Db', {
  engine: 'postgres',
  dbInstanceClass: 'db.t3.micro',
  allocatedStorage: '20',
  storageEncrypted: true,
  backupRetentionPeriod: 7,
  deletionProtection: true,
  enableCloudwatchLogsExports: ['postgresql'],
});
FixedA MonitoringInterval of 60 seconds plus a monitoring role turns on enhanced monitoring for OS-level metrics.
import { Stack, App } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as rds from 'aws-cdk-lib/aws-rds';

new rds.CfnDBInstance(this, 'Db', {
  engine: 'postgres',
  dbInstanceClass: 'db.t3.micro',
  allocatedStorage: '20',
  storageEncrypted: true,
  backupRetentionPeriod: 7,
  deletionProtection: true,
  enableCloudwatchLogsExports: ['postgresql'],
  monitoringInterval: 60,
  monitoringRoleArn: 'arn:aws:iam::123456789012:role/rds-monitoring-role',
});

CDK Insights pinpoints the exact file and line in your CDK source for every finding, so you can jump straight to the fix.

Affected resource types

AWS::RDS::DBInstance

AWS documentation

Read the AWS guidance

Intentional? Suppress this finding

Sometimes a flag is deliberate β€” a genuinely public endpoint, say. You can dismiss rds-enhanced-monitoring-disabled and the reason is kept in the report, not silently hidden.

In .cdk-insights.json:

{
  "ignoreRules": [
    { "id": "rds-enhanced-monitoring-disabled", "reason": "Why this is intentional" }
  ]
}

Or inline in your CDK code:

Validations.of(scope).acknowledge({
  id: 'cdk-insights::rds-enhanced-monitoring-disabled',
  reason: 'Why this is intentional',
});

Use the rule ID rds-enhanced-monitoring-disabled shown above β€” not the CDK-* ID from SARIF / GitHub code scanning. To dismiss every finding on one construct instead, use ignorePaths. Suppression docs β†’

Catch this in your stack

$ npx cdk-insights scan

CDK Insights runs this and 118+ other rules locally against your synthesised CDK app β€” free, no account, your code never leaves your machine.

More RDS rules