Basic EC2 Enumeration Cheet Sheet
Contents
1. List EC2 Instances#
aws ec2 describe-instances --region [region]
Shows instance IDs, public IPs, AMIs, key names, IAM roles, etc.
Use JMESPath filters for cleaner output:
aws ec2 describe-instances --query "Reservations[_].Instances[_].[InstanceId,PublicIpAddress,State.Name,KeyName,IamInstanceProfile.Arn]"
2. Get Detailed Info on a Specific Instance#
aws ec2 describe-instances --instance-ids [i-xxxxxxxxxxxxxxx]
3. Identify IAM Role Attached to the Instance#
aws ec2 describe-instances --query "Reservations[*].Instances[*].IamInstanceProfile.Arn"
Then grab role name and enumerate permissions:
aws iam get-instance-profile --instance-profile-name [name]
4. List Security Groups#
aws ec2 describe-security-groups
Look for open ports, especially
0.0.0.0/0on SSH (22), RDP (3389), or custom ports.
a. Check for overly permissive inbound rules:#
aws ec2 describe-security-groups --query "SecurityGroups[_].IpPermissions[_].{From
,To
,CIDR
}"
5. Describe Network Interfaces#
aws ec2 describe-network-interfaces
See public/private IPs, subnet info, VPC IDs, attachment info.
6. List AMIs (Amazon Machine Images)#
aws ec2 describe-images --owners self
Use this to find custom images that may contain secrets or sensitive software.
7. Check EBS Volume Info#
aws ec2 describe-volumes
Look for unencrypted volumes, large or attached volumes.
a. Snapshot enumeration (potential data leaks):#
aws ec2 describe-snapshots --owner-ids self
8. Enumerate Key Pairs#
aws ec2 describe-key-pairs
You can’t get private keys from AWS, but public names may hint at user naming patterns or poor key hygiene.
9. Describe Regions & Availability Zones#
aws ec2 describe-regions aws ec2 describe-availability-zones
