Um firewall determina qual tráfego de rede tem permissão para passar e qual é rejeitado. Os firewalls podem ser aplicados ao tráfego de entrada (entrada), o tráfego de saída (saída) ou ambos. No App Engine, o firewall do App Engine aplica-se apenas ao tráfego de entrada roteado para seu aplicativo ou serviço.
Visão geral
O firewall do App Engine é verificado para todos os tipos de solicitações do seu aplicativo, incluindo:
- Tráfego da Web normal direcionado para o endereço
appspot.com
ou domínio personalizado do app. - Solicitações que chegam do Cloud Load Balancing.
- Tráfego de fontes internas, como máquinas virtuais (VMs) do Compute Engine e Cloud Tasks.
Nos casos em que seu aplicativo estiver configurado para usar outros serviços ou produtos de rede, talvez seja necessário criar regras para controlar o tráfego de entrada no firewall do App Engine e nas configurações de firewall ou segurança de outros produtos. Neste guia, você verá o comportamento geral do firewall do App Engine e detalhes sobre esses casos de uso especiais.
Regras de firewall do App Engine
É possível configurar regras de firewall do App Engine usando o console do Google Cloud, a Google Cloud CLI ou a API Admin especificando regras que permitem ou bloqueiam intervalos de IP especificados.
Por padrão, qualquer solicitação, que não corresponda a uma regra, permite o acesso ao seu aplicativo. Se você precisar bloquear todas as solicitações que não corresponderem a uma regra específica (excluindo solicitações de serviços internos permitidos por padrão), altere a ação da regra default
para deny
.
Em algumas circunstâncias, é possível que o ambiente flexível do App Engine configure automaticamente as regras de firewall no nível da nuvem privada virtual (VPC, na sigla em inglês). No entanto, observe que o firewall da VPC não interage com o firewall do App Engine.
Como permitir solicitações recebidas dos serviços
A tabela a seguir lista os intervalos de IP e o comportamento do firewall do App Engine para serviços comuns. O intervalo de IPs que você usa depende de as solicitações recebidas serem entregues a uma versão executada no ambiente padrão ou flexível do App Engine.
Serviço | Intervalo de IP para solicitações enviadas ao ambiente padrão do App Engine | Intervalo de IP para solicitações enviadas ao ambiente flexível do App Engine |
---|---|---|
Cron do App Engine | 0.1.0.1/32 ou 0.1.0.2/32, ignora a regra de firewall padrão se definido para negar | 0.1.0.1/32 ou 0.1.0.2/32 |
Instâncias do Compute Engine com endereços IP externos | Endereço IP externo da instância | Endereço IP externo da instância |
Instâncias do Compute Engine sem um endereço IP externo | 0.0.0.0/32 | 0.0.0.0/32 |
Instâncias do Compute Engine sem um endereço IP externo que usam o Cloud NAT para conexões de saída | 0.0.0.0/32 | 0.0.0.0/32 |
Jobs do Cloud Scheduler usando tarefas HTTP do App Engine e do App Engine no Cloud Tasks (incluindo filas de tarefas do App Engine) | 0.1.0.2/32, ignora a regra de firewall padrão, se configurada para negar | 0.1.0.2/32 |
Cloud Storage ou Blobstore | 0.1.0.30/32 | Não relevante |
Busca de URL | 0.1.0.40/32 | 0.1.0.40/32 |
Solicitações de aquecimento | 0.1.0.3/32, ignora a regra de firewall padrão, se configurada para negar | Não relevante |
Dependendo do caso de uso, estas instruções adicionais podem ser aplicadas ao configurar regras de firewall do App Engine:
- As solicitações de cron jobs recém-criados ou atualizados do App Engine enviados para o ambiente padrão ou flexível do App Engine vêm de
0.1.0.2
. Para jobs do Cron criados com versões anteriores do gcloud (anteriores a 326.0.0), as solicitações do Cron virão de0.1.0.1
. Para saber mais sobre como identificar solicitações do serviço Cron do App Engine, consulte Como validar solicitações cron. - Se o app interagir com o Cloud Load Balancing ou estiver conectado a uma rede VPC, consulte a seção Interação com outros produtos ou serviços abaixo.
Exemplo padrão do App Engine
O aplicativo em execução no ambiente padrão tem dois serviços: frontend_service
e backend_service
. frontend_service
usa o Cloud Tasks com o HTTP do App Engine para enviar mensagens para backend_service
. Como a regra de firewall default
permite solicitações do Cloud Tasks mesmo se configurado para deny
, não é necessário criar uma regra de firewall para o Cloud Tasks.
No entanto, se você quiser restringir o acesso ao seu aplicativo e bloquear explicitamente as solicitações do Cloud Tasks, crie uma regra de firewall deny
para o intervalo de IP 0.1.0.2/32
.
Exemplo flexível do App Engine
Seu aplicativo em execução no ambiente flexível tem dois serviços: frontend_service
e backend_service
, além de ter um firewall configurado para negar tráfego por padrão. frontend_service
usa o Cloud Tasks com o HTTP do App Engine para enviar mensagens para backend_service
. Como a regra de firewall default
nega solicitações do Cloud Tasks, é necessário criar uma
regra de firewall allow
para 0.1.0.2/32
.
Interação com outros produtos ou serviços
Cloud Load Balancing
Se você usar o Cloud Load Balancing e os grupos de endpoints de rede (NEG, na sigla em inglês) sem servidor, observe os seguintes detalhes:
- O balanceador de carga não interfere nem interage com as regras de firewall do App Engine. As regras do App Engine não são avaliadas até que um NEG sem servidor direcione o tráfego para o App Engine.
Recomendamos usar controles de entrada para que o aplicativo receba apenas solicitações enviadas do balanceador de carga (e da VPC, se você usá-la). Caso contrário, os usuários poderão usar o URL do App Engine do aplicativo para ignorar o balanceador de carga, as políticas de segurança do Google Cloud Armor, os certificados SSL e as chaves privadas transmitidas pelo balanceador de carga.
Se os controles de entrada estiverem configurados para receber tráfego
internal-and-cloud-load-balancing
, deixe a regra de firewall padrão do App Engine como está (allow
) e use o firewall do aplicativo da Web do Google Cloud Armor (WAF) ).
Firewall da VPC
Os firewalls do Google App Engine são configurados e aplicados independentemente dos firewalls baseados em VPC. As regras de firewall VPC se aplicam aos recursos em execução na rede VPC, como máquinas virtuais do Compute Engine, enquanto as regras de firewall do App Engine se aplicam às solicitações recebidas para seu aplicativo ou serviço.
Se houver regras de firewall baseadas em VPC (como regras de firewall VPC ou políticas de firewall hierárquicos) configuradas no seu ambiente de rede, ambos o nível da VPC. Os firewalls e os firewalls do App Engine precisam permitir o recebimento do intervalo de IP de uma solicitação recebida para seu aplicativo do App Engine.
Para firewalls no nível da VPC, as políticas de firewall hierárquicas são avaliadas antes das regras de firewall da VPC e seguem uma sequência durante a avaliação do firewall. As solicitações que são permitidas tanto pelo firewall da VPC quanto pelo firewall do App Engine são recebidas pelo aplicativo ou serviço do App Engine. Se o firewall da VPC negar solicitações do mesmo intervalo de IP permitido pelo firewall do App Engine, o acesso ao aplicativo do App Engine não será permitido.
VPC compartilhada
O ambiente flexível do App Engine pode criar firewalls, dependendo da configuração do aplicativo para usar uma rede VPC por meio da VPC compartilhada.
Se o aplicativo flexível do App Engine usar a VPC compartilhada, o ambiente flexível do App Engine não criará regras de firewall automaticamente. Se você precisar controlar o acesso e permitir o tráfego na rede VPC, pode criar regras de firewall na rede VPC compartilhada.
Além disso, para permitir solicitações de uma origem de tráfego, é preciso permitir o mesmo intervalo de IP no firewall VPC e no firewall do App Engine. Sem especificar o intervalo de IP em ambos os locais (firewall da VPC e firewall do App Engine), esse intervalo de IP não terá permissão para acessar seu aplicativo ou serviço do App Engine.
Se seu aplicativo do ambiente flexível do App Engine não estiver configurado para usar a VPC compartilhada, o ambiente flexível do App Engine cria até duas regras de firewall da VPC ocultas, dependendo se o aplicativo usa divisãoverificações de integridade (padrão) ou verificações de integridade legadas. Essas regras de firewall ocultas permitem veicular tráfego e tráfego de verificação de integridade para o ambiente flexível:
- Nome da rede: a rede especificada em
app.yaml
ou a rede padrão se nenhuma rede estiver configurada. - Tag de destino: o
instance_tags
especificado no arquivoapp.yaml
. Por padrão, se nenhuma tag de destino for fornecida, o ambiente flexível do App Engine gerará uma tag exclusiva que segue o formato deaef-INSTANCE_ID
. Essa tag afeta apenas as instâncias nessa versão flexível específica, e a regra de firewall segmentará essa tag. - Direção do tráfego: entrada
- Ação na correspondência: permitir
- Intervalos de IP de origem:
35.191.0.0/16
e130.211.0.0/22
- Protocolos e portas:
- tcp:
8443
(para verificações de integridade legadas) ou10402
(para verificações de integridade divididas)
- tcp:
- Prioridade:
1000
Impedir acesso ao conteúdo armazenado em cache
O firewall do Google App Engine fica por trás de mecanismos que armazenam conteúdo em cache. Por exemplo, proxies da Web e navegadores. Quando o conteúdo é armazenado em cache, ele é disponibilizado publicamente a partir do URL específico até a expiração e pode ser acessado mesmo após a criação de novas regras de firewall.
Para evitar que o conteúdo seja armazenado em cache, use os cabeçalhos de resposta HTTP Cache-Control
e Expires
. Para mais informações sobre esses cabeçalhos HTTP, incluindo
como controlar o armazenamento em cache, consulte
Como evitar o armazenamento em cache.
A seguir
Siga as instruções em Como criar firewalls para saber como configurar regras de firewall do App Engine.