Check ID:
Provider: AWS
Service:
Severity: MEDIUM
Categories:
Resource type:
cloudwatch_log_metric_filter_root_usageProvider: AWS
Service:
cloudwatchSeverity: MEDIUM
Categories:
loggingResource type:
AwsCloudWatchAlarmWhat this check verifies
CloudTrail logs in CloudWatch include a metric filter for root account activity ({ $.userIdentity.type = "Root" && $.userIdentity.invokedBy NOT EXISTS && $.eventType != "AwsServiceEvent" }) and a linked CloudWatch alarm that triggers when the filter matches.
Risk
Without alerting on root activity, full-privilege actions can proceed unnoticed, impacting:- confidentiality via data access/exfiltration
- integrity via policy/config tampering
- availability via deletions or shutdowns Delayed detection increases blast radius and persistence.
Recommendation
Enable real-time alerts for root activity using a log metric filter and a high-priority alarm with notifications. Reduce exposure: enforce least privilege, keep root for break-glass with MFA, disable root access keys, and route alerts into incident response for defense in depth.Remediation
- Terraform
- Native IaC
- Dashboard steps
References
- https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html
- https://www.trendmicro.com/trendaivisiononecloudriskmanagement/knowledge-base/aws/CloudWatchLogs/root-account-usage-alarm.html
- https://asecure.cloud/a/root_account_login/
- https://support.icompaas.com/support/solutions/articles/62000083624-ensure-a-log-metric-filter-and-alarm-exist-for-usage-of-root-account
- https://www.intelligentdiscovery.io/controls/cloudwatch/cloudwatch-alarm-root-account-usage
- https://aws.amazon.com/blogs/security/how-to-receive-notifications-when-your-aws-accounts-root-access-keys-are-used/
- https://www.tenable.com/audits/items/CIS_Amazon_Web_Services_Foundations_v1.5.0_L1.audit:000adfb028a1475075a6b5d2117f53f4
Where this check fires
This check runs on every scheduled scan against your AWS account. Findings appear at Cloud Security → Findings filterable byCheck ID = cloudwatch_log_metric_filter_root_usage. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to AWS checks