'Is there any way to figure out public ip belongs to which aws account?

I have multiple aws accounts and i don't remember in which aws account this EC2 instance was created, is there any optimal way to figure out in very less time?

Note: i need to know account DNS name or Alias name.(Not account number)



Solution 1:[1]

If you have access to the instance you could use Instance metadata API:

[ec2-user ~]$ curl http://169.254.169.254/latest/dynamic/instance-identity/document

It returns json with accountId field.

Solution 2:[2]

If you configure AWS CLI for all account, then you can get the Account ID, ARN and user ID. The script does the following.

  • Get the list of AWS configuration profile
  • Loop over all profile
  • Get a list of All Ec2 public IP address
  • print account info if IP matched and exit RUN
./script.sh 52.x.x.x

script.sh

#!/bin/bash
INSTANCE_IP="${1}"
if [ -z "${INSTANCE_IP}" ]; then
    echo "pls provide instance IP"
    echo "./scipt.sh 54.x.x.x"
    exit 1
fi
PROFILE_LIST=$(grep -o "\\[[^]]*]"  < ~/.aws/credentials  | tr -d "[]")
for PROFILE in $PROFILE_LIST; do
 ALL_IPS=$(aws ec2 describe-instances --profile "${PROFILE}" --query "Reservations[].Instances[][PublicIpAddress]" --output text | tr '\r\n' ' ')
 echo "looking against profile ${PROFILE}"
    for IP in $ALL_IPS; do
        if [ "${INSTANCE_IP}" == "${IP}" ]; then
            echo "Instance IP matched in below account"
            aws sts get-caller-identity
            exit 0
        fi
    done
done
echo "seems like instance not belong to these profile"
echo "${PROFILE_LIST}"
exit 1

Solution 3:[3]

loop over accounts

loop over regions

also be aware of lightsail!

I came up with the following and helped me. I didn't exclude the regions that did not have lightsail

for region in `aws ec2 describe-regions --output text --query 'Regions[*].[RegionName]' --region eu-west-1` ; do \
    echo $region; \
    aws ec2 describe-network-interfaces --output text --filters Name=addresses.private-ip-address,Values="IPv4 address" --region $region ; \
    aws lightsail get-instances --region eu-west-1 --output text --query 'instances[*].[name,publicIpAddress]' --region $region; \
done

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 shuvalov
Solution 2 Adiii
Solution 3 Payam Poursaied