Compreender a firewall do App Engine

Uma firewall determina que tráfego de rede tem autorização para passar e que tráfego é rejeitado. As firewalls podem aplicar-se ao tráfego de entrada (ingress), ao tráfego de saída (egress) ou a ambos. Para o App Engine, a firewall do App Engine aplica-se apenas ao tráfego de entrada encaminhado para a sua app ou serviço.

Vista geral

A firewall do App Engine é verificada para todos os tipos de pedidos à sua app, incluindo:

  • Tráfego Web normal encaminhado para o endereço appspot.com da app ou para o domínio personalizado.
  • Pedidos que chegam do Cloud Load Balancing.
  • Tráfego de origens internas, como máquinas virtuais (VMs) do Compute Engine e Cloud Tasks.

Nos casos em que a sua app está configurada para usar outros serviços de rede ou produtos, pode ter de criar regras para controlar o tráfego de entrada na firewall do App Engine e nas definições de firewall ou de segurança de outros produtos. Este guia aborda o comportamento geral da firewall do App Engine e detalhes sobre esses exemplos de utilização especiais.

Regras de firewall do App Engine

Pode configurar regras de firewall do App Engine através da Google Cloud consola, da CLI do Google Cloud ou da API Admin especificando regras que permitem ou bloqueiam intervalos de IP especificados.

Por predefinição, qualquer pedido que não corresponda a uma regra tem acesso permitido à sua app. Se precisar de bloquear todos os pedidos que não correspondam a uma regra específica (excluindo pedidos de serviços internos permitidos por predefinição), altere a ação da regra default para deny.

Em determinadas circunstâncias, é possível que o ambiente flexível do App Engine configure automaticamente regras de firewall ao nível da nuvem virtual privada (VPC), mas tenha em atenção que a firewall da VPC não interage com a firewall do App Engine.

Permitir pedidos recebidos dos seus serviços

A tabela seguinte indica os intervalos de IP e o comportamento da firewall do App Engine para serviços comuns. O intervalo de IPs que usa depende de as solicitações recebidas serem entregues a uma versão que é executada no ambiente padrão ou no ambiente flexível do App Engine.

Serviço Intervalo de IPs para pedidos enviados para o ambiente padrão do App Engine Intervalo de IPs para pedidos enviados para o 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 predefinida se estiver definida como recusar 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 ligações de saída 0.0.0.0/32 0.0.0.0/32
Trabalhos do Cloud Scheduler que usam HTTP do App Engine e tarefas do App Engine no Cloud Tasks (incluindo filas de tarefas do App Engine) 0.1.0.2/32, ignora a regra de firewall predefinida se estiver definida como negar 0.1.0.2/32
Cloud Storage ou Blobstore 0.1.0.30/32 Não aplicável
Obtenção de URL 0.1.0.40/32 0.1.0.40/32
Pedidos de preparação 0.1.0.3/32, ignora a regra de firewall predefinida se estiver definida como recusar Não aplicável

Consoante o seu exemplo de utilização, estas instruções adicionais podem aplicar-se quando configurar regras de firewall do App Engine:

  • Os pedidos de tarefas cron do App Engine recém-criadas ou atualizadas enviados para o ambiente padrão ou flexível do App Engine são provenientes de 0.1.0.2. Para tarefas cron criadas com versões mais antigas do gcloud (anteriores à 326.0.0), os pedidos cron são provenientes de 0.1.0.1. Para saber como identificar pedidos do serviço App Engine Cron, consulte o artigo Validar pedidos cron.
  • Se a sua app interagir com o Cloud Load Balancing ou estiver ligada a uma rede VPC, consulte a secção Interação com outros produtos ou serviços abaixo.

Exemplo do App Engine Standard

A sua app 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 o backend_service. Uma vez que a regra de firewall permite pedidos do Cloud Tasks, mesmo que esteja configurada para deny, não precisa de criar uma regra de firewall para o Cloud Tasks.default

No entanto, se quiser restringir o acesso à sua app e bloquear explicitamente os pedidos do Cloud Tasks, cria uma denyregra de firewall para o intervalo de IPs 0.1.0.2/32.

Exemplo do App Engine Flexible

A sua app em execução no ambiente flexível tem dois serviços: frontend_service e backend_service, e tem uma firewall configurada para recusar o tráfego por predefinição. frontend_service usa o Cloud Tasks com o HTTP do App Engine para enviar mensagens para o backend_service. Uma vez que a regra de firewall default recusa pedidos do Cloud Tasks, tem de criar uma regra de firewall allow para 0.1.0.2/32.

Interação com outros produtos ou serviços

Cloud Load Balancing

Se usar o Cloud Load Balancing e NEGs sem servidor, tenha em atenção o seguinte:

  • O balanceador de carga não interfere nem interage com as regras da firewall do App Engine. As regras da firewall do App Engine não são avaliadas até que um NEG sem servidor direcione o tráfego para o App Engine.
  • Recomendamos que use controlos de entrada para que a sua app apenas receba pedidos enviados a partir do equilibrador de carga (e da VPC, se a usar). Caso contrário, os utilizadores podem usar o URL do App Engine da sua app para contornar o balanceador de carga, as políticas de segurança do Cloud Armor, os certificados SSL e as chaves privadas que são transmitidas através do balanceador de carga.

  • Se os seus controlos de entrada estiverem definidos para receber tráfego internal-and-cloud-load-balancing, deixe a regra de firewall do App Engine predefinida tal como está (allow) e use as regras da firewall de aplicações Web (WAF) do Google Cloud Armor.

Firewall de VPC

As firewalls do App Engine são configuradas e aplicadas independentemente das firewalls baseadas na VPC. As regras de firewall da VPC aplicam-se a recursos em execução na rede da VPC, como máquinas virtuais do Compute Engine, enquanto as regras de firewall do App Engine se aplicam a pedidos recebidos para a sua app ou serviço.

Se existirem regras de firewall baseadas na VPC (como regras de firewall da VPC ou políticas de firewall hierárquicas) configuradas no seu ambiente de rede, as firewalls ao nível da VPC e as firewalls do App Engine têm de permitir o intervalo de IP de um pedido recebido para que a sua app do App Engine o receba.

Para firewalls ao 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 da firewall da VPC. Os pedidos permitidos pela firewall ao nível da VPC e pela firewall do App Engine são recebidos pela sua app ou serviço do App Engine. Se a firewall da VPC negar pedidos do mesmo intervalo de IPs permitido pela firewall do App Engine, o acesso à sua app do App Engine não é permitido.

VPC partilhada

O ambiente flexível do App Engine pode criar firewalls, dependendo se a sua app está configurada para usar uma rede VPC através da VPC partilhada.

Se a sua app flexível do App Engine usar a VPC partilhada, o ambiente flexível do App Engine não cria automaticamente regras de firewall. Se precisar de controlar o acesso e permitir tráfego na rede VPC, pode criar regras de firewall na rede VPC partilhada.

Além disso, para permitir pedidos de uma origem de tráfego, tem de permitir o mesmo intervalo de IPs na firewall da VPC e na firewall do App Engine. Se não especificar o intervalo de IP em ambos os locais (firewall da VPC e firewall do App Engine), esse intervalo de IP não tem autorização para aceder à sua app ou serviço do App Engine.

Se a sua app do ambiente flexível do App Engine não estiver configurada para usar a VPC partilhada, o ambiente flexível do App Engine cria até duas regras de firewall da VPC ocultas, dependendo se a sua app usa verificações de estado divididas (predefinição) ou verificações de estado antigas. Estas regras de firewall ocultas permitem o tráfego de publicação e o tráfego de verificação de funcionamento para o ambiente flexível:

  • Nome da rede: a rede especificada em app.yaml ou a rede predefinida se não estiver configurada nenhuma rede.
  • Tag de destino: o instance_tags especificado no ficheiro app.yaml. Por predefinição, se não forem fornecidas etiquetas de destino, o ambiente flexível do App Engine gera uma etiqueta única que segue o formato aef-INSTANCE_ID. Esta etiqueta afeta apenas as instâncias nessa versão flexível específica, e a regra de firewall segmenta esta etiqueta.
  • Sentido do tráfego: entrada
  • Ação na correspondência: permitir
  • Intervalos de IPs de origem: 35.191.0.0/16 e 130.211.0.0/22
  • Protocolos e portas:
    • tcp: 8443 (para verificações de estado antigas) ou 10402 (para verificações de estado divididas)
  • Prioridade: 1000

Impedir o acesso a conteúdo em cache

A firewall do App Engine está atrás de mecanismos que colocam conteúdo em cache, por exemplo, proxies Web e navegadores. Quando o conteúdo é colocado em cache, esse conteúdo é publicado publicamente a partir do URL específico até expirar e pode ser acedido mesmo depois de criar novas regras de firewall.

Para impedir que o seu conteúdo seja colocado em cache, use os cabeçalhos de resposta HTTP Cache-Control e Expires. Para mais informações acerca destes cabeçalhos HTTP, incluindo como controlar o armazenamento em cache, consulte o artigo Evitar o armazenamento em cache.

O que se segue?

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