Check ID:
Provider: AWS
Service:
Severity: LOW
Categories:
Resource type:
ec2_networkacl_unusedProvider: AWS
Service:
ec2Severity: LOW
Categories:
trust-boundariesResource type:
AwsEc2NetworkAclWhat this check verifies
VPC network ACLs that are not associated with any subnet are considered unused. The evaluation focuses on non-default ACLs and identifies those without a current subnet association; the default network ACL is excluded.Risk
Unused ACLs raise the risk of misassociation, unexpectedly changing subnet filtering. A permissive ACL could expose workloads (confidentiality, integrity), while an overly restrictive one could disrupt traffic (availability). Stale objects also hinder reviews and conceal drift.Recommendation
Remove unused non-default ACLs to minimize drift. Apply least privilege and change control to ACL creation and associations. If retention is necessary, tag owner and purpose, restrict who can associate ACLs, and review regularly as part of defense in depth.Remediation
- CLI
- Terraform
- Native IaC
- Dashboard steps
aws ec2 delete-network-acl —network-acl-id <nacl_id>
References
- https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#vpc-network-acl-delete
- https://docs.aws.amazon.com/securityhub/latest/userguide/ec2-controls.html#ec2-16
- https://docs.aws.amazon.com/config/latest/developerguide/vpc-network-acl-unused-check.html
Where this check fires
This check runs on every scheduled scan against your AWS account. Findings appear at Cloud Security → Findings filterable byCheck ID = ec2_networkacl_unused. 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