Configura le impostazioni di rete
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 il 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.
- Associa 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 ingresso controllano se le risorse esterne al progetto Google Cloud o al perimetro di servizio Controlli di servizio VPC possono invocare 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, il servizio con limitazioni è l'API Cloud Run Admin.
Configura le impostazioni di traffico in entrata
Per limitare le risorse esterne al progetto o al perimetro, specifica uno dei seguenti valori di impostazione di ingresso:
- 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 il traffico interno: è consentito solo il traffico proveniente da Cloud Scheduler, Cloud Tasks, Eventarc, monitor sintetici (inclusi i controlli di uptime), Workflows, BigQuery e reti VPC nello stesso progetto o nel perimetro dei controlli di servizio VPC. 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.
- Il traffico verso una funzione è considerato interno se la funzione è connessa alla stessa rete VPC condivisa.
- Tutto il resto del traffico proveniente dalle reti VPC condivise viene negato.
Consenti traffico interno e traffico da Cloud Load Balancing: è consentito il traffico da Cloud Scheduler, Cloud Tasks, Eventarc, monitor sintetici (inclusi i controlli di uptime), Workflow, BigQuery e reti VPC nello stesso progetto o nello stesso perimetro dei controlli di servizio VPC. È consentito il traffico da Cloud Load Balancing.
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
Apri la pagina Panoramica di Functions nella console Google Cloud:
Fai clic su Crea funzione. In alternativa, fai clic su una funzione esistente per andare alla relativa pagina dei dettagli e poi su Modifica.
Espandi le impostazioni avanzate facendo clic su Runtime, build ....
Nella sezione Connessioni, seleziona un valore per Impostazioni di importazione.
gcloud
Utilizza il comando gcloud functions deploy
per eseguire il deployment o aggiornare
e specifica la funzione
--ingress-settings
Segnala:
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 un indirizzo IP pubblico esposto da Cloud Load Balancing. Blocca il traffico inviato acloudfunctions.net
o a qualsiasi dominio personalizzato configurato tramite le funzioni 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 Comandodeploy
.
Terraform
Facoltativo. Per aggiornare il campo delle impostazioni di traffico in entrata del file main.tf
del tuo
Risorsa Terraform, includi l'argomento ingress_settings
che hai
che vuoi eseguire il deployment o l'aggiornamento. Se apporti modifiche alle impostazioni di traffico in entrata, la funzione viene ricreata.
Nel file
main.tf
, individua la risorsa per la quale vuoi limitare le impostazioni di accesso e aggiornala 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
(valore predefinito): sono consentite tutte le richieste in entrata alla funzione, sia da internet sia dalle risorse all'interno dello stesso progetto.ALLOW_INTERNAL_ONLY
: è consentito solo il traffico proveniente da Cloud Scheduler, Cloud Tasks, Eventarc, Workflow e reti VPC nello stesso progetto o nello stesso perimetro dei controlli di servizio VPC.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 acloudfunctions.net
o a qualsiasi dominio personalizzato configurato tramite le funzioni Cloud Run. Impedisce agli utenti di aggirare i controlli di accesso (Cloud Armor, IAP) che hanno configurato tramite Cloud Load Balancing.
Se utilizzi Google Cloud Armor con Cloud Load Balancing, puoi creare criteri di sicurezza che filtrano le condizioni basate sul traffico, ad esempio l'indirizzo IP, l'intervallo IP, il codice regione o le intestazioni di una richiesta in entrata. Per maggiori informazioni, consulta la 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. Le impostazioni di traffico in uscita controllano quando il traffico viene indirizzato tramite il connettore nella rete VPC.
Limitazioni
L'accesso VPC serverless supporta solo il routing del traffico IPv4. Il traffico IPv6 non è supportato, anche se hai route IPv6 nella rete VPC.
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 di traffico in uscita
Per le impostazioni del traffico in uscita, puoi specificare quanto segue:
Instrada solo le richieste a IP privati attraverso il connettore VPC: impostazione predefinita. Il traffico viene instradato tramite la rete VPC solo se i pacchetti che lo trasportano hanno destinazioni corrispondenti a quanto segue:
I pacchetti verso qualsiasi altra destinazione vengono instradati dalle funzioni di Cloud Run a internet e non attraverso nessuna 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 sugli intervalli di subnet VPC, consulta Intervalli IPv4 validi nella panoramica delle subnet.
- Se devi inviare traffico a Private Service Connect endpoint per le API di Google il cui indirizzo è un IP esterno utilizzato privatamente . Per ulteriori informazioni sugli endpoint di Private Service Connect per le API di Google, consulta Accedere alle API di Google tramite gli endpoint.
- Se devi inviare traffico a qualsiasi altro indirizzo IP esterno utilizzato privatamente come destinazione, che sia instradabile all'interno della rete VPC del connettore. Esempi di altre destinazioni che coprono indirizzi IP esterni utilizzati privatamente gli indirizzi possono includere intervalli di subnet di peering, intervalli di subnet di peering creato da Intervalli di indirizzi IP allocati per servizi, e quelle accessibili tramite route personalizzate rete VPC.
Se la tua rete VPC include una route predefinita, i pacchetti possono a internet dopo essere stato elaborato dal connettore se Configurare un gateway Cloud NAT per fornire i 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 delle route e del firewall per controllare il traffico in uscita su internet per tutte le richieste in uscita inviate dalla tua funzione tramite 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
Apri la pagina Panoramica delle funzioni nella console Google Cloud:
Fai clic su Crea funzione. In alternativa, fai clic su una funzione esistente per andare alla relativa pagina dei dettagli e poi su Modifica.
Espandi le impostazioni avanzate facendo clic su Runtime, build...
Nella sezione Connessioni, in Impostazioni di uscita, seleziona un connettore di accesso VPC serverless.
Seleziona l'impostazione di traffico in uscita appropriata in base a come intendi indirizzare per il traffico in uscita tramite il connettore.
gcloud
Utilizza il comando gcloud functions deploy
per eseguire il deployment o aggiornare
e specifica la funzione
--egress-settings
Segnala:
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 digcloud
per ulteriori informazioni.EGRESS_SETTINGS
è uno dei valori supportati per le impostazioni di traffico in uscita: consulta la documentazione digcloud
.FLAGS...
fa riferimento ad altri flag passati al comandodeploy
.
Esempi di casi d'uso
Gli esempi riportati di seguito mostrano come configurare l'accesso alla rete in diversi scenari 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.
Esegui il deployment della funzione e consenti solo il traffico interno. Utilizza la Console Google Cloud o Google Cloud CLI:
Console
Apri la pagina Panoramica delle funzioni nella console Google Cloud:
Fai clic su Crea funzione. In alternativa, fai clic su una funzione esistente per accedere alla relativa pagina dei dettagli e poi su Modifica.
Espandi le impostazioni avanzate facendo clic su Runtime, build...
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 del progetto Google Cloud vengono bloccate e 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 con limitazioni da un'altra funzione, la funzione di chiamata deve instradare il traffico in uscita tramite la tua rete VPC.
Utilizzo delle impostazioni 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.
Clona il repository
cloud-run-sample
e passa alla directoryvpc-sample
:git clone https://github.com/GoogleCloudPlatform/cloud-run-samples cd vpc-sample
Installa le dipendenze Python:
pip3 install -r requirements.txt
Puoi aprire il file
main.py
nella directoryvpc-sample
per visualizzare la funzione di cui stai eseguendo il deployment:Esegui il deployment della funzione:
gcloud functions deploy restricted-function
--runtime=python38
--trigger-http
--no-allow-unauthenticated
--ingress-settings=internal-only
--entry-point=hello_worldConfigura un connettore di accesso VPC serverless:
gcloud compute networks vpc-access connectors create serverless-connector
--region=SERVICE_REGION
--range=10.8.0.0/28dove
SERVICE_REGION
è una regione per il connettore; deve corrispondere alla regione del servizio serverless. Se il servizio è nella regioneus-central
oeurope-west
, usaus-central1
oeurope-west1
.Crea la tua immagine container:
gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .
dove
PROJECT_ID
è l'ID progetto.Viene creata un'immagine container che richiama
get_hello_world
quando viene eseguita il deployment dal filemain.py
: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 regioneus-central
oeurope-west
, usaus-central1
oeurope-west1
.
Il servizio
run-function
di Cloud Run è ora impostato per inviare una richiestaGET
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.
Configura una rete VPC. Configura un modello esistente rete VPC o creane una nuova seguendo la guida all'indirizzo Utilizzo delle reti VPC.
Configura un connettore di accesso VPC serverless. Le funzioni Cloud Run richiedono un connettore di accesso VPC serverless per instradare il traffico nella rete VPC. Crea un connettore e configura le autorizzazioni appropriate seguendo le istruzioni riportate in Connessione a una rete VPC.
Esegui il deployment di una funzione che utilizza il connettore e instrada il traffico in uscita attraverso il connettore. Utilizza la console Google Cloud o lo strumento a riga di comando
gcloud
:Console
Apri la pagina Panoramica di Functions nella console Google Cloud:
Fai clic su Crea funzione. In alternativa, fai clic su un modello per accedere alla relativa pagina dei dettagli e fai clic su Modifica.
Espandi le impostazioni avanzate facendo clic su Runtime, build...
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 dalla funzione viene instradato tramite la rete VPC e rispetta le regole impostate sulla rete VPC. Tieni presente che la tua funzione non può accedere alla rete internet pubblica, a meno che configurare Cloud NAT. Inoltre, tieni presente Cloud NAT per mappare tutti gli intervalli IP primari e secondari per le subnet al gateway NAT, per includere la subnet del connettore il mapping.
Associazione del traffico in uscita della funzione a un indirizzo IP statico
In alcuni casi, potresti volere che il traffico proveniente dalla funzione sia associati 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.
Instrada l'uscita della funzione tramite la rete VPC. Consulta la sezione precedente Eseguire l'egress della funzione di routing tramite la rete VPC.
Configura Cloud NAT e specifica un indirizzo IP statico. Segui le guide su Specifica intervalli di subnet per NAT e Specifica gli indirizzi IP per NAT per configurare Cloud NAT per la subnet associata al database della funzione Connettore di accesso VPC serverless. Cloud NAT deve mappare tutti gli intervalli IP primari e secondari per tutte le subnet al gateway NAT in modo da includere subnet nel mapping.
Bilanciamento del carico su più regioni
Puoi eseguire il deployment di una funzione in regioni diverse e consentire che la richiesta venga inviati alla regione integro più vicino. Per farlo, devi configurare un gruppo di endpoint di rete (NEG) serverless per la funzione e collegarlo a un bilanciatore del carico, come descritto in Configurare un bilanciatore del carico HTTP(S) con NEG serverless.