Install
openclaw skills install aws-networking-auditAWS VPC networking audit covering CIDR architecture, Security Group and NACL rule analysis, Transit Gateway connectivity, VPC Flow Log forensics, Route Table validation, and ENI/EIP resource optimization using read-only AWS CLI commands.
openclaw skills install aws-networking-auditCloud resource audit for AWS Virtual Private Cloud (VPC) architecture, security posture, and connectivity. This skill evaluates provider-specific AWS networking constructs — VPC design, Security Groups, NACLs, Transit Gateway topologies, VPC Flow Logs, Route Tables, and ENI placement — not generic cloud networking advice.
Scope covers VPC-layer networking: CIDR planning, subnet tier layout,
security filtering, inter-VPC connectivity, and traffic observability.
Out of scope: CloudFront distributions, WAF rules, application-layer
load balancing (ALB content routing), and DNS (Route 53) configuration.
Reference references/cli-reference.md for read-only AWS CLI commands
organized by audit step, and references/vpc-architecture.md for the
VPC packet flow model, Security Group vs NACL evaluation order, and
Transit Gateway routing architecture.
aws sts get-caller-identity succeeds)ec2:DescribeVpcs, ec2:DescribeSubnets, ec2:DescribeSecurityGroups, ec2:DescribeNetworkAcls, ec2:DescribeTransitGateways, ec2:DescribeTransitGatewayRouteTables, ec2:DescribeRouteTables, ec2:DescribeFlowLogs, ec2:DescribeNetworkInterfaces, ec2:DescribeVpcPeeringConnections, ec2:DescribeVpcEndpoints, ec2:DescribeAddresses, logs:FilterLogEvents, logs:DescribeLogGroupsFollow these six steps sequentially. Each step builds on prior findings, moving from inventory through security analysis to optimization.
Enumerate all VPCs in the target region and assess architectural design.
aws ec2 describe-vpcs --region <region> --output table
aws ec2 describe-subnets --filters "Name=vpc-id,Values=<vpc-id>" --output table
For each VPC, evaluate:
enableDnsSupport and enableDnsHostnames are enabled — required for VPC endpoints and private DNS resolution.Audit stateful Security Group rules and stateless NACL rules for overly permissive access.
Security Group analysis:
aws ec2 describe-security-groups --filters "Name=vpc-id,Values=<vpc-id>"
For each Security Group, evaluate inbound and outbound rules:
0.0.0.0/0 (or ::/0) is a finding. Severity depends on port: SSH/RDP from 0.0.0.0/0 is Critical; HTTPS from 0.0.0.0/0 on a public ALB may be acceptable.NACL analysis:
aws ec2 describe-network-acls --filters "Name=vpc-id,Values=<vpc-id>"
NACLs are stateless — evaluate both inbound and outbound rule sets:
Evaluate inter-VPC and hybrid connectivity through Transit Gateway (TGW), VPC Peering, and VPC Endpoints.
Transit Gateway:
aws ec2 describe-transit-gateways
aws ec2 describe-transit-gateway-route-tables --transit-gateway-id <tgw-id>
aws ec2 search-transit-gateway-routes --transit-gateway-route-table-id <tgw-rt-id> --filters "Name=state,Values=active"
VPC Peering:
aws ec2 describe-vpc-peering-connections --filters "Name=status-code,Values=active"
AllowDnsResolutionFromRemoteVpc for cross-VPC private DNS.VPC Endpoints:
aws ec2 describe-vpc-endpoints --filters "Name=vpc-id,Values=<vpc-id>"
Analyze VPC Flow Logs for security events and traffic patterns.
aws ec2 describe-flow-logs --filter "Name=resource-id,Values=<vpc-id>"
Verify Flow Logs are enabled at the VPC level (not just subnet or ENI level) with REJECT and ACCEPT capture. If Flow Logs are not enabled, document as Critical and recommend enabling before further analysis.
For active Flow Logs, query CloudWatch Logs:
aws logs filter-log-events --log-group-name <flow-log-group> --filter-pattern "REJECT"
Analyze patterns:
Audit Route Tables for correctness, efficiency, and security.
aws ec2 describe-route-tables --filters "Name=vpc-id,Values=<vpc-id>"
For each Route Table, evaluate:
0.0.0.0/0 to a NAT Gateway for outbound internet access. Verify NAT Gateway is in a public subnet with an EIP. Multi-AZ deployments should have one NAT Gateway per AZ to avoid cross-AZ traffic and single-AZ failure.Compile findings and identify resource optimization opportunities.
Unused resource cleanup:
aws ec2 describe-network-interfaces --filters "Name=vpc-id,Values=<vpc-id>" "Name=status,Values=available"
aws ec2 describe-addresses --filters "Name=domain,Values=vpc"
Compile the findings report using the Report Template section.
| Finding | Severity | Rationale |
|---|---|---|
| SG allows SSH (22) from 0.0.0.0/0 | Critical | Direct shell access from internet |
| SG allows RDP (3389) from 0.0.0.0/0 | Critical | Remote desktop open to internet |
| SG allows all ports from 0.0.0.0/0 | Critical | No port restriction on internet access |
| ENI on public subnet using default SG | High | Default SG permits all inbound from group members |
| SG with >50 inbound rules | High | Excessive complexity; likely over-permissive |
| SG allows database ports from non-app subnets | High | Database access not restricted to application tier |
| SG with no description on rules | Medium | Limits auditability and rule justification |
| SG with 0 associated ENIs | Medium | Unused — cleanup candidate |
| Reject Rate (per minute) | Severity | Action |
|---|---|---|
| >1000 external-source REJECTs | High | Active scanning or DDoS — review source IPs |
| >100 internal-to-internal REJECTs | High | Misconfigured SG or NACL — investigate rules |
| 10–100 external REJECTs | Medium | Background noise — monitor trend |
| <10 external REJECTs | Low | Normal background scanning |
| Available IPs (% of CIDR) | Severity | Action |
|---|---|---|
| <10% remaining | High | Subnet exhaustion risk — plan CIDR expansion |
| 10–25% remaining | Medium | Monitor growth — plan expansion proactively |
| >75% unused | Low | Over-provisioned — consider smaller CIDR next time |
Security Group rule under review
├── Source is 0.0.0.0/0 (or ::/0)?
│ ├── Yes
│ │ ├── Port = 22 (SSH) or 3389 (RDP)?
│ │ │ ├── Yes → CRITICAL: Management ports open to internet
│ │ │ │ └── Restrict to known IP ranges or use SSM/bastion
│ │ │ └── No
│ │ │ ├── Port = 443 (HTTPS) on public-facing ALB/NLB?
│ │ │ │ ├── Yes → Acceptable for public services
│ │ │ │ └── No → HIGH: Review necessity of open port
│ │ │ └── Port = ALL?
│ │ │ └── CRITICAL: All ports open to internet
│ │ └── ENI attached to public subnet instance?
│ │ ├── Yes → Risk amplified — instance directly reachable
│ │ └── No (private subnet) → Lower risk but still flag
│ └── No (specific source CIDR or SG reference)
│ ├── SG self-reference?
│ │ └── Acceptable for cluster communication
│ └── Cross-VPC or broad CIDR (/8, /16)?
│ └── Medium — verify least-privilege intent
VPC design under review
├── Multiple AZs used?
│ ├── No → HIGH: Single point of failure
│ └── Yes
│ ├── Subnet tiers defined (public/private/isolated)?
│ │ ├── No → HIGH: Flat network — no segmentation
│ │ └── Yes
│ │ ├── Public subnets have IGW route?
│ │ │ └── Verify only intended subnets are public
│ │ ├── Private subnets route to NAT GW?
│ │ │ ├── Per-AZ NAT GW? → Best practice
│ │ │ └── Single NAT GW → Cost-optimized but AZ risk
│ │ └── Isolated subnets have no internet route?
│ │ └── Verify — should only reach VPC endpoints
│ ├── VPC Flow Logs enabled?
│ │ ├── No → CRITICAL: No traffic visibility
│ │ └── Yes → Check retention and capture scope
│ └── CIDR planning?
│ ├── Overlaps with peered VPCs? → Blocks connectivity
│ └── Sufficient for growth? → Plan secondary CIDRs
AWS VPC NETWORKING AUDIT REPORT
==================================
Account: [account-id] ([account-alias])
Region: [region]
VPC: [vpc-id] ([Name tag])
CIDR Blocks: [primary] [secondary if any]
Audit Date: [timestamp]
Performed By: [operator/agent]
VPC ARCHITECTURE:
Subnets: [total] (public:[n] private:[n] isolated:[n])
AZs: [list]
DNS: enableDnsSupport=[yes/no] enableDnsHostnames=[yes/no]
Tenancy: [default/dedicated]
SECURITY GROUPS:
Total: [n] | With 0.0.0.0/0 inbound: [n] | Unused (0 ENIs): [n]
Default SG in use: [yes/no — ENI count]
Rules total: [n] inbound / [n] outbound
NACLs:
Total: [n] | Using default NACL: [n subnets]
Custom NACLs: [n] | Stateless rules reviewed: [n]
CONNECTIVITY:
Transit Gateway: [tgw-id or N/A] | Attachments: [n]
VPC Peering: [n active] | Route validation: [pass/issues]
VPC Endpoints: [n] (gateway:[n] interface:[n])
FLOW LOGS:
Status: [enabled/disabled] | Capture: [ALL/ACCEPT/REJECT]
Log destination: [CloudWatch/S3] | Retention: [days]
Reject rate: [n/min avg] | Top reject sources: [list]
ROUTE TABLES:
Total: [n] | Main RT associations: [n subnets]
Black-hole routes: [n] | NAT GW routes: [n]
RESOURCE OPTIMIZATION:
Unused ENIs: [n] | Unattached EIPs: [n]
Cross-AZ traffic: [high/moderate/low]
NAT GW count: [n] across [n] AZs
FINDINGS:
1. [Severity] [Category] — [Description]
Resource: [sg-xxx / rtb-xxx / nacl-xxx]
Issue: [detail] → Recommendation: [action]
RECOMMENDATIONS: [prioritized by severity]
NEXT AUDIT: [CRITICAL findings: 30d, HIGH: 90d, clean: 180d]
If aws ec2 describe-flow-logs returns empty for the target VPC, Flow Logs
are not configured. Document as a Critical finding — no traffic visibility.
Flow Logs require an IAM role with logs:CreateLogGroup, logs:CreateLogStream,
logs:PutLogEvents permissions. Enabling Flow Logs is a non-disruptive operation.
Use aws ec2 describe-network-interfaces --filters "Name=group-id,Values=<sg-id>"
to find all ENIs associated with a Security Group. If the expected ENI is missing,
check whether the instance was replaced (Auto Scaling) or the SG was modified.
If TGW routes are missing, verify propagation is enabled on the TGW Route Table
for the relevant VPC attachment. Use aws ec2 get-transit-gateway-route-table-propagations
to check. Disabled propagation requires manual static route entries.
Routes with status "blackhole" occur when the target resource (NAT Gateway, VPC Peering Connection, TGW Attachment) is deleted but the route entry remains. Identify affected subnets and either remove the route or create a replacement target.
For multi-account environments using AWS Organizations, use aws sts assume-role
to obtain temporary credentials for each account. Alternatively, use AWS Config
aggregator or AWS RAM (Resource Access Manager) shared resources for centralized visibility.