List all Public IP Addresses Across All of your AWS Accounts

May 18, 2020

Gathering all EC2 Public IPs

Recently I needed to automate pulling all public IP addresses across all of the EC2 accounts I have access to. I wrote the following script to deal with that problem.

Note: Thank you to Daniel Miessler for the script to pull the IPs. My Script makes that work across all accounts.


You will need to have the awscli installed and all of your accounts configured in ~/.aws/config

# Author: Steve Stonebraker
# Date: 2020-06-19
# Purpose: Outputs a list of public IP Addresses used by the ec2 instances across all accounts specified in your ~/.aws/config file

echo $OUTDIR

[ ! -d ./${OUTDIR} ] && /bin/mkdir ${OUTDIR}  || /bin/rm -f ./${OUTDIR}/*

aws_profiles=$( \
        grep '\[profile' ~/.aws/config \
        | awk '{sub(/]/, "", $2); print $2}' \

# Iterate through all profiles in ~/.aws/config
for profile in ${aws_profiles}
    echo "[*] - Processing profile [$profile]"
    aws ec2 describe-instances   --profile ${profile} --query "Reservations[*].Instances[*].PublicIpAddress"   --output=text > ${OUTDIR}/${profile}_.txt
    echo file written to ${OUTDIR}/${profile}_.txt

    echo "[*] - Processing default instance"
# Don't forget about the default instance
     aws ec2 describe-instances   --query "Reservations[*].Instances[*].PublicIpAddress"   --output=text > ${OUTDIR}/${profile}_.txt
     ehco "file written to ${OUTDIR}/${profile}_.txt"

echo "[*] - combining all output"

cat ${OUTDIR}/*.txt | sort | uniq > ${OUTDIR}/all_public_ips.txt
echo "[*] -  located at ${OUTDIR}/all_public_ips.txt"