Back to Checks
EC2 instance has detailed monitoring enabled
ec2_instance_detailed_monitoring_enabled
Service: ec2Severity: low
OfficialBuilt-inVerified
Categories:loggingforensics-ready
Resource Type:AwsEc2Instance
EC2 instances are assessed for CloudWatch detailed monitoring, indicating whether 1-minute metrics collection is enabled.
Instances lacking this setting provide only 5-minute metrics.
Risk
Without 1-minute metrics, visibility drops, delaying detection of:
- Sudden CPU/network/disk spikes affecting availability
- Malicious workloads (crypto-mining, brute force)
- Data exfiltration patterns Slower detection expands blast radius, raising incident impact and response cost.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks ec2_instance_detailed_monitoring_enabledRecommendation
Enable detailed monitoring to collect 1-minute metrics on critical instances. Use defense in depth: baseline normal behavior, create alerts for anomalies, and correlate metrics with logs and traces. Review dashboards regularly. If costs matter, prioritize production, internet-facing, and autoscaling fleets.
Remediation
CLI
aws ec2 monitor-instances --instance-ids <EC2_INSTANCE_ID>Terraform
# Enable detailed monitoring on an EC2 instance
resource "aws_instance" "<example_resource_name>" {
ami = "<example_ami_id>"
instance_type = "<example_instance_type>"
monitoring = true # Critical: enables detailed (1-minute) CloudWatch monitoring
}NativeIaC
# CloudFormation: Enable detailed monitoring on an EC2 instance
Resources:
<example_resource_name>:
Type: AWS::EC2::Instance
Properties:
ImageId: "<example_ami_id>"
InstanceType: "<example_instance_type>"
Monitoring: true # Critical: enables detailed (1-minute) CloudWatch monitoringOther
1Open the AWS Console and go to EC2 > Instances
2Select the instance
3Choose Actions > Monitor and troubleshoot > Manage detailed monitoring
4Check Enable detailed monitoring and click Save
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.ec2.ec2_client import ec2_client
class ec2_instance_detailed_monitoring_enabled(Check):
def execute(self):
findings = []
for instance in ec2_client.instances:
report = Check_Report_AWS(metadata=self.metadata(), resource=instance)
report.resource_id = instance.id
report.resource_arn = instance.arn
report.resource_tags = instance.tags
report.status = "PASS"
report.status_extended = (
f"EC2 Instance {instance.id} has detailed monitoring enabled."
)
if instance.monitoring_state != "enabled":
report.status = "FAIL"
report.status_extended = f"EC2 Instance {instance.id} does not have detailed monitoring enabled."
findings.append(report)
return findingsReferences
- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html
- https://www.trendmicro.com/trendaivisiononecloudriskmanagement/knowledge-base/aws/EC2/instance-detailed-monitoring.html
- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html#enable-detailed-monitoring-instance