Adresses IP sortantes pour les services App Engine
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Les services sortants, tels que les API URL Fetch, Sockets et Mail, utilisent un vaste pool d'adresses IP. Les plages d'adresses IP de ce pool sont sujettes à des modifications de routine. En effet, deux appels d'API séquentiels provenant de la même application peuvent sembler provenir de deux adresses IP différentes.
Si vous devez connaître les adresses IP associées au trafic sortant de votre service, vous pouvez trouver les plages d'adresses IP actuelles de votre service ou configurer une adresse IP statique pour le service.
Adresses IP pour les services App Engine
Vous pouvez trouver les plages d'adresses IP actuelles de vos services App Engine en fonction des informations de plages d'adresses IP publiées par Google :
Google publie la liste complète des plages d'adresses IP mises à la disposition des utilisateurs sur Internet dans le fichier goog.json.
Google publie également une liste de plages d'adresses IP externes globales et régionales disponibles pour les ressources Google Cloud des clients dans le fichier cloud.json.
Les adresses IP utilisées par les API et les services Google correspondent à la liste des plages calculées en supprimant toutes les plages de cloud.json par rapport à celles de goog.json. Ces listes sont mises à jour fréquemment.
Vous pouvez utiliser le script Python suivant pour créer une liste de plages d'adresses IP, incluant celles utilisées par les API et les services Google.
Pour en savoir plus sur l'exécution de ce script, consultez la page Exécuter.
from__future__importprint_functionimportjsontry:fromurllibimporturlopenexceptImportError:fromurllib.requestimporturlopenfromurllib.errorimportHTTPErrorimportnetaddrIPRANGE_URLS={"goog":"https://www.gstatic.com/ipranges/goog.json","cloud":"https://www.gstatic.com/ipranges/cloud.json",}defread_url(url):try:returnjson.loads(urlopen(url).read())except(IOError,HTTPError):print("ERROR: Invalid HTTP response from %s"%url)exceptjson.decoder.JSONDecodeError:print("ERROR: Could not parse HTTP response from %s"%url)defget_data(link):data=read_url(link)ifdata:print("{} published: {}".format(link,data.get("creationTime")))cidrs=netaddr.IPSet()foreindata["prefixes"]:if"ipv4Prefix"ine:cidrs.add(e.get("ipv4Prefix"))if"ipv6Prefix"ine:cidrs.add(e.get("ipv6Prefix"))returncidrsdefmain():cidrs={group:get_data(link)forgroup,linkinIPRANGE_URLS.items()}iflen(cidrs)!=2:raiseValueError("ERROR: Could process data from Google")print("IP ranges for Google APIs and services default domains:")foripin(cidrs["goog"]-cidrs["cloud"]).iter_cidrs():print(ip)if__name__=="__main__":main()
Configurer une adresse IP sortante statique
Pour configurer une adresse IP statique pour votre service d'environnement standard App Engine, utilisez l'accès au VPC sans serveur avec Cloud Router et Cloud NAT. Avec l'accès au VPC sans serveur, vous pouvez envoyer le trafic sortant vers votre réseau de cloud privé virtuel (VPC). En utilisant une passerelle de traduction d'adresses réseau (NAT) sur votre VPC, vous pouvez acheminer le trafic App Engine via une adresse IP dédiée.
Le routage de votre trafic via Cloud NAT ne provoque pas de saut supplémentaire dans votre pile réseau, car la passerelle Cloud NAT et le routeur Cloud Router ne fournissent qu'un plan de contrôle, et les paquets ne passent pas par la passerelle NAT ou le routeur Cloud Router.
Les adresses IP sortantes statiques ne peuvent pas être configurées pour le trafic envoyé à l'aide du service de récupération d'URL. Le trafic envoyé à l'aide du service de récupération d'URL continuera à utiliser le pool d'adresses IP publiques. Si vous souhaitez que l'ensemble de votre trafic sortant utilise une adresse IP statique, désactivez la récupération d'URL par défaut et arrêtez toute utilisation explicite de la bibliothèque urlfetch.
Les étapes suivantes montrent comment configurer une adresse IP sortante statique pour le service d'environnement standard App Engine.
Assurez-vous de disposer du rôle roles/compute.networkAdmin ou d'un rôle personnalisé avec les mêmes autorisations.
Créez un sous-réseau à l'intérieur de votre réseau VPC pour le trafic App Engine. Cela garantit que les autres ressources de votre réseau VPC ne peuvent pas utiliser l'adresse IP statique.
SUBNET_NAME par le nom que vous souhaitez attribuer au sous-réseau ;
RANGE par la plage d'adresses IP, au format CIDR, que vous souhaitez attribuer à ce sous-réseau (par exemple, 10.124.0.0/28) ;
NETWORK_NAME par le nom de votre réseau VPC ;
REGION par la région de votre service App Engine.
Connectez votre service App Engine au sous-réseau.
Suivez le guide Se connecter à un réseau VPC et spécifiez le nom du sous-réseau que vous avez créé à l'étape précédente pour le sous-réseau de connecteur.
Créez un routeur Cloud Router. Cloud Router est un composant de plan de contrôle nécessaire pour Cloud NAT.
ROUTER_NAME par le nom de la
ressource Cloud Router que vous souhaitez créer.
NETWORK_NAME par le nom de votre réseau VPC ;
REGION par la région
dans laquelle vous souhaitez créer une passerelle NAT.
Réserver une adresse IP statique
Il s'agit de l'adresse que votre service utilisera pour envoyer du trafic sortant. Une ressource d'adresse IP réservée conserve
l'adresse IP sous-jacente lorsque la ressource à laquelle elle est associée
est supprimée et recréée. Cette adresse IP est comptabilisée dans les quotas d'adresses IP statiques de votre projet Google Cloud .
ORIGIN_IP_NAME par le nom que vous souhaitez attribuer
à la ressource d'adresse IP.
REGION par la région qui exécute le routeur Cloud NAT. Idéalement, la même région que votre service App Engine, afin de minimiser la latence et les coûts du réseau.
Créez une passerelle Cloud NAT et spécifiez votre adresse IP.
Le trafic provenant de votre sous-réseau transitera par cette passerelle et utilisera l'adresse IP statique que vous avez réservée à l'étape précédente.
NAT_NAME par le nom de la ressource de passerelle Cloud NAT
que vous souhaitez créer.
ROUTER_NAME par le nom de votre
Cloud Router.
REGION par la région
dans laquelle vous souhaitez créer une passerelle NAT.
ORIGIN_IP_NAME par le nom de la ressource d'adresse IP réservée
que vous avez créée à l'étape précédente.
Définissez le paramètre de sortie de l'accès au VPC sans serveur sur all-traffic.
Par défaut, les services App Engine qui utilisent l'accès au VPC sans serveur n'envoient que du trafic interne à votre réseau VPC. Pour envoyer du trafic avec des destinations externes à votre réseau VPC afin qu'il dispose de l'adresse IP statique que vous avez spécifiée, vous devez modifier le paramètre de sortie.
Spécifiez le paramètre de sortie dans le fichier app.yaml de votre service :
PROJECT_ID par l'ID de votre projet Google Cloud .
REGION par la région dans laquelle se trouve le connecteur ;
CONNECTOR_NAME par le nom de votre connecteur.
Déployez le service :
gcloudappdeploy
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/04 (UTC)."],[[["\u003cp\u003eOutbound traffic from App Engine services uses a pool of IP addresses that change routinely, and sequential API calls might originate from different IP addresses.\u003c/p\u003e\n"],["\u003cp\u003eYou can find the current IP address ranges for your App Engine services from two Google-published lists: \u003ccode\u003egoog.json\u003c/code\u003e for all Google IPs and \u003ccode\u003ecloud.json\u003c/code\u003e for Google Cloud resources.\u003c/p\u003e\n"],["\u003cp\u003eTo use a static IP address for your App Engine service's outbound traffic, configure Serverless VPC Access with Cloud Router and Cloud NAT.\u003c/p\u003e\n"],["\u003cp\u003eSetting up a static outbound IP involves creating a subnet, connecting your service to it, creating a Cloud Router, reserving a static IP, and then creating a Cloud NAT gateway, with the caveat that URL Fetch services cannot use this method.\u003c/p\u003e\n"],["\u003cp\u003eAfter setting up the correct cloud components, the egress setting must be changed to \u003ccode\u003eall-traffic\u003c/code\u003e in your \u003ccode\u003eapp.yaml\u003c/code\u003e to ensure all external traffic is sent through your VPC network.\u003c/p\u003e\n"]]],[],null,["# Outbound IP addresses for App Engine services\n\nOutbound services, such as the URL Fetch, Sockets, and Mail APIs, make use of\na large pool of IP addresses. The IP address ranges in this pool are subject to\nroutine changes. In fact, two sequential API calls from the same application may\nappear to originate from two different IP addresses.\n\n\nIf you need to know the IP addresses associated with outbound traffic from your\nservice, you can either find the current IP address ranges for your service, or\nset up a static IP address for your service.\n\nIP addresses for App Engine services\n------------------------------------\n\n\u003cbr /\u003e\n\nYou can find the current IP address ranges for your App Engine services\nbased on IP range information that Google publishes:\n\n- Google publishes the complete list of IP ranges that it makes available to\n users on the internet in [goog.json](https://www.gstatic.com/ipranges/goog.json).\n\n- Google also publishes a list of global and regional external IP addresses\n ranges available for customers' Google Cloud resources in\n [cloud.json](https://www.gstatic.com/ipranges/cloud.json).\n\nThe IP addresses used by Google APIs and services fit\nwithin the list of ranges computed by taking away all ranges in `cloud.json`\nfrom those in `goog.json`. These lists are updated frequently.\n\nYou can use the following Python script to create a list of IP address ranges\nthat include those used by Google APIs and services.\n\nFor information about running this script, see [How to\nrun](https://github.com/GoogleCloudPlatform/networking-tools-python/tree/main/tools/cidr#how-to-run). \n\n from __future__ import print_function\n\n import json\n\n try:\n from urllib import urlopen\n except ImportError:\n from urllib.request import urlopen\n from urllib.error import HTTPError\n\n import netaddr\n\n IPRANGE_URLS = {\n \"goog\": \"https://www.gstatic.com/ipranges/goog.json\",\n \"cloud\": \"https://www.gstatic.com/ipranges/cloud.json\",\n }\n\n\n def read_url(url):\n try:\n return json.loads(urlopen(url).read())\n except (IOError, HTTPError):\n print(\"ERROR: Invalid HTTP response from %s\" % url)\n except json.decoder.JSONDecodeError:\n print(\"ERROR: Could not parse HTTP response from %s\" % url)\n\n\n def get_data(link):\n data = read_url(link)\n if data:\n print(\"{} published: {}\".format(link, data.get(\"creationTime\")))\n cidrs = netaddr.IPSet()\n for e in data[\"prefixes\"]:\n if \"ipv4Prefix\" in e:\n cidrs.add(e.get(\"ipv4Prefix\"))\n if \"ipv6Prefix\" in e:\n cidrs.add(e.get(\"ipv6Prefix\"))\n return cidrs\n\n\n def main():\n cidrs = {group: get_data(link) for group, link in IPRANGE_URLS.items()}\n if len(cidrs) != 2:\n raise ValueError(\"ERROR: Could process data from Google\")\n print(\"IP ranges for Google APIs and services default domains:\")\n for ip in (cidrs[\"goog\"] - cidrs[\"cloud\"]).iter_cidrs():\n print(ip)\n\n\n if __name__ == \"__main__\":\n main()\n\n| **Note:** In the past, Google Cloud published a list of IP address ranges in the `_spf.google.com` DNS TXT record (and the records it referenced). While this DNS TXT record continues to be accurate for [SPF\n| purposes](https://support.google.com/a/answer/33786), it does not contain the complete set of possible IP address ranges used by Google APIs and services.\n\n\u003cbr /\u003e\n\nSet up a static outbound IP address\n-----------------------------------\n\nTo set up a static IP address for your App Engine standard environment service, use\n[Serverless VPC Access](/vpc/docs/serverless-vpc-access)\nwith Cloud Router and [Cloud NAT](/nat/docs). By using\nServerless VPC Access, you can send egress traffic to your\nVirtual Private Cloud (VPC) network. By using a network address\ntranslation (NAT) gateway on your VPC, you can route\nthe App Engine traffic through a dedicated IP address.\n\nRouting your traffic through Cloud NAT does not cause an additional hop in\nyour networking stack since the Cloud NAT gateway and the Cloud Router\nprovide only a control plane and the packets do not pass through the\nCloud NAT gateway or the Cloud Router.\n\n\nStatic outbound IP addresses cannot be configured for traffic sent using the\nURL Fetch service. Traffic sent using the URL Fetch service will continue to use\nthe public IP address pool. If you want all of your outbound traffic to use a\nstatic IP address,\n[disable the URL Fetch default](/appengine/docs/legacy/standard/python/sockets#making_httplib_use_sockets)\nand discontinue any explicit use of the `urlfetch` library.\n| **Note:** Serverless VPC Access and Cloud NAT can both incur costs. Review [Serverless VPC Access pricing](/vpc/pricing#serverless-vpc-pricing) and [Cloud NAT pricing](/vpc/network-pricing#nat-pricing).\n\nThe following steps show how to set up a static outbound IP address for your\nApp Engine standard environment service.\n\n1. Make sure that you have the\n [roles/compute.networkAdmin](/iam/docs/understanding-roles#compute-engine-roles)\n role or a custom role with the same permissions.\n\n2. Create a subnetwork (subnet) inside your VPC network for\n App Engine traffic. This ensures that other resources in your\n VPC network cannot use the static IP address.\n\n ```bash\n gcloud compute networks subnets create SUBNET_NAME \\\n --range=RANGE \\\n --network=NETWORK_NAME \\\n --region=REGION\n ```\n\n In the command above, replace:\n - \u003cvar translate=\"no\"\u003eSUBNET_NAME\u003c/var\u003e with a name you want to give to the subnet.\n - \u003cvar translate=\"no\"\u003eRANGE\u003c/var\u003e with the [IP range](/vpc/docs/subnets#manually_created_subnet_ip_ranges) in CIDR format you want to assign to this subnet (e.g. `10.124.0.0/28`)\n - \u003cvar translate=\"no\"\u003eNETWORK_NAME\u003c/var\u003e with the name of your VPC network.\n - \u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e with the region of your App Engine service.\n3. Connect your App Engine service to the subnet.\n\n Follow the guide\n [Connecting to a VPC network](/appengine/docs/legacy/standard/python/connecting-vpc),\n and specify the name of the subnet you created in the previous step for the\n connector subnet.\n4. Create a new Cloud Router. Cloud Router is a necessary control plane\n component for Cloud NAT.\n\n ```bash\n gcloud compute routers create ROUTER_NAME \\\n --network=NETWORK_NAME \\\n --region=REGION\n ```\n\n In the command above, replace:\n - \u003cvar translate=\"no\"\u003eROUTER_NAME\u003c/var\u003e with a name for the Cloud Router resource you want to create.\n - \u003cvar translate=\"no\"\u003eNETWORK_NAME\u003c/var\u003e with the name of your VPC network.\n - \u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e with the region in which you want to create a NAT gateway.\n5. Reserve a static IP address.\n\n This is the address that your service will use to send outgoing traffic. A\n reserved IP address resource retains the underlying IP address when the\n resource it is associated with is deleted and re-created. This IP address\n counts towards the static IP address quotas in your Google Cloud project. \n\n ```bash\n gcloud compute addresses create ORIGIN_IP_NAME \\\n --region=REGION\n ```\n\n In the command above, replace:\n - \u003cvar translate=\"no\"\u003eORIGIN_IP_NAME\u003c/var\u003e with the name you want to assign to the IP address resource.\n - \u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e with the region that will run the Cloud NAT router. Ideally the same region as your App Engine service to minimize latency and network costs.\n\n Use the [`compute addresses describe` command](/sdk/gcloud/reference/compute/addresses/describe)\n to view the result: \n\n ```\n gcloud compute addresses describe ORIGIN_IP_NAME\n ```\n6. Create a Cloud NAT gateway and specify your IP address.\n\n Traffic originating from your subnet will go through this gateway and use\n the static IP address that you reserved in the previous step. \n\n ```bash\n gcloud compute routers nats create NAT_NAME \\\n --router=ROUTER_NAME \\\n --region=REGION \\\n --nat-custom-subnet-ip-ranges=SUBNET_NAME \\\n --nat-external-ip-pool=ORIGIN_IP_NAME\n \n ```\n\n In the command above, replace:\n - \u003cvar translate=\"no\"\u003eNAT_NAME\u003c/var\u003e with a name for the Cloud NAT gateway resource you want to create.\n - \u003cvar translate=\"no\"\u003eROUTER_NAME\u003c/var\u003e with the name of your Cloud Router.\n - \u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e with the region in which you want to create a NAT gateway.\n - \u003cvar translate=\"no\"\u003eORIGIN_IP_NAME\u003c/var\u003e with the name of the reserved IP address resource you created in the previous step.\n7. Set the Serverless VPC Access\n [egress setting](/appengine/docs/legacy/standard/python/connecting-vpc#egress)\n to `all-traffic`.\n\n By default, App Engine services that use\n Serverless VPC Access only send internal traffic to your\n VPC network. In order to send traffic with external\n destinations to your VPC network so that it will have the\n static IP address that you specified, you must change the egress setting.\n\n\n Specify the egress setting in the\n [`app.yaml`](/appengine/docs/legacy/standard/python/config/appref)\n file for your service:\n\n \u003cbr /\u003e\n\n ```yaml\n vpc_access_connector:\n name: projects/\u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e/locations/\u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e/connectors/\u003cvar translate=\"no\"\u003eCONNECTOR_NAME\u003c/var\u003e\n egress_setting: all-traffic\n ```\n\n \u003cbr /\u003e\n\n Replace:\n - \u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e with your Google Cloud project ID.\n - \u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e with the region your connector is in.\n - \u003cvar translate=\"no\"\u003eCONNECTOR_NAME\u003c/var\u003e with the name of your connector.\n\n Deploy the service: \n\n ```bash\n gcloud app deploy\n ```"]]