| name | aws-network-diagnostics |
| description | Debugging AWS network connectivity issues including Amazon Virtual Private Cloud (Amazon VPC), security groups, network ACLs (NACLs), route tables, VPC endpoints, DNS, load balancers, and AWS Transit Gateway. Use when troubleshooting connectivity failures or validating network paths. |
AWS Network Diagnostics Skill
Security: Always ensure diagnosed resources meet or exceed the security configuration of the source resources. Refer to SECURITY.md for security requirements.
VPC Reachability Analyzer (Recommended)
aws ec2 create-network-insights-path --source <eni-or-instance-id> --destination <eni-or-instance-id> --protocol TCP --destination-port <port> --region <region>
aws ec2 start-network-insights-analysis --network-insights-path-id <path-id> --region <region>
aws ec2 describe-network-insights-analyses --network-insights-analysis-ids <analysis-id> --region <region> --query 'NetworkInsightsAnalyses[0].{Reachable:NetworkPathFound,Explanations:Explanations}'
Security Group Checks
aws ec2 describe-security-groups --group-ids <sg-id> --region <region> --query 'SecurityGroups[0].IpPermissions[*].{Proto:IpProtocol,FromPort:FromPort,ToPort:ToPort,Sources:IpRanges[*].CidrIp,SGSources:UserIdGroupPairs[*].GroupId}'
aws ec2 describe-security-groups --group-ids <sg-id> --region <region> --query 'SecurityGroups[0].IpPermissionsEgress[*].{Proto:IpProtocol,FromPort:FromPort,ToPort:ToPort,Dest:IpRanges[*].CidrIp}'
aws ec2 describe-instances --instance-ids <id> --region <region> --query 'Reservations[0].Instances[0].SecurityGroups'
aws ec2 describe-security-groups --filters "Name=ip-permission.from-port,Values=<port>" "Name=ip-permission.to-port,Values=<port>" --region <region> --query 'SecurityGroups[*].{ID:GroupId,Name:GroupName}'
NACL Checks
aws ec2 describe-network-acls --filters "Name=association.subnet-id,Values=<subnet-id>" --region <region> --query 'NetworkAcls[0].Entries[*].{Rule:RuleNumber,Action:RuleAction,Proto:Protocol,CIDR:CidrBlock,Ports:PortRange,Egress:Egress}' --output table
Route Table Checks
aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=<subnet-id>" --region <region> --query 'RouteTables[0].Routes[*].{Dest:DestinationCidrBlock,Target:GatewayId||NatGatewayId||TransitGatewayId||VpcPeeringConnectionId,State:State}'
aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=<subnet-id>" --region <region> --query 'RouteTables[0].Routes[?GatewayId!=`null` && starts_with(GatewayId,`igw-`)]'
VPC Endpoints
aws ec2 describe-vpc-endpoints --filters "Name=vpc-id,Values=<vpc-id>" --region <region> --query 'VpcEndpoints[*].{ID:VpcEndpointId,Service:ServiceName,Type:VpcEndpointType,State:State}'
aws ec2 describe-vpc-endpoints --vpc-endpoint-ids <ep-id> --region <region> --query 'VpcEndpoints[0].PolicyDocument'
DNS Resolution
aws ec2 describe-vpc-attribute --vpc-id <vpc-id> --attribute enableDnsSupport --region <region>
aws ec2 describe-vpc-attribute --vpc-id <vpc-id> --attribute enableDnsHostnames --region <region>
aws route53resolver list-resolver-rules --region <region> --query 'ResolverRules[*].{ID:Id,Domain:DomainName,Type:RuleType,Status:Status}'
Load Balancer Diagnostics
aws elbv2 describe-target-health --target-group-arn <tg-arn> --region <region> --query 'TargetHealthDescriptions[*].{Target:Target.Id,Port:Target.Port,State:TargetHealth.State,Reason:TargetHealth.Reason}'
aws elbv2 describe-rules --listener-arn <listener-arn> --region <region>
aws elbv2 describe-target-health --target-group-arn <tg-arn> --region <region>
aws elb describe-instance-health --load-balancer-name <name> --region <region>
NAT Gateway
aws ec2 describe-nat-gateways --filter "Name=vpc-id,Values=<vpc-id>" --region <region> --query 'NatGateways[*].{ID:NatGatewayId,State:State,Subnet:SubnetId,PublicIP:NatGatewayAddresses[0].PublicIp}'
VPC Peering
aws ec2 describe-vpc-peering-connections --filters "Name=requester-vpc-info.vpc-id,Values=<vpc-id>" --region <region> --query 'VpcPeeringConnections[*].{ID:VpcPeeringConnectionId,Status:Status.Code,Peer:AccepterVpcInfo.VpcId,PeerRegion:AccepterVpcInfo.Region}'
Transit Gateway
aws ec2 describe-transit-gateway-attachments --filters "Name=transit-gateway-id,Values=<tgw-id>" --region <region> --query 'TransitGatewayAttachments[*].{ID:TransitGatewayAttachmentId,Type:ResourceType,Resource:ResourceId,State:State}'
aws ec2 search-transit-gateway-routes --transit-gateway-route-table-id <rt-id> --filters "Name=state,Values=active" --region <region>
VPC Flow Logs
aws ec2 describe-flow-logs --filter "Name=resource-id,Values=<vpc-id>" --region <region>
aws logs start-query --log-group-name <flow-log-group> --start-time $(date -d '1 hour ago' +%s) --end-time $(date +%s) --query-string '
fields @timestamp, srcAddr, dstAddr, srcPort, dstPort, protocol, action
| filter dstPort = <port> and action = "REJECT"
| sort @timestamp desc
| limit 50
' --region <region>
Advanced: CLI-Based Connectivity Tests (from EC2)
Diagnostic Workflow
When debugging connectivity:
- Identify endpoints: source and destination (IPs, ENIs, instances)
- Check SGs: inbound on destination, outbound on source
- Check NACLs: both inbound and outbound on both subnets
- Check routes: does the route table have a path to the destination?
- Check DNS: can the hostname resolve?
- Check VPC endpoints: if accessing AWS services privately
- Check flow logs: are packets being REJECTED?
- Use Reachability Analyzer: for automated path analysis
Security Considerations for Network Diagnostics
Customers are responsible for configuring VPC Flow Logs, managing IAM policies for log access, encrypting log data with AWS KMS, and securing security group and NACL configurations. AWS is responsible for the underlying VPC and Amazon CloudWatch Logs service infrastructure.
- VPC Flow Logs may contain sensitive network topology information (IP addresses, ports, traffic patterns). Restrict access to flow log data using IAM policies and encrypt CloudWatch Log Groups with AWS KMS.
- Security group and NACL changes during troubleshooting can inadvertently expose resources. Document the original rules before making changes and revert after diagnosis.
- Diagnostic outputs (IP addresses, security group rules, route tables) should be treated as sensitive. Avoid sharing in unencrypted channels.