Configurare le impostazioni di rete (1ª generazione.)
Le impostazioni di rete di Cloud Run Functions consentono di controllare l'ingresso e l'uscita di rete da e verso le singole funzioni. Ad esempio, puoi utilizzare le impostazioni di rete per i seguenti casi d'uso:
- Proteggi le tue funzioni implementando controllo dell'accesso basato sulla rete.
- Fai in modo che il traffico in uscita di una funzione rispetti le regole di firewall, DNS e routing associate 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 Esempi di casi d'uso.
Impostazioni traffico in entrata
Le impostazioni in entrata controllano se le risorse esterne al tuo progetto Google Cloud o al perimetro di servizio Controlli di servizio VPC possono richiamare una funzione.
Per essere soggetta alla policy di un perimetro dei Controlli di servizio VPC, una risorsa deve appartenere al servizio da limitare. Per le funzioni Cloud Run (1ª generazione.), il servizio con limitazioni è l'API Cloud Functions.
Limitazioni
Le funzioni attivate tramite HTTP solo interne possono essere chiamate solo da richieste HTTP create all'interno di una rete VPC, ad esempio quelle provenienti da Kubernetes Engine, Compute Engine, dall'ambiente flessibile App Engine o effettuate da risorse 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 indirizzate tramite Pub/Sub o Eventarc non possono attivare queste funzioni. I trigger evento sono sempre considerati "interni" e sono consentiti indipendentemente dall'impostazione di Ingress.
Configura le impostazioni del traffico in entrata
Per limitare le risorse dall'esterno del progetto o del perimetro, specifica uno dei seguenti valori di impostazione in entrata:
- Consenti tutto il traffico: impostazione predefinita. Tutte le richieste in entrata alla funzione sono consentite, 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, Workflows, BigQuery e dalle reti VPC nello stesso progetto o perimetro dei controlli di servizio VPC. Tutte le altre richieste vengono rifiutate con un errore
404
.Per le richieste provenienti da un VPC condiviso, tieni presente le seguenti considerazioni:
- Il traffico è considerato interno se la funzione viene implementata nel progetto host VPC condiviso.
- Il traffico è considerato interno se l'host VPC condiviso e tutti i progetti di servizio si trovano all'interno dello stesso perimetro dei controlli di servizio VPC.
- Tutto il resto del traffico proveniente dalle reti VPC condiviso viene negato.
Consenti il traffico interno e il traffico da Cloud Load Balancing: è consentito il traffico proveniente da Cloud Scheduler, Cloud Tasks, Eventarc, Workflows, BigQuery e dalle reti VPC nello stesso progetto o perimetro dei controlli di servizio VPC. È consentito il traffico da Cloud Load Balancing.
Puoi specificare le impostazioni di ingresso 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 fai clic su Modifica.
Espandi le impostazioni avanzate facendo clic su Runtime, build ....
Nella sezione Connessioni, seleziona un valore per Impostazioni di ingresso.
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 tua funzione.INGRESS_SETTINGS
è uno dei valori supportati per le impostazioni di ingresso. I valori possibili sono:all
internal-only
internal-and-gclb
: consente il traffico interno e il traffico inviato a un IP pubblico esposto da Cloud Load Balancing. Blocca il traffico inviato acloudfunctions.net
o a qualsiasi dominio personalizzato configurato tramite Cloud Run Functions. Impedisce agli utenti di aggirare i controlli dell'accesso (Cloud Armor, IAP) configurati tramite Cloud Load Balancing.
FLAGS...
si riferisce ad altri flag che passi al comandodeploy
.
Terraform
Facoltativo. Per aggiornare il campo delle impostazioni di ingresso del file main.tf
della tua
risorsa Terraform, includi l'argomento ingress_settings
che vuoi
eseguire il deployment o aggiornare. Se modifichi le impostazioni di ingresso, la funzione viene ricreata.
Nel file
main.tf
, individua la risorsa per cui vuoi limitare le impostazioni di ingresso e aggiornala all'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 ingresso. I valori possibili sono:
ALLOW_ALL
(impostazione predefinita): tutte le richieste in entrata alla funzione sono consentite, 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, Workflows e dalle reti VPC nello stesso progetto o nel perimetro dei controlli di servizio VPC.ALLOW_INTERNAL_AND_GCLB
: consente il traffico interno e il traffico inviato a un IP pubblico esposto da Cloud Load Balancing. Blocca il traffico inviato acloudfunctions.net
o a qualsiasi dominio personalizzato configurato tramite Cloud Run Functions. Impedisce agli utenti di aggirare i controlli dell'accesso (Cloud Armor, IAP) configurati 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 delle richieste 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 utilizzando un connettore di accesso VPC serverless. Le impostazioni di traffico in uscita controllano quando il traffico viene instradato 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 tua 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.
Configurare le impostazioni di uscita
Per le impostazioni di uscita, puoi specificare quanto segue:
Instrada solo le richieste a IP privati attraverso il connettore VPC: impostazione predefinita. Il traffico viene instradato attraverso la rete VPC solo se i pacchetti che trasportano il traffico hanno destinazioni che corrispondono a quanto segue:
I pacchetti verso qualsiasi altra destinazione vengono instradati dalle funzioni Cloud Run a internet e non tramite alcuna rete VPC.
Instrada tutto il traffico attraverso il connettore VPC: il traffico viene sempre instradato attraverso la rete VPC associata al connettore, per tutte le destinazioni dei pacchetti. Devi utilizzare questa opzione nelle seguenti circostanze:
- Se devi inviare traffico a intervalli di subnet VPC con intervalli di indirizzi IP esterni utilizzati privatamente. Per saperne di più sugli intervalli di subnet VPC, vedi Intervalli IPv4 validi nella 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 sugli endpoint Private Service Connect per le API di Google, consulta Accedere alle API di Google tramite endpoint.
- Se devi inviare traffico a qualsiasi altra destinazione con indirizzo IP esterno utilizzato privatamente instradabile all'interno della rete VPC del connettore. Esempi di altre destinazioni che coprono indirizzi IP esterni utilizzati privatamente potrebbero 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 tua rete VPC e alle regole firewall che si applicano alla tua rete VPC. Puoi utilizzare la configurazione di route e firewall per controllare il traffico in uscita da internet per tutte le richieste in uscita inviate dalla tua funzione tramite un connettore di accesso VPC serverless.
Puoi specificare le impostazioni di uscita quando esegui il deployment o l'aggiornamento della funzione utilizzando la console Google Cloud o Google Cloud CLI.
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 fai clic 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 uscita appropriata in base a come vuoi instradare 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 tua funzione.CONNECTOR_NAME
è il nome del connettore di accesso VPC serverless da utilizzare. Per ulteriori informazioni, consulta la documentazione digcloud
.EGRESS_SETTINGS
è uno dei valori supportati per le impostazioni di uscita: consulta la documentazionegcloud
.FLAGS...
si riferisce ad altri flag che passi al comandodeploy
.
Esempi di casi d'uso
I seguenti esempi 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 tue funzioni HTTP consentendo la chiamata solo da risorse nello stesso progetto o perimetro di servizio dei Controlli di servizio VPC. Google Cloud
Esegui il deployment della funzione e consenti solo il traffico interno. Utilizza la consoleGoogle Cloud o Google Cloud CLI:
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 pagina dei dettagli e fai clic su Modifica.
Espandi le impostazioni avanzate facendo clic su Runtime, build ....
Nella sezione Connessioni, in Impostazioni in entrata, seleziona Consenti solo il traffico interno.
gcloud
Utilizza 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 tuo progettoGoogle Cloud non potranno raggiungere la funzione. Se utilizzi Controlli di servizio VPC, le richieste provenienti dall'esterno del perimetro di servizio vengono bloccate. Le istanze VM all'interno del perimetro del progetto o del servizio possono comunque raggiungere la funzione inviando richieste al relativo endpoint HTTPS.
Se vuoi chiamare questa funzione con limitazioni da un'altra funzione, la funzione chiamante deve instradare il traffico in uscita tramite la tua rete VPC.
Utilizzo delle impostazioni di uscita e ingresso per limitare l'accesso
Puoi incorporare sia l'ingresso che l'uscita nei tuoi servizi per aggiungere un ulteriore livello di restrizione.
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 che 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, che deve corrispondere a quella del servizio serverless. Se il tuo servizio si trova nella regioneus-central
oeurope-west
, utilizzaus-central1
oeurope-west1
.Crea l'immagine container:
gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .
dove
PROJECT_ID
è l'ID progetto.In questo modo viene creata un'immagine container che richiama
get_hello_world
quando viene eseguito il deployment dal filemain.py
:Utilizza il comando
gcloud run deploy run-function
per eseguire il deployment del container 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, che deve corrispondere a quella del servizio serverless. Se il tuo servizio si trova nella regioneus-central
oeurope-west
, utilizzaus-central1
oeurope-west1
.
Il servizio Cloud Run
run-function
è ora configurato per inviare una richiestaGET
dal connettore VPC alla funzione con restrizioni di rete.
Uscita della funzione di routing tramite la rete VPC
Le reti VPC in Google Cloud supportano un ricco insieme di configurazioni e funzionalità di networking. Se instradi il traffico in uscita dalla tua funzione nella tua rete VPC, puoi assicurarti che il traffico in uscita delle funzioni Cloud Run segua le regole di firewall, DNS, routing e altre regole della tua rete VPC e puoi utilizzare prodotti come Cloud NAT.
Configura una rete VPC. Configura una rete VPC esistente o creane una nuova seguendo la guida in 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 indirizza tutto il traffico in uscita tramite 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 una funzione esistente per andare alla pagina dei dettagli e fai clic su Modifica.
Espandi le impostazioni avanzate facendo clic su Runtime, build ....
Nella sezione Connessioni, in Impostazioni di uscita, seleziona il connettore di accesso VPC serverless e seleziona Instrada tutto il traffico attraverso il connettore VPC.
gcloud
Utilizza 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 attraverso la rete VPC e rispetta le regole impostate nella rete VPC. Tieni presente che la tua funzione non può accedere alla rete internet pubblica a meno che tu non configuri Cloud NAT. Tieni inoltre presente che devi configurare Cloud NAT in modo che mappi tutti gli intervalli IP primari e secondari per tutte le subnet al gateway NAT, in modo da includere la subnet del connettore nella mappatura.
Associazione dell'uscita della funzione a un indirizzo IP statico
In alcuni casi, potresti voler associare il traffico generato dalla tua funzione a un indirizzo IP statico. Ad esempio, questo è utile se chiami un servizio esterno che consente solo richieste da indirizzi IP specificati in modo esplicito.
Instrada il traffico in uscita della funzione attraverso la rete VPC. Consulta la sezione precedente, Funzione di routing in uscita tramite la rete VPC.
Configura Cloud NAT e specifica un indirizzo IP statico. Segui le guide riportate in Specificare gli intervalli di subnet per NAT e Specificare gli 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 per tutte le subnet al gateway NAT per includere la subnet del connettore nella mappatura.
Bilanciamento del carico multiregionale
Puoi eseguire il deployment di una funzione in regioni diverse e consentire l'invio della richiesta alla regione integra più vicina. Per farlo, devi configurare un gruppo di endpoint di rete (NEG) serverless per la funzione e connetterlo a un bilanciatore del carico, come descritto in Configurazione di un bilanciatore del carico HTTP(S) con NEG serverless.