Configurare le impostazioni di rete (1ª generazione.)

Le impostazioni di rete delle funzioni Cloud Run ti consentono di controllare l'ingresso e l'uscita di rete verso e da singole funzioni. Ad esempio, puoi utilizzare la rete impostazioni per i seguenti casi d'uso:

  • Proteggi le tue funzioni implementando controllo dell'accesso basato sulla rete.
  • Fare in modo che il traffico in uscita di una funzione rispetti le regole del firewall, del DNS e di routing associati alla tua rete VPC.
  • Associare il traffico in uscita di una funzione a un indirizzo IP statico.

Per maggiori dettagli sui casi d'uso, consulta la sezione Casi d'uso di esempio.

Impostazioni traffico in entrata

Le impostazioni di Ingress controllano se le risorse esterne al tuo progetto Google Cloud o Il perimetro di servizio Controlli di servizio VPC richiamare una funzione.

Per essere soggetta a un criterio del perimetro dei Controlli di servizio VPC, una risorsa deve Appartengono al servizio da limitare. Per le funzioni Cloud Run (1ª generazione.), il servizio limitato è l'API Cloud Functions.

Limitazioni

Le funzioni attivate da HTTP solo per uso interno possono Essere richiamato solo da richieste HTTP create all'interno di un VPC ad esempio quelle di Kubernetes Engine, Compute Engine, Ambiente flessibile di App Engine, oppure da Cloud Scheduler, Cloud Tasks, Workflows o BigQuery che si trovano nello stesso progetto o perimetro dei Controlli di servizio VPC. Ciò significa che le richieste HTTP create da o inoltrate tramite Pub/Sub o Eventarc non possono attivare queste funzioni. Gli attivatori di eventi sono sempre considerati "interni" e sono consentiti indipendentemente dall'impostazione di ingresso.

Configura le impostazioni di traffico in entrata

Per limitare le risorse dall'esterno del progetto o del perimetro, specifica uno dei seguenti valori: i seguenti valori di impostazione di traffico in entrata:

  • Consenti tutto il traffico: impostazione predefinita. Tutte le richieste in entrata alla funzione vengono sia da internet sia dalle risorse all'interno dello stesso progetto.
  • Consenti solo traffico interno: solo traffico proveniente da Cloud Scheduler, Cloud Tasks, Eventarc, Workflows BigQuery e reti VPC nello stesso progetto o nel perimetro dei Controlli di servizio VPC è consentito. Tutte le altre richieste vengono rifiutate con un errore 404.

    Per le richieste da un VPC condiviso, tieni presente che le seguenti considerazioni:

    • Il traffico è considerato interno se viene eseguito il deployment della funzione nella Progetto host VPC condiviso.
    • Il traffico è considerato interno se l'host del VPC condiviso e tutti che i progetti di servizio si trovano all'interno dello stesso Perimetro Controlli di servizio VPC.
    • Tutto il resto del traffico dalle reti VPC condiviso è negato.
  • Consenti il traffico interno e da Cloud Load Balancing: è consentito il traffico proveniente da Cloud Scheduler, Cloud Tasks, Eventarc, Workflows, BigQuery e dalle reti VPC nello stesso progetto o nello stesso perimetro dei controlli di servizio VPC. Il traffico da Cloud Load Balancing è consentito.

Puoi specificare le impostazioni di traffico in entrata quando esegui il deployment o l'aggiornamento della funzione utilizzando la console Google Cloud, Google Cloud CLI o Terraform:

Console

  1. Apri la pagina Panoramica di Functions nella console Google Cloud:

    Vai alle funzioni di Cloud Run nella pagina Panoramica

  2. Fai clic su Crea funzione. In alternativa, fai clic su una funzione esistente per accedere alla relativa pagina dei dettagli e fai clic su Modifica.

  3. Espandi le impostazioni avanzate facendo clic su Runtime, build ....

  4. Nella sezione Connections (Connessioni), seleziona un valore per Ingress (Impostazioni Ingress.

gcloud

Utilizza il comando gcloud functions deploy per eseguire il deployment o l'aggiornamento della funzione e specifica il flag --ingress-settings:

  gcloud functions deploy FUNCTION_NAME 
--trigger-http
--ingress-settings INGRESS_SETTINGS
FLAGS...

dove:

  • FUNCTION_NAME è il nome della funzione.
  • INGRESS_SETTINGS è uno dei valori supportati per le impostazioni del traffico in entrata. I valori possibili sono:

    • all
    • internal-only
    • internal-and-gclb: consente il traffico interno e il traffico inviato a e un IP pubblico esposto Cloud Load Balancing. Blocchi traffico inviato a cloudfunctions.net o a qualsiasi dominio personalizzato configurato tramite le funzioni di Cloud Run. Impedisce agli utenti di aggirare i controlli di accesso (Cloud Armor, IAP) che hanno configurato tramite Cloud Load Balancing.
  • FLAGS... si riferisce ad altri flag che passi alla Comando deploy.

Terraform

Facoltativo. Per aggiornare il campo delle impostazioni di ingresso del file main.tf della risorsa Terraform, includi l'argomento ingress_settings che vuoi eseguire il deployment o l'aggiornamento. Se apporti modifiche alle impostazioni di traffico in entrata, la funzione viene ricreata.

  1. Dal file main.tf, individua la risorsa che vuoi limitare impostazioni di traffico in entrata e aggiornarle con l'impostazione che preferisci, ad esempio:

    resource "google_cloudfunctions_function" "function" {
      name             = "function"
      location         = "us-central1"
      description      = "Sample function"
      ingress_settings = "INGRESS_SETTINGS"
    }

    dove INGRESS_SETTINGS è uno dei valori supportati per le impostazioni di importazione. I valori possibili sono:

    • ALLOW_ALL (predefinito): sono consentite tutte le richieste in entrata alla funzione, da entrambi su internet e le risorse all'interno dello stesso progetto.
    • ALLOW_INTERNAL_ONLY: solo traffico proveniente da Cloud Scheduler, Cloud Tasks, Eventarc, Workflows reti VPC nello stesso progetto Perimetro Controlli di servizio VPC è consentito.
    • ALLOW_INTERNAL_AND_GCLB: consente il traffico interno e il traffico inviato a un indirizzo IP pubblico esposto da Cloud Load Balancing. Blocca il traffico inviato a cloudfunctions.net o a qualsiasi dominio personalizzato configurato attraverso le funzioni di Cloud Run. Impedisce agli utenti di eludere qualsiasi controlli dell'accesso (Cloud Armor, IAP) configurati mediante Cloud Load Balancing.

Se utilizzi Google Cloud Armor Cloud Load Balancing, puoi creare criteri di sicurezza che filtrano le condizioni basate sul traffico, l'indirizzo IP, l'intervallo IP, il codice regione o le intestazioni della richiesta di una richiesta in entrata. Per ulteriori informazioni, vedi Panoramica dei criteri di sicurezza di Google Cloud Armor.

Impostazioni traffico in uscita

Le impostazioni di uscita controllano il routing delle richieste HTTP in uscita da una funzione. Per specificare le impostazioni di traffico in uscita, devi connettere la funzione a una rete VPC mediante un connettore di accesso VPC serverless. Controllo delle impostazioni in uscita quando il traffico viene instradato attraverso il connettore nella tua rete VPC.

Limitazioni

  • L'accesso VPC serverless supporta solo il routing del traffico IPv4. IPv6 il traffico non è supportato, anche se nel VPC sono presenti route IPv6 in ogni rete.

  • Per maggiore sicurezza, Google Cloud blocca i pacchetti in uscita verso indirizzi IP esterni sulla porta di destinazione TCP 25.

  • Le funzioni o i servizi utente che richiamano funzioni o servizi protetti da una rete VPC devono instradare queste chiamate tramite un connettore VPC.

Configura le impostazioni del traffico in uscita

Per le impostazioni del traffico in uscita, puoi specificare quanto segue:

  • Instrada solo le richieste a IP privati tramite il connettore VPC: impostazione predefinita. Il traffico viene instradato attraverso la rete VPC solo se i pacchetti che generano traffico hanno destinazioni corrispondenti alle seguenti:

    I pacchetti diretti a qualsiasi altra destinazione vengono instradati dalle funzioni Cloud Run a internet e non tramite una rete VPC.

  • Instrada tutto il traffico attraverso il connettore VPC: il traffico viene sempre instradato tramite la rete VPC associata al connettore per tutte le destinazioni dei pacchetti. Devi utilizzare questa opzione nelle seguenti circostanze:

    • Se devi inviare il traffico a intervalli di subnet VPC con di indirizzi IP esterni utilizzati privatamente. Per ulteriori informazioni Intervalli di subnet VPC, consulta IPv4 valido nella pagina Panoramica delle subnet.
    • Se devi inviare traffico a un endpoint Private Service Connect per le API di Google il cui indirizzo è un indirizzo IP esterno utilizzato privatamente. Per ulteriori informazioni su Private Service Connect endpoint per le API di Google, consulta Accedere alle API di Google tramite endpoint.
    • Se devi inviare il traffico a un altro indirizzo IP esterno utilizzato privatamente destinazione instradabile all'interno del VPC del connettore in ogni rete. Alcuni esempi di altre destinazioni che coprono indirizzi IP esterni utilizzati privatamente possono includere intervalli di subnet di peering, intervalli di subnet di peering creati da intervalli di indirizzi IP allocati per i servizi e le destinazioni accessibili utilizzando route personalizzate nella rete VPC.

    Se la tua rete VPC include una route predefinita, i pacchetti possono comunque essere instradati a internet dopo essere stati elaborati dal connettore se configuri un gateway Cloud NAT per fornire servizi NAT alla subnet utilizzata dal connettore. Questi pacchetti sono soggetti alle route nella rete VPC e alle regole del firewall applicate alla rete VPC. Puoi utilizzare la configurazione della route e del firewall controllare il traffico in uscita da internet per tutte le richieste in uscita inviate dalla tua funzione attraverso un connettore di accesso VPC serverless.

Puoi specificare le impostazioni di traffico in uscita quando esegui il deployment o l'aggiornamento della funzione utilizzando la console Google Cloud o Google Cloud CLI.

Console

  1. Apri la pagina Panoramica delle funzioni nella console Google Cloud:

    Vai alle funzioni di Cloud Run nella pagina Panoramica

  2. Fai clic su Crea funzione. In alternativa, fai clic su una funzione esistente per accedere alla relativa pagina dei dettagli e fai clic su Modifica.

  3. Espandi le impostazioni avanzate facendo clic su Runtime, build...

  4. Nella sezione Connessioni, in Impostazioni in uscita, seleziona un connettore di accesso VPC serverless.

  5. Seleziona l'impostazione di uscita appropriata in base a come vuoi indirizzare il traffico in uscita tramite il connettore.

gcloud

Utilizza il comando gcloud functions deploy per eseguire il deployment o l'aggiornamento della funzione e specifica il flag --egress-settings:

  gcloud functions deploy FUNCTION_NAME 
--vpc-connector CONNECTOR_NAME
--egress-settings EGRESS_SETTINGS
FLAGS...

dove:

  • FUNCTION_NAME è il nome della funzione.
  • CONNECTOR_NAME è il nome del Connettore di accesso VPC serverless da utilizzare. Consulta le Documentazione di gcloud per ulteriori informazioni.

  • EGRESS_SETTINGS è uno dei valori supportati per le impostazioni di traffico in uscita: consulta la documentazione di gcloud.

  • FLAGS... si riferisce ad altri flag che passi alla Comando deploy.

Esempi di casi d'uso

I seguenti esempi mostrano come configurare l'accesso alla rete in diversi scenari più comuni.

Creazione di una funzione che non può essere chiamata da client esterni

Puoi proteggere le funzioni HTTP consentendone di essere chiamate solo nello stesso progetto Google Cloud Perimetro di servizio Controlli di servizio VPC.

  1. Esegui il deployment della funzione e consenti solo il traffico interno. Utilizza la Console Google Cloud o Google Cloud CLI:

    Console

    1. Apri la pagina Panoramica delle funzioni nella console Google Cloud:

      Vai alle funzioni di Cloud Run nella pagina Panoramica

    2. Fai clic su Crea funzione. In alternativa, fai clic su un modello per accedere alla relativa pagina dei dettagli e fai clic su Modifica.

    3. Espandi le impostazioni avanzate facendo clic su Runtime, build ....

    4. Nella sezione Connessioni, in Impostazioni in entrata, seleziona Consenti solo traffico interno.

    gcloud

    Usa il comando gcloud functions deploy:

    gcloud functions deploy FUNCTION_NAME \
    --ingress-settings internal-only \
    FLAGS...
    

Dopo aver eseguito il deployment della funzione, le richieste provenienti dall'esterno I progetti Google Cloud non possono raggiungere la funzione. Se utilizzi Controlli di servizio VPC, le richieste dall'esterno del perimetro di servizio bloccato. Le istanze VM all'interno del perimetro del progetto o di servizio possono raggiungere la funzione inviando richieste al relativo endpoint HTTPS.

Se vuoi chiamare questa funzione limitata da un'altra funzione, la funzione di chiamata deve instradare il traffico in uscita attraverso la rete VPC.

Utilizzo delle impostazioni di traffico in entrata e in uscita per limitare l'accesso

È possibile incorporare sia il traffico in entrata che quello in uscita verso i propri servizi per aggiungere un ulteriore livello di limitazione.

  1. Clona il repository cloud-run-sample e passa alla directory vpc-sample:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    cd vpc-sample

  2. Installa le dipendenze Python:

    pip3 install -r requirements.txt

  3. Puoi aprire il file main.py nella directory vpc-sample per vedere la funzione che stai implementando:

    def hello_world(request):
        return "Hello World!"

  4. Esegui il deployment della funzione:

    gcloud functions deploy restricted-function 
    --runtime=python38
    --trigger-http
    --no-allow-unauthenticated
    --ingress-settings=internal-only
    --entry-point=hello_world

  5. Configura un connettore di accesso VPC serverless:

    gcloud compute networks vpc-access connectors create serverless-connector 
    --region=SERVICE_REGION
    --range=10.8.0.0/28

    dove SERVICE_REGION è una regione per il connettore; Questo deve corrispondere alla regione del tuo servizio serverless. Se il servizio è nella regione us-central o europe-west, usa us-central1 o europe-west1.

  6. Crea la tua immagine container:

    gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .

    dove PROJECT_ID è l'ID progetto.

    Questa operazione crea un'immagine container che richiama get_hello_world quando viene eseguito il deployment dal file main.py:

    import os
    import urllib
    
    import google.auth.transport.requests
    import google.oauth2.id_token
    
    
    def get_hello_world(request):
        try:
            url = os.environ.get("URL")
            req = urllib.request.Request(url)
    
            auth_req = google.auth.transport.requests.Request()
            id_token = google.oauth2.id_token.fetch_id_token(auth_req, url)
            req.add_header("Authorization", f"Bearer {id_token}")
    
            response = urllib.request.urlopen(req)
            return response.read()
    
        except Exception as e:
            print(e)
            return str(e)

  7. Utilizza il comando gcloud run deploy run-function per eseguire il deployment del contenitore Cloud Run:

      gcloud run deploy run-function 
    --image gcr.io/PROJECT_ID/restricted-function-caller
    --no-allow-unauthenticated
    --update-env-vars=URL=https://SERVICE_REGION-PROJECT_ID.cloudfunctions.net/restricted-function-caller
    --vpc-egress=all
    --vpc-connector=serverless-connector
    --region=SERVICE_REGION

    dove:

    • PROJECT_ID è l'ID progetto.
    • SERVICE_REGION è una regione per il connettore. Questo deve corrispondere alla regione del tuo servizio serverless. Se il servizio è nella regione us-central o europe-west, usa us-central1 o europe-west1.

    Il servizio run-function di Cloud Run è ora impostato per inviare una richiesta GET dal connettore VPC alla funzione limitata di rete.

Funzione di routing in uscita attraverso la rete VPC

Le reti VPC in Google Cloud supportano configurazioni e funzionalità di networking. Instradando il traffico in uscita dalla tua nella tua rete VPC, puoi assicurarti che Il traffico in uscita di Cloud Run Functions segue il tuo VPC il firewall di rete, il DNS, il routing e altre regole. Puoi usare come Cloud NAT.

  1. Configura una rete VPC. Configura un modello esistente rete VPC o creane una nuova seguendo la guida all'indirizzo Utilizzo delle reti VPC.

  2. Configura un connettore di accesso VPC serverless. Le funzioni Cloud Run richiedono un accesso VPC serverless per instradare il traffico alla tua rete VPC. Crea un connettore e imposta le autorizzazioni appropriate seguendo le istruzioni alla pagina Connessione a una rete VPC.

  3. Esegui il deployment di una funzione che utilizza il connettore e inoltra tutto il traffico in uscita tramite il connettore. Utilizza la console Google Cloud o gcloud a strumento a riga di comando:

    Console

    1. Apri la pagina Panoramica delle funzioni nella console Google Cloud:

      Vai alle funzioni di Cloud Run nella pagina Panoramica

    2. Fai clic su Crea funzione. In alternativa, fai clic su un modello per accedere alla relativa pagina dei dettagli e fai clic su Modifica.

    3. Espandi le impostazioni avanzate facendo clic su Runtime, build...

    4. Nella sezione Connessioni, in Impostazioni in uscita, seleziona il connettore di accesso VPC serverless e seleziona Instrada tutto il traffico tramite il connettore VPC.

    gcloud

    Usa il comando gcloud functions deploy:

    gcloud functions deploy FUNCTION_NAME \
    --vpc-connector CONNECTOR_NAME \
    --egress-settings all \
    FLAGS...
    

Dopo aver eseguito il deployment della funzione, tutto il traffico proveniente da quest'ultima viene instradato tramite la rete VPC e aderisce alle regole impostate sulla tua rete VPC. Tieni presente che la funzione non è in grado di accedere alla rete internet pubblica a meno che non configuri Cloud NAT. Tieni inoltre presente che devi che Cloud NAT mappi tutti gli intervalli IP principali e secondari per tutte le subnet al gateway NAT, in modo da includere la subnet del connettore nella mappatura.

Associazione del traffico in uscita della funzione a un indirizzo IP statico

In alcuni casi, potresti voler associare il traffico proveniente dalla tua funzione a un indirizzo IP statico. Ad esempio, questo è utile se chiamando un servizio esterno che consente solo le richieste provenienti e gli indirizzi IP esterni.

  1. Instrada il traffico in uscita della funzione attraverso la rete VPC. Vedi la sezione precedente, Traffico della funzione di routing in uscita attraverso la rete VPC.

  2. Configura Cloud NAT e specifica un indirizzo IP statico. Segui le guide riportate in Specifica intervalli di subnet per NAT e Specifica indirizzi IP per NAT per configurare Cloud NAT per la subnet associata al connettore di accesso VPC serverless della tua funzione. Cloud NAT deve mappare tutti gli intervalli IP primari e secondari tutte le subnet al gateway NAT in modo da includere subnet nel mapping.

Bilanciamento del carico multiregionale

Puoi eseguire il deployment di una funzione in regioni diverse e consentire che la richiesta venga inviati alla regione integro più vicino. A questo scopo, devi configurare un gruppo di endpoint di rete (NEG) serverless per la funzione e connetterlo a un del bilanciatore del carico, come descritto in Configurazione di un bilanciatore del carico HTTP(S) con serverless NEG.