AWS IP ranges API
Static files at stable URLs, rebuilt within 30 minutes of every change. No key, no rate limit beyond GitHub Pages, and the files are small enough to fetch in a deploy step.
| Endpoint | What you get |
|---|---|
https://manishh-13.github.io/aws-ip-map/ip-ranges.json | Byte-for-byte mirror of the latest AWS file. |
https://manishh-13.github.io/aws-ip-map/ipv4.txt | Every AWS IPv4 prefix, one per line. |
https://manishh-13.github.io/aws-ip-map/ipv6.txt | Every AWS IPv6 prefix, one per line. |
https://manishh-13.github.io/aws-ip-map/ranges.csv | prefix, IP version, region, network border group, services. |
https://manishh-13.github.io/aws-ip-map/regions/{region}/ipv4.txt | One region, for example regions/eu-west-1/ipv4.txt. Also ipv6.txt, ranges.csv, ranges.json. |
https://manishh-13.github.io/aws-ip-map/services/{service}/ipv4.txt | One service code in lowercase with dashes, for example services/cloudfront-origin-facing/ipv4.txt. |
https://manishh-13.github.io/aws-ip-map/regions/{region}/{service}/ipv4.txt | One service in one region, for example regions/ap-south-1/s3/ipv4.txt. |
https://manishh-13.github.io/aws-ip-map/data/index.json | Compact index used by the search on this site. |
https://manishh-13.github.io/aws-ip-map/data/history.json | IPv4 address totals per region per snapshot since 2015. |
https://manishh-13.github.io/aws-ip-map/data/timeline.json | The complete history: every entry ever published with the versions it was listed in. |
https://manishh-13.github.io/aws-ip-map/changes.xml | Atom feed of every change. |
Examples
Shell
curl -s https://manishh-13.github.io/aws-ip-map/services/cloudfront-origin-facing/ipv4.txt
Terraform
data "http" "cloudfront" {
url = "https://manishh-13.github.io/aws-ip-map/services/cloudfront-origin-facing/ipv4.txt"
}
locals {
cloudfront_cidrs = compact(split("\n", data.http.cloudfront.response_body))
}
Python
import ipaddress, urllib.request
url = "https://manishh-13.github.io/aws-ip-map/ipv4.txt"
nets = [ipaddress.ip_network(l) for l in urllib.request.urlopen(url).read().decode().split()]
print(any(ipaddress.ip_address("52.95.110.1") in n for n in nets))
For production allowlists that must react within minutes, subscribe to AWS's own SNS topic arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged and read the source file directly; this site is a convenience layer on top.