Noções básicas sobre o firewall do App Engine

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.

Recurso de firewall

No ambiente padrão do App Engine, o firewall pode permitir que determinado tráfego interno ignore o firewall. Isso significa que, se você definir a regra default como deny, as solicitações de determinados serviços destinados ao ambiente padrão do App Engine não serão bloqueadas. Esses são todos os tipos de tráfego solicitados na própria configuração do aplicativo ou enviados do mesmo aplicativo. As solicitações que ignoram as regras de firewall dessa forma incluem:

Para os aplicativos que usam o ambiente padrão do App Engine e serviços agrupados com os ambientes de execução de primeira geração, as notificações da API Mail legada também ignoram o firewall.

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 de 0.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) ).

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 informações sobre como alterar o prazo de validade padrão para o conteúdo estático ou impedir que ele seja armazenado em cache, consulte Expiração do cache.

Para evitar que a saída de conteúdo dinâmico do código do aplicativo seja armazenada em cache, use os cabeçalhos de resposta HTTP Cache-Control e Expires. Para saber mais informações sobre esses cabeçalhos HTTP, incluindo como controlar o armazenamento em cache, consulte Como evitar o armazenamento em cache (em inglês).

A seguir

Siga as instruções em Como criar firewalls para saber como configurar regras de firewall do App Engine.