O firewall fornece controle de acesso independente de identidade ao aplicativo App Engine. O firewall do App Engine permite definir até 1.000 regras individuais que autorizam ou restringem um intervalo de sub-redes e endereços IP.
Para configurar um firewall, é preciso definir regras que especifiquem um valor de prioridade, uma descrição opcional e o intervalo de endereços IP a serem permitidos ou negados.
Para verificar se você configurou o aplicativo com segurança e definiu os níveis de acesso adequados, consulte Segurança para aplicativos e Controle de acesso.
Como estruturar as regras de firewall
Um firewall do App Engine consiste em uma lista ordenada de regras que permitem ou negam acesso do endereço ou intervalo IP especificado ao aplicativo. A regra é aplicada a todos os recursos do aplicativo do App Engine.
As regras do firewall são ordenadas pela importância definida por você como valor numérico na prioridade de cada uma das regras. É preciso especificar um valor de prioridade exclusivo para cada regra, já que ela define a importância relativa às outras regras no firewall. Os valores da escala de prioridade de uma regra variam de 1
, a mais importante, a 2147483647
, a menos importante.
Cada firewall inclui uma regra default
, que é criada automaticamente com a prioridade 2147483647
e se aplica a todo o intervalo de IP do seu aplicativo.
A regra default
sempre é avaliada após todas as outras regras no firewall e aplicada à totalidade de solicitações de todos os endereços IP.
O firewall avalia primeiro a regra de prioridade mais alta.
As demais regras são avaliadas sequencialmente, até que uma corresponda ao intervalo de IP da solicitação. Quando uma regra correspondente é encontrada, a conexão é permitida ou negada e todas as regras restantes no firewall são ignoradas. Quando nenhuma das regras definidas manualmente no firewall corresponde à solicitação, a regra default
é avaliada.
Por exemplo, ao criar uma regra com prioridade 1
, ela é sempre avaliada em primeiro lugar. Se uma solicitação recebida corresponder à regra com prioridade 1
, somente essa regra será avaliada e todas as demais serão ignoradas, incluindo a regra default
.
O exemplo de firewall abaixo demonstra como a prioridade de uma regra altera o comportamento de firewall.
Antes de começar
Antes de criar um firewall para um aplicativo, é preciso ter um dos seguintes papéis do IAM do App Engine com os privilégios necessários para criar ou modificar regras de firewall:
- Administrador do App Engine
- Editor
- Proprietário
Para usar a ferramenta gcloud
ou a API Admin, primeiro instale e configure este conjunto de ferramentas:
Faça o download, instale e inicialize o SDK do Google Cloud para usar a ferramenta
gcloud
:Para ver mais informações sobre como configurar o projeto do GCP e as credenciais necessárias, consulte Acessar a API Admin.
Impedir acesso ao conteúdo armazenado em cache
O firewall do Google App Engine fica por trás de mecanismos que armazenam em cache o conteúdo. 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.
O tempo de expiração padrão para o conteúdo armazenado em cache é de 10 minutos. Para informações sobre como configurar o tempo de expiração, consulte Expiração estática do cache.
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, inclusive como controlar o armazenamento em cache, veja Como evitar o armazenamento em cache.
É possível configurar o aplicativo de ambiente padrão para conteúdo estático, a fim de configurar cabeçalhos de resposta HTTP. Para informações sobre a configuração de cabeçalhos de resposta HTTP no arquivo de configuração do aplicativo, consulte Como as solicitações são processadas e a Referência do app.yaml
.
Como permitir solicitações dos serviços
Ao criar regras, pense nos seguintes pontos:
- Por padrão, todas as solicitações que não correspondam a uma regra podem acessar o app. Se você quiser bloquear todas as solicitações que não correspondam a uma regra específica, defina a regra
default
comodeny
. - As filas de tarefas e o tráfego do Cron serão permitidos pelo firewall, mesmo quando a regra
default
estiver configurada comodeny
. Para controlar o acesso de solicitações de outros aplicativos ou serviços do App Engine, pode ser preciso criar regras para acomodar os endereços IP que são usados para a comunicação de serviço a serviço. Se o aplicativo se comunica com outros aplicativos ou serviços no App Engine, é preciso pensar em formas de processar as solicitações provenientes dos seguintes endereços IP:
- Solicitações do serviço de busca de URL:
0.1.0.40
- Solicitações recebidas no ambiente padrão:
0.1.0.40
- Solicitações recebidas no ambiente flexível:
0.1.0.40
e10.0.0.1
- Solicitações recebidas no ambiente padrão:
- Solicitações do Blobstore ou do Cloud Storage:
0.1.0.30
- Solicitações recebidas apenas no ambiente padrão:
- Solicitações de implantação de aplicativos:
10.1.0.41
- Solicitações de implantação de aplicativos:
Exemplo
O aplicativo tem um serviço de back-end em execução no ambiente padrão,
backend_std
. Esse serviço usa a busca de URL para se comunicar com obackend_flex
.Para criar solicitações, é preciso criar duas regras de firewall:
0.1.0.40
: é uma regra para permitir quebackend_flex
receba solicitações de busca de URL debackend_std
.10.0.0.1
: é uma regra para permitir a comunicação de serviço a serviço para as solicitações de busca de URL embackend_flex
.
- Solicitações do serviço de busca de URL:
Criar regras de firewall
Use um dos métodos a seguir para criar uma regra de firewall. Repita essas etapas para cada regra extra:
Use a página "Regras de firewall" no Console do GCP para criar uma regra de firewall:
-
Acesse a página "Criar uma regra de firewall" no Console do GCP:
-
Especifique os detalhes da regra de firewall:
-
Em Prioridade, digite um número inteiro para especificar a importância relativa da regra e definir a ordem de avaliação dela.
Os valores válidos são de
1
a2147483646
. A prioridade1
é a primeira a ser avaliada. A prioridade2147483647
determina que a regra será avaliada por último. Essa prioridade está reservada para a regra "default". -
Em Ação se houver correspondência, especifique se o firewall deve permitir ou negar o acesso às solicitações que corresponderem à regra. As regras definidas como
allow
encaminham a solicitação para o aplicativo. Já as regras definidas comodeny
respondem às solicitações com um erro403 Forbidden
. - Em Intervalo de IP, defina o intervalo de endereços IP que se aplica à regra. O intervalo de endereços IP precisa ser definido na notação CIDR, pode incluir máscaras de sub-rede e aceita IPv4 e IPv6.
- Opcional: em Descrição, inclua uma descrição da regra de até 100 caracteres.
-
Em Prioridade, digite um número inteiro para especificar a importância relativa da regra e definir a ordem de avaliação dela.
- Clique em Salvar para criar a regra.
-
Teste a regra para garantir que a prioridade e a ação estão resultando no comportamento esperado:
- Clique em Testar endereço IP.
- Insira o endereço IP que você quer validar e clique em Testar para garantir que a regra correspondente seja avaliada corretamente.
Execute os seguintes comandos gcloud
app firewall-rules
(link em inglês) para criar uma regra de firewall:
-
Execute o comando a seguir para criar uma regra de firewall:
gcloud app firewall-rules create PRIORITY --action ALLOW_OR_DENY --source-range IP_RANGE --description DESCRIPTION
em que:-
PRIORITY é um número inteiro entre
1
e2147483646
que define a importância da regra e a ordem em que ela é avaliada. A prioridade1
determina que a regra será avaliada primeiro. A prioridade2147483647
determina que a regra será avaliada por último. Essa prioridade está reservada para a regra "default". -
ALLOW_OR_DENY especifica se o firewall deve permitir ou negar o acesso às solicitações que corresponderem à regra. Os valores válidos são
allow
oudeny
. As regras definidas comoallow
encaminham a solicitação para o aplicativo. Já as regras definidas comodeny
respondem às solicitações com um erro403 Forbidden
. - IP_RANGE define o intervalo de endereços IP que se aplica à regra. O intervalo de endereços IP precisa ser definido na notação CIDR, pode incluir máscaras de sub-rede e aceita IPv4 e IPv6.
- DESCRIPTION é uma descrição opcional da regra e pode ter até 100 caracteres.
-
PRIORITY é um número inteiro entre
-
Execute o comando a seguir para testar a regra e garantir que a prioridade e a ação estão resultando no comportamento esperado:
gcloud app firewall-rules test-ip IP_ADDRESS
em que IP_ADDRESS é o endereço IP que você quer testar no seu firewall. -
Execute o comando a seguir para ver a lista de regras atuais:
gcloud app firewall-rules list
-
Execute o comando a seguir para excluir uma regra:
gcloud app firewall-rules delete PRIORITY
em que PRIORITY é o valor de prioridade da regra que você quer excluir.
- Exemplos:
-
Siga os exemplos abaixo para criar seu firewall:
-
Adicione uma regra que permita as solicitações de um endereço IPv6 e de uma máscara de sub-rede. Em seguida, teste essa regra para verificar se ela está sendo avaliada antes das demais:
gcloud app firewall-rules create 123 --source-range fe80::3636:3bff:fecc:8778/128 --action allow gcloud app firewall-rules test-ip fe80::3636:3bff:fecc:8778
-
Adicione uma regra para negar as solicitações de um endereço IPv4 e de uma máscara de sub-rede. Em seguida, teste essa regra para verificar se ela está sendo avaliada adequadamente:
gcloud app firewall-rules create 123456 --source-range "74.125.0.0/16" --action deny gcloud app firewall-rules test-ip 74.125.0.8
-
Atualize e depois teste a regra padrão para garantir que ela está restringindo todos os endereços IP que não correspondem às demais regras:
gcloud app firewall-rules update default --action deny gcloud app firewall-rules test-ip 123.456.7.89
-
Para criar regras de firewall de maneira programática para o aplicativo do App Engine, use os métodos apps.firewall.ingressRules
na API Admin (link em inglês).
Para testar uma regra de firewall e garantir que a prioridade e a ação tenham o comportamento esperado, use o método apps.firewall.ingressRules.list
(link em inglês) e especifique o endereço IP que você quer testar no parâmetro matchingAddress
.
Exemplo de firewall
Neste exemplo, uma empresa configurou um firewall para que tanto a equipe de engenharia quanto a rede corporativa interna tivessem acesso a um aplicativo em desenvolvimento. As regras de firewall foram criadas com grandes intervalos entre cada prioridade para permitir o crescimento.
Prioridade | Ação | Intervalo de IP | Descrição |
---|---|---|---|
1000 | Negar | 192.0.2.1 | Nega o acesso a um ataque de DoS. |
2000 | Permitir | 198.51.100.2 | Permite o acesso a um engenheiro no escritório satélite. |
3000 | Negar | 198.51.100.0/24 | Nega o acesso a todas as divisões que não sejam de engenharia. |
5000 | Permitir | 203.0.113.0/24 | Permite acesso à rede do edifício principal. |
2147483647 | Negar | * | Ação padrão. |
Após a criação do firewall, suponha que as solicitações a seguir tenham sido direcionadas para o aplicativo de amostra e anote a resposta do aplicativo:
- A solicitação de 198.51.100.2 corresponde à regra com prioridade 2000 e é permitida.
- A solicitação de 198.51.100.100 corresponde à regra com prioridade 3000 e é negada.
- A solicitação de 203.0.113.54 corresponde à regra com prioridade 5000 e é permitida.
- A solicitação de 45.123.35.242 corresponde à regra padrão e é negada.
Como resolver regras conflitantes
Por exemplo, suponha que duas das prioridades no firewall da empresa sejam trocadas. Se as regras para as prioridades 2000 e 3000 forem trocadas, observe que acontecerá um comportamento não desejado.
Prioridade | Ação | Intervalo de IP | Descrição |
---|---|---|---|
1000 | Negar | 192.0.2.1 | Nega o acesso a um ataque de DoS. |
2000 | Negar | 198.51.100.0/24 | Nega o acesso a todas as divisões que não sejam de engenharia. |
3000 | Permitir | 198.51.100.2 | Permite o acesso a um engenheiro no escritório satélite. |
5000 | Permitir | 203.0.113.0/24 | Permite acesso à rede do edifício principal. |
2147483647 | Negar | * | Ação padrão. |
O engenheiro no escritório satélite não conseguirá acessar o aplicativo da empresa, já que a nova prioridade da regra indica que ela nunca será avaliada. O endereço IP 198.51.100.2
do engenheiro corresponde à regra que nega o acesso de todos os funcionários que não são engenheiros no intervalo 198.51.100.0/24
antes da regra que permite acesso ao endereço IP desse engenheiro.
Para corrigir isso, é preciso definir a prioridade da regra que permite o acesso a 198.51.100.2
como um valor maior do que a regra que nega o acesso ao intervalo de IP 198.51.100.0/24
.