Un firewall determina quale traffico di rete è consentito passare e quale traffico viene rifiutato. I firewall possono essere applicati al traffico in entrata (in entrata), in uscita (in uscita) o a entrambi. Per App Engine, il firewall di App Engine si applica solo al traffico in entrata instradato alla tua app o al tuo servizio.
Panoramica
Il firewall di App Engine viene controllato per tutti i tipi di richieste alla tua app, tra cui:
- Traffico web normale instradato all'indirizzo
appspot.com
o al dominio personalizzato dell'app. - Richieste provenienti da Cloud Load Balancing.
- Traffico proveniente da origini interne come macchine virtuali (VM) Compute Engine e Cloud Tasks.
Nei casi in cui l'app è configurata per utilizzare altri servizi o prodotti di networking, potrebbe essere necessario creare regole per controllare il traffico in entrata sia nel firewall di App Engine che nel firewall o nelle impostazioni di sicurezza di altri prodotti. Questa guida illustra il comportamento generale del firewall di App Engine e i dettagli su questi casi d'uso speciali.
Regole firewall di App Engine
Puoi configurare le regole firewall di App Engine utilizzando la console Google Cloud, Google Cloud CLI o l'API Admin specificando le regole che consentono o bloccano intervalli IP specifici.
Per impostazione predefinita, tutte le richieste che non corrispondono a una regola possono accedere alla tua app. Se devi bloccare tutte le richieste che non corrispondono a una regola specifica (escluse le richieste da servizi interni consentite per impostazione predefinita), cambia l'azione della regola default
in deny
.
In determinate circostanze, l'ambiente flessibile di App Engine può configurare automaticamente le regole firewall a livello di Virtual Private Cloud (VPC), ma tieni presente che il firewall VPC non interagisce con il firewall di App Engine.
Consentire le richieste in arrivo dai tuoi servizi
La seguente tabella elenca gli intervalli IP e il comportamento del firewall di App Engine per i servizi comuni. L'intervallo IP da utilizzare dipende dal fatto che le richieste in entrata vengano consegnate a una versione eseguita nell'ambiente standard di App Engine o nell'ambiente flessibile.
Servizio | Intervallo IP per le richieste inviate all'ambiente standard di App Engine | Intervallo IP per le richieste inviate all'ambiente flessibile di App Engine |
---|---|---|
Cron di App Engine | 0.1.0.1/32 o 0.1.0.2/32 ignora la regola firewall predefinita se impostata su deny | 0.1.0.1/32 o 0.1.0.2/32 |
Istanze di Compute Engine che utilizzano Cloud NAT per le connessioni in uscita | Indirizzi IP Cloud NAT configurati | Indirizzi IP Cloud NAT configurati |
Istanze Compute Engine con indirizzi IP esterni | Indirizzo IP esterno dell'istanza | Indirizzo IP esterno dell'istanza |
Istanze Compute Engine senza indirizzo IP esterno | 0.0.0.0/32 | 0.0.0.0/32 |
Job di Cloud Scheduler che utilizzano attività HTTP di App Engine e attività di App Engine in Cloud Tasks (incluse le code di attività di App Engine) | 0.1.0.2/32, ignora la regola firewall predefinita se è impostata su deny | 0.1.0.2/32 |
Cloud Storage o Blobstore | 0.1.0.30/32 | Non applicabile |
Recupero URL | 0.1.0.40/32 | 0.1.0.40/32 |
Richieste di riscaldamento | 0.1.0.3/32, ignora la regola firewall predefinita se è impostata su deny | Non applicabile |
A seconda del tuo caso d'uso, queste istruzioni aggiuntive potrebbero applicarsi durante la configurazione delle regole firewall di App Engine:
- Le richieste di cron job di App Engine appena create o aggiornate inviate all'ambiente standard o flessibile di App Engine provengono da
0.1.0.2
. Per i cron job creati con versioni precedenti di gcloud (antecedenti alla 326.0.0), le richieste cron proverranno da0.1.0.1
. Per saperne di più su come identificare le richieste del servizio Cron di App Engine, vedi Convalida delle richieste cron. - Se la tua app interagisce con Cloud Load Balancing o è connessa a una rete VPC, consulta la sezione Interazione con altri prodotti o servizi di seguito.
Esempio di standard App Engine
L'app in esecuzione nell'ambiente standard include due servizi: frontend_service
e backend_service
. frontend_service
utilizza Cloud Tasks con HTTP di App Engine per inviare messaggi a backend_service
. Poiché la regola firewall default
consente le richieste Cloud Tasks anche se è configurata su deny
, non è necessario creare una regola firewall per Cloud Tasks.
Tuttavia, se vuoi limitare l'accesso alla tua app e bloccare esplicitamente le richieste Cloud Tasks, devi creare una regola firewall deny
per l'intervallo IP 0.1.0.2/32
.
Esempio di ambiente flessibile di App Engine
L'app in esecuzione nell'ambiente flessibile dispone di due servizi: frontend_service
e backend_service
e dispone di un firewall configurato per negare il traffico per impostazione predefinita. frontend_service
utilizza Cloud Tasks con HTTP di App Engine per inviare messaggi a backend_service
. Poiché la regola firewall default
nega le richieste Cloud Tasks, devi creare una regola firewall allow
per 0.1.0.2/32
.
Interazione con altri prodotti o servizi
Cloud Load Balancing
Se utilizzi Cloud Load Balancing e NEG serverless, tieni presente quanto segue:
- Il bilanciatore del carico non interferisce né interagisce con le regole firewall di App Engine. Le regole firewall di App Engine non vengono valutate finché un NEG serverless non indirizza il traffico ad App Engine.
Ti consigliamo di utilizzare i controlli in entrata in modo che la tua app riceva solo le richieste inviate dal bilanciatore del carico (e dal VPC, se lo utilizzi). In caso contrario, gli utenti possono utilizzare l'URL di App Engine della tua app per ignorare il bilanciatore del carico, i criteri di sicurezza di Google Cloud Armor, i certificati SSL e le chiavi private trasmesse attraverso il bilanciatore del carico.
Se i controlli in entrata sono impostati per ricevere traffico
internal-and-cloud-load-balancing
, lascia invariata la regola firewall predefinita di App Engine (allow
) e utilizza le regole WAF (web application firewall) di Google Cloud Armor.
Firewall VPC
I firewall di App Engine vengono configurati e applicati indipendentemente dai firewall basati su VPC. Le regole firewall VPC si applicano alle risorse in esecuzione nella rete VPC, come le macchine virtuali Compute Engine, mentre le regole firewall di App Engine si applicano alle richieste in entrata nella tua app o nel tuo servizio.
Se nel tuo ambiente di rete sono configurate regole firewall basate su VPC (ad esempio regole firewall VPC o criteri firewall gerarchici), sia i firewall a livello di VPC che i firewall di App Engine devono consentire l'intervallo IP di una richiesta in entrata affinché l'app App Engine possa riceverla.
Per i firewall a livello di VPC, i criteri firewall gerarchici vengono valutati prima delle regole firewall VPC e seguono una sequenza durante la valutazione del firewall VPC. Le richieste consentite sia dal firewall a livello di VPC sia dal firewall di App Engine vengono ricevute dall'app o dal servizio App Engine. Se il firewall VPC nega le richieste dallo stesso intervallo IP consentito dal firewall di App Engine, la tua applicazione App Engine non potrà accedere.
VPC condiviso
L'ambiente flessibile di App Engine può creare firewall a seconda che la tua app sia configurata o meno per utilizzare una rete VPC tramite VPC condiviso.
Se l'app flessibile di App Engine utilizza il VPC condiviso, l'ambiente flessibile di App Engine non crea automaticamente regole firewall. Se hai bisogno di controllare l'accesso e consentire il traffico sulla rete VPC, puoi creare regole firewall sulla rete VPC condivisa.
Inoltre, per consentire le richieste da una sorgente di traffico, devi consentire lo stesso intervallo IP nel firewall VPC e nel firewall di App Engine. Se non viene specificato l'intervallo IP in entrambe le posizioni (firewall VPC e firewall App Engine), l'intervallo IP non potrà accedere all'app o al servizio App Engine.
Se la tua app nell'ambiente flessibile di App Engine non è configurata per l'utilizzo del VPC condiviso, l'ambiente flessibile di App Engine crea fino a due regole firewall VPC nascoste, a seconda che l'app utilizzi controlli di integrità suddivisi (predefiniti) o controlli di integrità legacy. Queste regole firewall nascoste consentono di gestire il traffico e il traffico per il controllo di integrità nell'ambiente flessibile:
- Nome rete: la rete specificata in
app.yaml
o la rete predefinita se non è configurata alcuna rete. - Tag di destinazione: il
instance_tags
specificato nel fileapp.yaml
. Per impostazione predefinita, se non vengono forniti tag di destinazione, l'ambiente flessibile di App Engine genera un tag univoco che segue il formatoaef-INSTANCE_ID
. Questo tag interessa solo le istanze in quella specifica versione flessibile e la regola firewall sceglierà come target questo tag. - Direzione del traffico: In entrata
- Azione in caso di corrispondenza: Consenti
- Intervalli IP di origine:
35.191.0.0/16
e130.211.0.0/22
- Protocolli e porte:
- tcp:
8443
(per i controlli di integrità legacy) o10402
(per i controlli di integrità suddivisi)
- tcp:
- Priorità:
1000
Impedire l'accesso ai contenuti memorizzati nella cache
Il firewall di App Engine è dietro a meccanismi che memorizzano nella cache i contenuti, ad esempio proxy web e browser. Quando i contenuti vengono memorizzati nella cache, vengono pubblicati pubblicamente dall'URL specifico fino alla scadenza e sono accessibili anche dopo la creazione di nuove regole firewall.
Per evitare che i contenuti vengano memorizzati nella cache, utilizza le intestazioni della risposta HTTP Cache-Control
e Expires
. Per ulteriori informazioni su queste intestazioni HTTP, incluso come controllare la memorizzazione nella cache, consulta Evitare la memorizzazione nella cache.
Passaggi successivi
Segui le istruzioni in Creazione di firewall per scoprire come configurare le regole firewall di App Engine.