Indirizzi IP in uscita per i servizi App Engine

I servizi in uscita, come le API di recupero URL, Socket e Mail, utilizzano un grande pool di indirizzi IP. Gli intervalli di indirizzi IP in questo pool sono soggetti a modifiche di routine. Infatti, due chiamate API sequenziali dalla stessa applicazione possono sembrano provenire da due indirizzi IP diversi.

Per conoscere gli indirizzi IP associati al traffico in uscita dal tuo servizio, puoi trovare gli intervalli di indirizzi IP attuali per il tuo servizio oppure e configurare un indirizzo IP statico per il tuo servizio.

Indirizzi IP per i servizi App Engine

Puoi trovare gli intervalli di indirizzi IP attuali per i tuoi servizi App Engine in base alle informazioni sugli intervalli IP pubblicate da Google:

  • Google pubblica l'elenco completo degli intervalli IP che rende disponibili utenti su internet in goog.json.

  • Google pubblica inoltre un elenco di indirizzi IP esterni globali e a livello di regione disponibili per i clienti alle risorse Google Cloud cloud.json.

Gli indirizzi IP utilizzati dalle API e dai servizi Google sono adatti all'interno dell'elenco di intervalli calcolato rimuovendo tutti gli intervalli in cloud.json da quelli di goog.json. Questi elenchi vengono aggiornati di frequente.

Puoi utilizzare il seguente script Python per creare un elenco di intervalli di indirizzi IP che includono quelle utilizzate dalle API e dai servizi Google.

Per informazioni sull'esecuzione di questo script, consulta Come vengono eseguiti.

from __future__ import print_function

import json

try:
    from urllib import urlopen
except ImportError:
    from urllib.request import urlopen
    from urllib.error import HTTPError

import netaddr

IPRANGE_URLS = {
    "goog": "https://www.gstatic.com/ipranges/goog.json",
    "cloud": "https://www.gstatic.com/ipranges/cloud.json",
}


def read_url(url):
    try:
        return json.loads(urlopen(url).read())
    except (IOError, HTTPError):
        print("ERROR: Invalid HTTP response from %s" % url)
    except json.decoder.JSONDecodeError:
        print("ERROR: Could not parse HTTP response from %s" % url)


def get_data(link):
    data = read_url(link)
    if data:
        print("{} published: {}".format(link, data.get("creationTime")))
        cidrs = netaddr.IPSet()
        for e in data["prefixes"]:
            if "ipv4Prefix" in e:
                cidrs.add(e.get("ipv4Prefix"))
            if "ipv6Prefix" in e:
                cidrs.add(e.get("ipv6Prefix"))
        return cidrs


def main():
    cidrs = {group: get_data(link) for group, link in IPRANGE_URLS.items()}
    if len(cidrs) != 2:
        raise ValueError("ERROR: Could process data from Google")
    print("IP ranges for Google APIs and services default domains:")
    for ip in (cidrs["goog"] - cidrs["cloud"]).iter_cidrs():
        print(ip)


if __name__ == "__main__":
    main()

Configurare un indirizzo IP in uscita statico

Per configurare un indirizzo IP statico per il servizio dell'ambiente standard di App Engine, utilizza Accesso VPC serverless con il router Cloud e Cloud NAT. Utilizzando Con l'accesso VPC serverless, puoi inviare il traffico in uscita una rete VPC (Virtual Private Cloud). Tramite un indirizzo di rete di traduzione automatica (NAT) sul tuo VPC, puoi instradare al traffico di App Engine attraverso un indirizzo IP dedicato.

Il routing del traffico tramite Cloud NAT non comporta un ulteriore hop in il tuo stack di networking, poiché il gateway Cloud NAT e il router Cloud fornisce solo un piano di controllo e i pacchetti non passano attraverso dal gateway Cloud NAT o dal router Cloud.

Impossibile configurare indirizzi IP in uscita statici per il traffico inviato utilizzando Servizio di recupero URL. Il traffico inviato tramite il servizio di recupero URL continuerà a utilizzare nel pool di indirizzi IP pubblici. Se vuoi che tutto il traffico in uscita utilizzi una un indirizzo IP statico, disattivare l'impostazione predefinita Recupero URL e interrompere qualsiasi uso esplicito della raccolta urlfetch.

I passaggi seguenti spiegano come configurare un indirizzo IP in uscita statico per il tuo Servizio di ambiente standard di App Engine.

  1. Assicurati di avere roles/compute.networkAdmin o un ruolo personalizzato con le stesse autorizzazioni.

  2. Crea una subnet all'interno della tua rete VPC per e il traffico di App Engine. Ciò garantisce che le altre risorse in La rete VPC non può utilizzare l'indirizzo IP statico.

    gcloud compute networks subnets create SUBNET_NAME \
        --range=RANGE \
        --network=NETWORK_NAME \
        --region=REGION

    Nel comando precedente, sostituisci:

    • SUBNET_NAME con il nome che vuoi assegnare alla una subnet.
    • RANGE con Intervallo IP in CIDR che desideri assegnare alla subnet (ad es. 10.124.0.0/28)
    • NETWORK_NAME con il nome del tuo rete VPC.
    • REGION con la regione del tuo dal servizio App Engine.
  3. Connetti il tuo servizio App Engine alla subnet.

    Segui la guida Connettersi a una rete VPC, e specificare il nome della subnet creata nel passaggio precedente per con una subnet del connettore AWS.

  4. Creare un nuovo router Cloud. Il router Cloud è un piano di controllo necessario per Cloud NAT.

    gcloud compute routers create ROUTER_NAME \
        --network=NETWORK_NAME \
        --region=REGION

    Nel comando precedente, sostituisci:

    • ROUTER_NAME con un nome per Risorsa router Cloud che vuoi creare.
    • NETWORK_NAME con il nome del tuo rete VPC.
    • REGION con la regione in cui vuoi per creare un gateway NAT.
  5. Prenotare un indirizzo IP statico.

    Questo è l'indirizzo che verrà utilizzato dal servizio per inviare il traffico in uscita. R di indirizzi IP riservati conserva l'indirizzo IP sottostante quando la risorsa a cui è associata viene eliminata e ricreata. Questo indirizzo IP viene conteggiato ai fini delle quote di indirizzi IP statici nel progetto Google Cloud.

    gcloud compute addresses create ORIGIN_IP_NAME \
        --region=REGION

    Nel comando precedente, sostituisci:

    • ORIGIN_IP_NAME con il nome che vuoi assegnare alla risorsa dell'indirizzo IP.
    • REGION con la regione che eseguirà Router Cloud NAT. Possibilmente la stessa regione di App Engine per ridurre al minimo la latenza e i costi di rete.

    Usa il comando compute addresses describe per visualizzare il risultato:

    gcloud compute addresses describe ORIGIN_IP_NAME
  6. Crea un gateway Cloud NAT e specifica il tuo indirizzo IP.

    Il traffico proveniente dalla tua subnet passerà attraverso questo gateway e utilizzerà all'indirizzo IP statico prenotato nel passaggio precedente.

    gcloud compute routers nats create NAT_NAME \
        --router=ROUTER_NAME \
        --region=REGION \
        --nat-custom-subnet-ip-ranges=SUBNET_NAME \
        --nat-external-ip-pool=ORIGIN_IP_NAME
      

    Nel comando precedente, sostituisci:

    • NAT_NAME con un nome per Cloud NAT del gateway che vuoi creare.
    • ROUTER_NAME con il nome del tuo router Cloud.
    • REGION con la regione in cui vuoi per creare un gateway NAT.
    • ORIGIN_IP_NAME con il nome dell'IP riservato di indirizzi IP che hai creato nel passaggio precedente.
  7. Imposta l'accesso VPC serverless impostazione di traffico in uscita a all-traffic.

    Per impostazione predefinita, i servizi App Engine che utilizzano L'accesso VPC serverless invia solo traffico interno rete VPC. Per inviare traffico con indirizzi verso la rete VPC in modo che abbia statico specificato, devi modificare l'impostazione del traffico in uscita.

    Specifica l'impostazione del traffico in uscita nel app.yaml file per il tuo servizio:

    vpc_access_connector:
      name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
      egress_setting: all-traffic

    Sostituisci:

    • PROJECT_ID con il tuo ID progetto Google Cloud.
    • REGION con la regione in cui si trova il tuo connettore.
    • CONNECTOR_NAME con il nome del tuo connettore.

    Esegui il deployment del servizio:

     gcloud app deploy