Hello everyone, Ben from Atlassian Network Engineering.
In January 2022 we made improvements to our documentation at https://confluence.atlassian.com/cloud/atlassian-cloud-ip-ranges-and-domains-744721662.html and specifically to our list of IP addresses in https://ip-ranges.atlassian.com/ so that product, region and directional information are now included.
Even though regional information is provided, we do not recommend that customers allow-list ingress or egress networks associated with specific regions, but instead include all networks relevant to a product and direction. This is because we optimise our network over time, continuously bringing our cloud closer to all customers by deploying additional edge regions. Due to the underlying technology of the internet, in particular unicast routing and latency-based DNS routing, these improvements can and do result in customer based clients and servers seeing new Atlassian IP addresses (from our published ranges) used for connections over time.
This issue is not unique to Atlassian, AWS also adds expands and adds additional IP ranges to their products over time, including to the popular services EC2 and Cloudfront in https://ip-ranges.amazonaws.com/ip-ranges.json .
All that being said, if you wish to proceed, once queried for the desired combination of product, region and direction, the resulting number of CIDR blocks should be short. However, please be mindful of the earlier warning regarding the dangers of filtering by region.
An example script which can yield the networks one cares about might be:
import requests
import json
import netaddr
direction = "ingress"
product = "confluence"
region = "eu-west-1"
networks = requests.get('https://ip-ranges.atlassian.com/').json()['items']
allow_list = []
for network in networks:
if all([
direction in network.get("direction", []),
product in network.get("product", []),
region in network.get("region", []) or "global" in network.get("region", [])
]):
allow_list.append(network["cidr"])
allow_list = sorted([str(x) for x in netaddr.cidr_merge(allow_list)])
for cidr in allow_list:
print(str(cidr))
Which would yield:
104.192.136.0/21
185.166.140.0/22
3.251.213.64/26
52.215.192.128/25
A iteration on this script which takes into account our warning and excludes regional filtering is:
import requests
import json
import netaddr
direction = "ingress"
product = "confluence"
networks = requests.get('https://ip-ranges.atlassian.com/').json()['items']
allow_list = []
for network in networks:
if all([
direction in network.get("direction", []),
product in network.get("product", [])
]):
allow_list.append(network["cidr"])
allow_list = sorted([str(x) for x in netaddr.cidr_merge(allow_list)])
for cidr in allow_list:
print(str(cidr))
We do recommend using automation or polling this list (or subscribing to the upcoming AWS SNS endpoint which we will be documenting in https://confluence.atlassian.com/cloud/atlassian-cloud-ip-ranges-and-domains-744721662.html ).
Hello All,
Ben from Atlassian Networking.
We have built a public tool which allows searching for an IP or filtering the ip list based on use case https://ip-ranges.atlassian.com/tool.html
Also, we would like to share these additional code examples for working with https://ip-ranges.atlassian.com/ :
JQ example for getting Atlassian Outbound IPv4 ranges:
Python example for getting Atlassian inbound ranges, with summarization: