Overview
The machines that execute all jobs on CircleCI’s platform, not just jobs opted into IP ranges feature, are hosted on the following platforms:
Amazon Web Services (AWS)
Google Cloud Platform (GCP)
An exhaustive list of IP addresses that CircleCI’s traffic may come can be found by looking up each cloud provider’s IP address ranges. AWS and GCP offer endpoints to find this information which can found here, along with the regions we use:
Initial Troubleshooting When Seeing Issues
For the CircleCI core services, please see our list here.
For CircleCI Docker Jobs, please see our list here.
For CircleCI MacOS jobs, please see our list here.
IP ranges let you limit inbound connections to your infrastructure to IP address ranges that are verifiably associated with CircleCI.
If the above feature does not meet your needs, below are some alternative methods many of our customers are using:
CircleCI Runner
Install CircleCI runners on supported platforms (Machine and Kubernetes).
Use your own infrastructure for running specific jobs
Get additional control over the environment
Server Product
If the above solutions don't work for you, you may consider our Server solution where you can run a CircleCI installation in your own VPC and/or specify your own IP ranges.
Workarounds that are not officially supported but have been used by others for safelisting IP address ranges
Bastion Host
Configure SSH tunneling into your private environment via a bastion/jump host. Example Configuration / Orb
If you require, you could safelist this bastion host for your environment's firewall.
In addition to the SSH key, you can further secure your SSH connection by limiting what commands can be run via the jump host. Example
VPN
Configure a VPN connection to your environment on our machine executor.
See the article "How to set up a VPN connection during builds?"
Dynamic Safelisting
Using your cloud provider's CLI tool, dynamically fetch the current builder's IP address and add it to a security group which has access to internal resources. At the end of the build, you'd remove that IP to prevent having leftover IPs.
To always run cleanup, use the `when: always` declaration under a run step. Documentation