aws-networking-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited aws-networking-audit (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Cloud 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 tableFor 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 intentVPC 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 CIDRsAWS 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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.