Como controlar o acesso com firewalls

Um firewall fornece controle de acesso independente de identidade ao aplicativo do 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 configurar o aplicativo e definir os níveis de acesso adequados com segurança, consulte Segurança de 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 toda a gama 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:

Como 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 é exibido 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, inclusive como controlar o armazenamento em cache, consulte Como evitar o armazenamento em cache.

Como permitir solicitações dos serviços

Ao criar regras, pense nos seguintes pontos:

  • Por padrão, todas as solicitações que não correspondem a uma regra podem acessar o app. Se você quiser bloquear todas as solicitações que não correspondem a uma regra específica, defina a regra default como deny.
  • As filas de tarefas e o tráfego do Cron serão permitidos pelo firewall, mesmo quando a regra default estiver configurada como deny.
  • 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 e 10.0.0.1
    • 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

    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 o backend_flex.

    É preciso criar duas regras de firewall para permitir solicitações:

    • 0.1.0.40: é uma regra para permitir que backend_flex receba solicitações de busca de URL de backend_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 em backend_flex.

Como criar regras de firewall

Use um dos métodos a seguir para criar uma regra de firewall. Repita essas etapas para cada regra extra:

Console

Use a página "Regras de firewall" no Console do GCP para criar uma regra de firewall:

  1. Acesse a página "Criar uma regra de firewall" no Console do GCP:

    Acessar a página "Criar regra de firewall"

  2. Especifique os detalhes da regra de firewall:

    1. 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 a 2147483646. A prioridade 1 determina que a regra será avaliada primeiro. A prioridade 2147483647 determina que a regra será avaliada por último. Essa prioridade está reservada para a regra default.

    2. 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 app. Já as regras definidas como deny respondem às solicitações com um erro 403 Forbidden.
    3. 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.
    4. Opcional: em Descrição, inclua uma descrição da regra de até 100 caracteres.
  3. Clique em Salvar para criar a regra.
  4. Teste a regra para garantir que a prioridade e a ação estão resultando no comportamento esperado:
    1. Clique em Testar endereço IP.
    2. Insira o endereço IP que você quer validar e clique em Testar para garantir que a regra correspondente seja avaliada corretamente.
gcloud

Execute os seguintes comandos gcloud app firewall-rules para criar uma regra de firewall:

  1. 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 e 2147483646 que define a importância da regra e a ordem em que ela é avaliada. A prioridade 1 determina que a regra será avaliada primeiro. A prioridade 2147483647 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 ou deny. As regras definidas como allow encaminham a solicitação para o app. Já as regras definidas como deny respondem às solicitações com um erro 403 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 de até 100 caracteres.
  2. 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.
  3. Execute o comando a seguir para ver a lista de regras existentes:
    gcloud app firewall-rules list
  4. Execute o comando a seguir para excluir uma regra existente:
    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
API

Para criar regras de firewall de maneira programática para seu aplicativo do App Engine, use os métodos apps.firewall.ingressRules na API Admin.

Para testar uma regra de firewall e garantir que a prioridade e a ação proporcionem o comportamento esperado, você pode usar o método apps.firewall.ingressRules.list e especificar o endereço IP que 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 do 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 todos os nã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 IPs 198.51.100.0/24.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente flexível do App Engine para Go