Como configurar políticas de segurança do Google Cloud Armor

Siga estas instruções para filtrar o tráfego recebido no balanceamento de carga HTTP(S) por meio da criação de políticas de segurança do Google Cloud Armor. Veja informações conceituais sobre as políticas de segurança do Google Cloud Armor em Conceitos da política de segurança do Google Cloud Armor.

Verifique se você já conhece os conceitos do balanceamento de carga HTTP(S) antes de configurar as políticas de segurança.

Veja informações sobre como configurar o Google Cloud Armor no GKE em Como configurar o Google Cloud Armor.

Permissões do IAM para políticas de segurança do Google Cloud Armor

As operações a seguir requerem o papel Administrador de segurança (role/compute.securityAdmin):

  • Como criar, modificar, atualizar e excluir uma política de segurança do Google Cloud Armor
  • Métodos de API permitidos
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Um usuário com o papel Administrador de rede (roles/compute.networkAdmin) pode executar as seguintes operações:

  • Definir uma política de segurança do Google Cloud Armor para um serviço de back-end
  • Métodos de API permitidos
    • BackendServices setSecurityPolicy

Usuários com os papéis Administrador de segurança e Administrador de rede podem visualizar as políticas de segurança do Google Cloud Armor usando os métodos de API SecurityPolicies get, list e getRule.

Permissões do IAM para papéis personalizados

A tabela a seguir lista as permissões básicas dos principais papéis do IAM e seus métodos de API associados.

Permissão do IAM Métodos de API
compute.securityPolicies.create SecurityPolicies insert
compute.securityPolicies.delete SecurityPolicies delete
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
compute.securityPolicies.list SecurityPolicies list
compute.securityPolicies.use BackendServices setSecurityPolicy
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
compute.backendServices.setSecurityPolicy BackendServices setSecurityPolicy

Como configurar políticas de segurança do Google Cloud Armor para balanceamento de carga HTTP(S)

De modo geral, estas são as etapas para configurar as políticas de segurança do Google Cloud Armor para ativar regras que permitem ou negam tráfego ao balanceamento de carga HTTP(S).

  1. Crie uma política de segurança do Google Cloud Armor.
  2. Adicione regras à política com base em listas de IPs, expressões personalizadas ou conjuntos de expressões pré-configuradas.
  3. Anexe a política de segurança do Google Cloud Armor a um serviço de back-end do balanceador de carga HTTP(S) para o qual você quer controlar o acesso.
  4. Atualize a política de segurança do Google Cloud Armor, conforme necessário.

No exemplo a seguir, crie duas políticas de segurança do Google Cloud Armor e aplique-as a diferentes serviços de back-end.

Exemplo em que duas políticas de segurança do Google Cloud Armor são aplicadas a diferentes serviços de back-end
Exemplo em que duas políticas de segurança do Google Cloud Armor são aplicadas a diferentes serviços de back-end (clique para ampliar)

No exemplo, estas são as políticas de segurança do Google Cloud Armor:

  • mobile-clients-policy se aplica a usuários externos dos serviços games
  • internal-users-policy se aplica à equipe test-network da organização

Aplique mobile-clients-policy ao serviço games, cujo serviço de back-end é chamado games, e aplique internal-users-policy ao serviço test interno da equipe de teste, cujo serviço de back-end correspondente é chamado test-network.

Se as instâncias de back-end de um serviço estiverem em várias regiões, a política de segurança do Google Cloud Armor associada ao serviço será aplicável a instâncias em todas as regiões. No exemplo acima, a política de segurança do Google Cloud Armor mobile-clients-policy é aplicável às instâncias 1, 2, 3 e 4 em us-central e às instâncias 5 e 6 em us-east.

Como criar o exemplo

Use estas instruções para criar o exemplo discutido na seção anterior.

Console

Para criar a configuração de exemplo, siga estas etapas:

  1. No Console do Google Cloud, acesse a página Segurança de rede.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança.
  2. Clique em Criar política.
  3. No campo Nome, digite mobile-client-policy.
  4. No campo Descrição, digite policy for external users.
  5. Clique em Negar.
  6. Clique em Próxima etapa.
  7. Clique em Adicionar regra.
  8. No campo Descrição, digite allow traffic from 192.0.2.0/24.
  9. Para o Modo, selecione Modo básico (apenas endereços/intervalos de IP).
  10. No campo Correspondência, digite 192.0.2.0/24.
  11. Para a Ação, selecione Permitir.
  12. No campo Prioridade, digite 1000.
  13. Clique em Concluído.
  14. Clique em Próxima etapa.
  15. Clique em Adicionar destino.
  16. Selecione um Destino na lista suspensa.
  17. Clique em Concluído.
  18. Clique em Criar política. Você verá a página Políticas de segurança no Console.
  19. No campo Nome, digite internal-users-policy.
  20. No campo Descrição, digite Policy for internal test users.
  21. Clique em Negar.
  22. Clique em Próxima etapa.
  23. Clique em Adicionar regra.
  24. No campo Descrição, digite allow traffic from 198.51.100.0/24.
  25. Para o Modo, selecione Modo básico (apenas endereços/intervalos de IP).
  26. No campo Correspondência, digite 198.51.100.0/24.
  27. Para a Ação, selecione Permitir.
  28. Marque a opção Ativar.
  29. No campo Prioridade, digite 1000.
  30. Clique em Concluído.
  31. Clique em Próxima etapa.
  32. Clique em Adicionar destino.
  33. Selecione um Destino na lista suspensa.
  34. Clique em Concluído.
  35. Clique em Criar política. Você verá a página Políticas de segurança no Console.

gcloud

  1. Crie as políticas de segurança do Google Cloud Armor.

    gcloud compute security-policies create mobile-clients-policy \
        --description "policy for external users"
    
    gcloud compute security-policies create internal-users-policy \
        --description "policy for internal test users"
    
  2. Atualize as regras padrão para as políticas de segurança do Google Cloud Armor para negar tráfego.

    gcloud compute security-policies rules update 2147483647 \
        --security-policy mobile-clients-policy \
        --action "deny-404"
    
    gcloud compute security-policies rules update 2147483647 \
        --security-policy internal-users-policy \
        --action "deny-502"
    
  3. Adicione regras às políticas de segurança do Google Cloud Armor.

    gcloud compute security-policies rules create 1000 \
        --security-policy mobile-clients-policy \
        --description "allow traffic from 192.0.2.0/24" \
        --src-ip-ranges "192.0.2.0/24" \
        --action "allow"
    
    gcloud compute security-policies rules create 1000 \
        --security-policy internal-users-policy \
        --description "allow traffic from 198.51.100.0/24" \
        --src-ip-ranges "198.51.100.0/24" \
        --action "allow"
    
  4. Anexe as políticas de segurança do Google Cloud Armor aos serviços de back-end.

    gcloud compute backend-services update games \
        --security-policy mobile-clients-policy
    
    gcloud compute backend-services update test-network \
        --security-policy internal-users-policy
    

Como configurar o Google Cloud Armor para GKE

É possível configurar as políticas de segurança do Google Cloud Armor para GKE usando o seguinte procedimento geral.

  1. Configure uma política de segurança do Google Cloud Armor com regras usando a API REST ou a ferramenta de linha de comando gcloud.
  2. Crie um recurso de Entrada no GKE.
  3. Determine quais serviços de back-end estão associados ao recurso de Entrada.

    1. Recupere a configuração do recurso de Entrada:

      kubectl describe ingress [INGRESS_NAME]
      
    2. Observe os valores no campo backends da seção "Anotações" da saída. Esses são os nomes dos serviços de back-end usados.

  4. Usando a API REST ou a ferramenta de linha de comando gcloud, anexe a política de segurança do Google Cloud Armor a cada um dos back-ends mencionados na etapa anterior.

Se um recurso de Entrada do Kubernetes for excluído e recriado, a política de segurança precisará ser aplicada novamente ao novo serviço de back-end.

Saiba mais em Como configurar o Google Cloud Armor por meio da Entrada

Como criar políticas, regras e expressões de segurança do Google Cloud Armor

É possível criar políticas, regras e expressões de segurança do Google Cloud Armor usando o Console do Google Cloud, a ferramenta de linha de comando gcloud ou a API REST.

Veja a seguir expressões de exemplo. Saiba mais sobre expressões na referência de linguagem de regras do Google Cloud Armor.

Se você estiver criando uma regra ou expressão que use códigos de país ou região ISO 3166-1 alpha 2, observe que o Google Cloud Armor trata cada código de maneira independente. As regras e expressões do Google Cloud Armor usam explicitamente esses códigos de região para permitir ou negar solicitações.

  • A expressão a seguir corresponde a solicitações do endereço IP 1.2.3.4 e contém a string Godzilla no cabeçalho do user agent:

    inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('Godzilla')
    
  • A expressão a seguir corresponde a solicitações que têm um cookie com um valor específico:

    has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
    
  • A expressão a seguir corresponde a solicitações da região AU:

    origin.region_code == 'AU'
    
  • A expressão a seguir corresponde a solicitações da região AU e não no intervalo de IP especificado:

    request.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
    
  • A expressão a seguir corresponde a solicitações se o URI corresponder a uma expressão regular:

    request.path.matches('/bad_path/')
    
  • A expressão a seguir corresponde a solicitações se o valor decodificado em Base64 do cabeçalho da identificação do usuário contiver um valor específico:

    has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
    
  • A expressão a seguir usa um conjunto de expressões pré-configuradas para corresponder contra ataques SQLi:

    evaluatePreconfiguredExpr('sqli-stable')
    

As instruções a seguir pressupõem que você está criando políticas de segurança para aplicar a um balanceador de carga HTTP(S) externo existente e a um serviço de back-end.

Console

Para criar políticas e regras de segurança do Google Cloud Armor e anexar a política de segurança do Google Cloud Armor a um serviço de back-end, execute as seguintes etapas:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança.
  2. Clique em Criar política.
  3. No campo Nome, digite o nome da política.
  4. Também é possível digitar uma descrição da política.
  5. Selecione Permitir para uma regra padrão que permite o acesso ou Negar para uma regra padrão que proíbe o acesso a um endereço ou intervalo de endereços IP.

    A regra padrão é a de menor prioridade que entra em vigor somente se nenhuma outra regra se aplicar.

  6. Se você estiver criando uma regra para Negar, escolha o Status negar. Esta é a mensagem de erro que o Google Cloud Armor exibe se um usuário sem acesso tentar consegui-lo.

  7. Independentemente do tipo de regra que você esteja criando, clique em Próxima etapa.

  8. Clique em Adicionar regra para configurar mais regras para a política de segurança.

  9. Também é possível digitar uma Descrição para a regra.

  10. Selecione o modo.

    • Modo básico: permite ou nega tráfego com base em endereços ou intervalos de IP.
    • Modo avançado: permite ou nega tráfego com base em expressões de regra.
  11. No campo Correspondência, especifique as condições sob as quais a regra se aplica.

    • Modo básico: digite intervalos de endereços IP para corresponder à regra.
    • Modo avançado: digite uma expressão ou subexpressões para avaliar as solicitações recebidas. Saiba mais sobre como escrever as expressões na linguagem das regras do Google Cloud Armor.
  12. Selecione Permitir ou Negar para permitir ou negar tráfego, se a regra for correspondente.

  13. Para ativar o modo de visualização, marque Ativar. No modo de visualização, é possível ver como a regra se comporta, mas ela não está ativada.

  14. Digite a Prioridade da regra. Pode ser qualquer número inteiro positivo entre 0 e 2.147.483.646, inclusive. Saiba mais sobre a ordem de avaliação em Prioridade da regra e ordem de avaliação.

  15. Clique em Concluído.

  16. Para adicionar mais regras, clique em Adicionar regra e repita as etapas acima. Caso contrário, clique em Próxima etapa.

  17. Clique em Adicionar destino.

  18. Selecione um Destino na lista suspensa.

  19. Para adicionar mais destinos, clique em Adicionar destino.

  20. Clique em Concluído.

  21. Clique em Criar política.

gcloud

  1. Para criar uma nova política de segurança do Google Cloud Armor, use o comando gcloud compute security-policies create, em que NAME é o nome da política de segurança do Google Cloud Armor.

    gcloud compute security-policies create [NAME] \
        [--file-format=[FILE_FORMAT] | --description=[DESCRIPTION]] \
        [--file-name=[FILE_NAME]]
    

    Por exemplo:

    gcloud compute security-policies create my-policy \
       --description "block bad traffic"
    
  2. Para adicionar regras a uma política de segurança do Google Cloud Armor, use o comando gcloud compute security-policies rules create PRIORITY, em que PRIORITY é a prioridade atribuída à regra na política. Saiba mais sobre como a prioridade da regra funciona em Sobre as políticas de segurança do Google Cloud Armor.

    gcloud compute security-policies rules create [PRIORITY]  \
       [--security-policy [POLICY_NAME]] \
       [--description [DESCRIPTION]] \
       --src-ip-ranges [IP_RANGE,...] | --expression [EXPRESSION] \
       --action=[ allow | deny-403 | deny-404 | deny-502 ]  \
       [--preview]
    

    O comando a seguir adiciona uma regra para bloquear o tráfego dos intervalos de endereços IP 192.0.2.0/24 e 198.51.100.0/24. A regra tem prioridade 1.000 e faz parte de uma política chamada my-policy.

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
       --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
       --action "deny-403"
    

    Com o sinalizador --preview adicionado, a regra é adicionada à política, mas não é aplicada e qualquer tráfego que acione a regra será apenas registrado.

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
       --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
       --action "deny-403" \
       --preview
    

    Use o sinalizador --expression para especificar uma condição personalizada na linguagem das regras do Google Cloud Armor. O comando a seguir adiciona uma regra para permitir o tráfego do endereço IP 1.2.3.4 e contém a string Godzilla no cabeçalho do user agent:

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('Godzilla')" \
       --action allow \
       --description "Block User-Agent 'Godzilla'"
    

    O comando a seguir adiciona uma regra para bloquear solicitações se o cookie da solicitação contiver um valor específico:

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')" \
       --action "deny-403" \
       --description "Cookie Block"
    

    O comando a seguir adiciona uma regra para bloquear solicitações da região AU:

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "origin.region_code == 'AU'" \
       --action "deny-403" \
       --description "AU block"
    

    O comando a seguir adiciona uma regra para bloquear solicitações da região AU e não no intervalo de IP especificado:

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "origin.region_code == 'AU' && !inIpRange(origin.ip, '1.2.3.0/24')" \
       --action "deny-403" \
       --description "country and IP block"
    

    O comando a seguir adiciona uma regra para bloquear solicitações com um URI que corresponda a uma expressão regular:

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "request.path.matches('/bad_path/)')" \
       --action "deny-403" \
       --description "regex block"
    

    O comando a seguir adiciona uma regra para bloquear solicitações se o valor decodificado em Base64 do cabeçalho da identificação do usuário contiver um valor específico:

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \
       --action "deny-403" \
       --description "country and IP block"
    

    O comando a seguir adiciona uma regra que usa um conjunto de expressões pré-configuradas para mitigar ataques SQLi:

    gcloud compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "evaluatePreconfiguredExpr('sqli-stable')" \
       --action "deny-403"
    

    O comando a seguir adiciona uma regra que usa uma expressão pré-configurada para permitir o acesso de todos os endereços IP em uma lista de endereços IP nomeada:

    gcloud beta compute security-policies rules create 1000 \
       --security-policy my-policy \
       --expression "evaluatePreconfiguredExpr('sourceiplist-fastly')" \
       --action "allow"
    

Como listar as regras pré-configuradas disponíveis

Liste regras pré-configuradas para ver as assinaturas e as regras de proteção de aplicativos predefinidas, como o Conjunto de regras principais do ModSecurity fornecido pelo Google Cloud Armor. Essas regras pré-configuradas contêm várias assinaturas internas que o Google Cloud Armor usa para avaliar as solicitações recebidas. Adicione essas regras pré-configuradas a regras novas ou existentes usando a linguagem de regras personalizadas do Google Cloud Armor.

Saiba mais em Regras pré-configuradas.

gcloud

  1. Execute o comando gcloud compute security-policies list-preconfigured-expression-sets.

    gcloud compute security-policies list-preconfigured-expression-sets
    

    O exemplo a seguir mostra o formato de saída do comando:

    EXPRESSION_SET
    expression-set-1
       RULE_ID
       expression-set-1-id-1
       expression-set-1-id-2
    expression-set-2
       alias-1
       RULE_ID
       expression-set-2-id-1
       expression-set-2-id-2
    

    O exemplo a seguir inclui uma amostra da saída real do comando. A saída real incluiria todas as regras listadas em Como ajustar as regras do WAF do Google Cloud Armor.

    gcloud beta compute security-policies list-preconfigured-expression-sets
    
    EXPRESSION_SET
    sqli-canary
        RULE_ID
        owasp-crs-v030001-id942110-sqli
        owasp-crs-v030001-id942120-sqli
        …
    xss-canary
        RULE_ID
        owasp-crs-v030001-id941110-xss
        owasp-crs-v030001-id941120-xss
    …
    sourceiplist-fastly
    sourceiplist-cloudflare
    sourceiplist-imperva
    

Como listar as políticas de segurança do Google Cloud Armor

Use estas instruções para listar todas as políticas de segurança do Google Cloud Armor no projeto atual ou em um projeto específico.

Console

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança e uma lista de políticas.

  2. Para ver uma política específica, clique no nome dela.

gcloud

Para listar todas as políticas de segurança configuradas do Google Cloud Armor:

gcloud compute security-policies list

Por exemplo:

gcloud compute security-policies list
NAME
my-policy

Veja mais informações em gcloud compute security-policies list

Como atualizar as políticas de segurança do Google Cloud Armor

Use estas instruções para atualizar uma política de segurança do Google Cloud Armor. Por exemplo, é possível alterar a descrição da política, modificar o comportamento da regra padrão, mudar o serviço de back-end de destino ou adicionar novas regras.

Console

Para atualizar uma política de segurança do Google Cloud Armor:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor e uma lista de políticas.
  2. Clique no menu de três pontos correspondente à política que você quer atualizar.

    1. Para atualizar a descrição da política da ação da regra padrão, selecione Editar, faça as alterações e clique em Atualizar.
    2. Para adicionar uma regra, selecione Adicionar regra e siga as instruções acima para adicionar uma regra a uma política no Console.
    3. Para alterar o serviço de back-end de destino para a política de segurança do Google Cloud Armor, selecione Aplicar política ao destino, adicione um novo destino e clique em Adicionar.

gcloud

Para atualizar uma política de segurança do Google Cloud Armor com a ferramenta de linha de comando gcloud, use as seguintes instruções:

Como exportar políticas de segurança do Google Cloud Armor

É possível exportar uma política de segurança do Google Cloud Armor como um arquivo YAML ou JSON usando a ferramenta de linha de comando gcloud. A exportação de uma política permite recuperar uma cópia dela, que você pode modificar ou salvar no controle de origem.

gcloud

  1. No comando a seguir, NAME é o nome da política de segurança do Google Cloud Armor. Os formatos de arquivo válidos são YAML e JSON. Se você não informar o formato do arquivo, o Google Cloud Armor usará o YAML como padrão.

    gcloud compute security-policies export NAME \
        --file-name [FILE_NAME]  \
        --file-format [FILE_FORMAT]
    

    O comando a seguir exporta a política de segurança my-policy para o arquivo my-file no formato YAML:

    gcloud compute security-policies export my-policy \
         --file-name my-file \
         --file-format yaml
     

    O exemplo a seguir mostra uma política de segurança exportada:

    description: my description
    fingerprint: PWfLGDWQDLY=
    id: '123'
    name: my-policy
    rules:

    • action: allow description: default rule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
  2. É possível modificar o arquivo exportado com qualquer editor de texto e depois importar de volta para o GCP usando o comando import.

Como importar políticas de segurança do Google Cloud Armor

É possível importar políticas de segurança do Google Cloud Armor de um arquivo YAML ou JSON usando a ferramenta de linha de comando gcloud. Não é possível usar o comando import para atualizar as regras de uma política existente. Em vez disso, atualize as regras uma a uma usando o procedimento Atualizar regras ou de uma só vez usando o procedimento Atualizar regras atomicamente em uma política de segurança do Google Cloud Armor.

gcloud

Para importar políticas de segurança do Google Cloud Armor, use o comando gcloud compute security-policies import NAME, em que NAME é o nome da política de segurança do Google Cloud Armor que você está importando. Se você não fornecer o formato do arquivo, o formato correto será presumido com base na estrutura do arquivo. Se a estrutura for inválida, você verá um erro.

gcloud compute security-policies import NAME \
   --file-name [FILE_NAME] \
  [--file-format [FILE_FORMAT]]

Por exemplo, o comando a seguir atualiza a política my-policy importando o arquivo my-file.

gcloud compute security-policies import my-policy \
    --file-name my-file \
    --file-format json

Se a impressão digital da política estiver desatualizada ao importá-la, o Google Cloud Armor mostrará um erro. Isso significa que a política foi alterada desde a última vez em que você a exportou. Para corrigir isso, use o comando describe na política para conseguir a impressão digital mais recente. Mescle as diferenças entre a política descrita e sua política. Depois, substitua a impressão digital desatualizada pela mais recente.

Como excluir políticas de segurança do Google Cloud Armor

Use estas instruções para excluir uma política de segurança do Google Cloud Armor. Remova todos os serviços de back-end da política antes de excluí-la.

Console

Para excluir uma política de segurança do Google Cloud Armor:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Ao lado do nome da política de segurança do Google Cloud Armor que você quer excluir, marque a caixa de seleção.
  3. No canto superior direito da tela, clique no ícone Excluir.

gcloud

Use gcloud compute security-policies delete NAME para excluir uma política de segurança, em que NAME é o nome da política de segurança do Google Cloud Armor.

gcloud compute security-policies delete NAME

Como anexar uma política de segurança do Google Cloud Armor a um serviço de back-end

Use estas instruções para anexar uma política de segurança do Google Cloud Armor a um serviço de back-end. Uma política de segurança do Google Cloud Armor pode ser anexada a mais de um serviço de back-end, mas um serviço de back-end pode ter apenas uma política de segurança do Google Cloud Armor.

Console

Para anexar uma política a um serviço de back-end, siga as etapas abaixo:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Clique no nome da política de segurança do Google Cloud Armor. A página Detalhes da política é exibida.
  3. No meio da página, clique na guia Destinos.
  4. Clique em Aplicar política ao novo destino.
  5. Clique em Adicionar destino.
  6. Clique em Selecionar um destino.
  7. Selecione o destino.
  8. Clique em Adicionar.

gcloud

Use o comando gcloud compute backend-services para anexar uma política de segurança a um serviço de back-end.

gcloud compute backend-services update my-backend \
    --security-policy my-policy

Como remover uma política de segurança do Google Cloud Armor de um serviço de back-end

Use estas instruções para remover uma política de segurança do Google Cloud Armor de um serviço de back-end.

Console

Para remover uma política de um serviço de back-end, siga as etapas abaixo:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Clique no nome da política de segurança do Google Cloud Armor. A página Detalhes da política é exibida.
  3. No meio da página, clique na guia Destinos.
  4. Selecione o serviço de back-end de destino do qual você quer remover a política.
  5. Clique em Remover.
  6. No pop-up de confirmação, clique em Remover.

gcloud

Para remover uma política de segurança do Google Cloud Armor do serviço de back-end my-backend, siga as etapas abaixo:

gcloud compute backend-services update my-backend \
   --security-policy ""

Como adicionar regras a uma política de segurança do Google Cloud Armor

Use estas instruções para adicionar regras a uma política de segurança do Google Cloud Armor.

Console

Para adicionar regras a uma política de segurança do Google Cloud Armor, siga as etapas abaixo:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Clique no nome da política de segurança do Google Cloud Armor. A página Detalhes da política é exibida.
  3. No meio da página, clique em Adicionar regra.
  4. Também é possível digitar uma descrição da regra.
  5. Selecione o modo.

    • Modo básico: permite ou nega tráfego com base em endereços ou intervalos de IP.
    • Modo avançado: permite ou nega tráfego com base em expressões de regra.
  6. No campo Correspondência, especifique as condições sob as quais a regra se aplica.

    • Modo básico: digite de um (1) a cinco (5) intervalos de endereços IP para corresponder à regra.
    • Modo avançado: digite uma expressão ou subexpressões para avaliar as solicitações recebidas. Saiba mais sobre como escrever as expressões em linguagem das regras do Google Cloud Armor e leia os seguintes exemplos:

      • A expressão a seguir corresponde a solicitações do endereço IP 1.2.3.4 e contém a string Godzilla no cabeçalho do user agent:

        inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('Godzilla')
        
      • A expressão a seguir corresponde a solicitações que têm um cookie com um valor específico:

        has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
        
      • A expressão a seguir corresponde a solicitações da região AU:

        origin.region_code == 'AU'
        
      • A expressão a seguir corresponde a solicitações da região AU e não no intervalo de IP especificado:

        request.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
        
      • A expressão a seguir corresponde a solicitações se o URI corresponder a uma expressão regular:

        request.path.matches('/bad_path/)')
        
      • A expressão a seguir corresponde a solicitações se o valor decodificado em Base64 do cabeçalho da identificação do usuário contiver um valor específico:

        has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
        
      • A expressão a seguir usa um conjunto de expressões pré-configuradas para corresponder contra ataques SQLi:

        evaluatePreconfiguredExpr('sqli-stable')
        
  7. Na seção Ação, selecione Permitir ou Negar.

  8. Se você estiver criando uma regra para Negar, escolha o Status negar.

  9. Se você quiser ativar o modo de visualização para a regra, marque Ativar.

  10. No campo Prioridade, digite um número inteiro positivo.

  11. Clique em Adicionar.

gcloud

Para adicionar regras a uma política de segurança do Google Cloud Armor, use o comando gcloud compute security-policies rules create PRIORITY, em que PRIORITY é a prioridade da regra na política.

gcloud compute security-policies rules create PRIORITY \
   --security-policy [POLICY_NAME} \
   --description [DESCRIPTION] \
   --src-ip-ranges [IP_RANGES] | --expression [EXPRESSION] \
   --action=[ allow | deny-403 | deny-404 | deny-502 ] \
   --preview

O comando a seguir adiciona uma regra para bloquear o tráfego dos intervalos de endereços IP 192.0.2.0/24 e 198.51.100.0/24. A regra tem prioridade 1.000 e faz parte de uma política chamada my-policy.

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
   --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
   --action "deny-403"

Use o sinalizador --expression para especificar uma condição na linguagem das regras do Google Cloud Armor. O comando a seguir adiciona uma regra para permitir o tráfego do endereço IP 1.2.3.4 e contém a string Godzilla no cabeçalho do user agent:

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('Godzilla')" \
   --action allow \
   --description "Block User-Agent 'Godzilla'"

O comando a seguir adiciona uma regra para bloquear solicitações se o cookie da solicitação contiver um valor específico:

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('80=BLAH')" \
   --action deny-403 \
   --description "Cookie Block"

O comando a seguir adiciona uma regra para bloquear solicitações da região AU:

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "origin.region_code == 'AU'" \
   --action deny-403 \
   --description "AU block"

O comando a seguir adiciona uma regra para bloquear solicitações da região AU e não no intervalo de IP especificado:

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "request.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')" \
   --action deny-403 \
   --description "country and IP block"

O comando a seguir adiciona uma regra para bloquear solicitações com um URI que corresponda a uma expressão regular:

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "request.path.matches('/bad_path/)')" \
   --action deny-502 \
   --description "regex block"

O comando a seguir adiciona uma regra para bloquear solicitações se o valor decodificado em Base64 do cabeçalho da identificação do usuário contiver um valor específico:

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \
   --action deny-403 \
   --description "country and IP block"

O comando a seguir adiciona uma regra que usa um conjunto de expressões pré-configuradas para mitigar ataques SQLi:

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "evaluatePreconfiguredExpr('sqli-stable')" \
   --action deny-403

Como listar as regras em uma política de segurança do Google Cloud Armor

Use estas instruções para listar as regras em uma política de segurança do Google Cloud Armor.

Console

Para listar as regras em uma política de segurança do Google Cloud Armor, siga estas etapas:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Clique no nome da política de segurança do Google Cloud Armor. A página Detalhes da política é exibida, e as regras da política são listadas no meio da página.

gcloud

Use o seguinte comando gcloud para listar todas as regras em apenas uma política de segurança, junto com uma descrição da política.

gcloud compute security-policies describe [NAME] \

Use o comando gcloud a seguir para descrever uma regra com a prioridade indicada na política de segurança especificada do Google Cloud Armor.

gcloud compute security-policies rules describe [PRIORITY] \
    --security-policy [POLICY_NAME]

Por exemplo, o comando a seguir descreve a regra com prioridade 1.000 na política de segurança do Google Cloud Armor my-policy:

gcloud compute security-policies rules describe 1000 \
    --security-policy my-policy

action: deny(403)
description: block traffic from 192.0.2.0/24 and 198.51.100.0/24
kind: compute#securityPolicyRule
match:
  srcIpRanges:

  • '192.0.2.0/24'
  • '198.51.100.0/24' preview: false priority: 1000

Como atualizar uma única regra

Use estas instruções para atualizar apenas uma regra em uma política de segurança do Google Cloud Armor. Para atualizar atomicamente várias regras, consulte Atualizar atomicamente regras em uma política de segurança do Google Cloud Armor.

Console

Para atualizar uma regra:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Clique no nome da política de segurança do Google Cloud Armor. A página Detalhes da política é exibida.
  3. No meio da página, clique no ícone de lápis ao lado da regra. A página Editar regra é exibida.
  4. Faça as alterações desejadas e clique em Atualizar.

gcloud

Use este comando para atualizar uma regra com a prioridade indicada em uma política de segurança especificada do Google Cloud Armor. Só é possível atualizar uma política de segurança do Google Cloud Armor por vez usando este comando.

gcloud compute security-policies rules update [PRIORITY] [ \
   --security-policy [POLICY_NAME]  \
   --description [DESCRIPTION]  \
   --src-ip-ranges [IP_RANGES]  | --expression [EXPRESSION] \
   --action=[ allow | deny-403 | deny-404 | deny-502 ]  \
   --preview
  ]
  

Por exemplo, o comando a seguir atualiza uma regra com prioridade 1.111 para permitir o tráfego do intervalo de endereços IP 192.0.2.0/24.

gcloud compute security-policies rules update 1111 \
   --security-policy my-policy \
   --description "allow traffic from 192.0.2.0/24" \
   --src-ip-ranges "192.0.2.0/24" \
   --action "allow"

Saiba mais sobre este comando em atualização de regras de políticas de segurança de computação do gcloud

Para atualizar a prioridade de uma regra, use a API REST. Veja mais informações em securityPolicies.patchRule.

Como atualizar atomicamente várias regras em uma política de segurança do Google Cloud Armor

Uma atualização atômica aplica alterações em várias regras em apenas uma atualização. Se você atualizar as regras uma por uma, talvez veja um comportamento não intencional porque as regras novas e antigas podem estar funcionando juntas por um curto período.

Para atualizar atomicamente várias regras, exporte a política de segurança atual do Google Cloud Armor para um arquivo JSON ou YAML e modifique-a. Use o arquivo modificado para criar uma nova política de segurança do Google Cloud Armor e mude a política de segurança para os serviços de back-end relevantes.

gcloud

  1. Exporte a política para atualização, conforme o exemplo a seguir:

    gcloud compute security-policies export my-policy \
         --file-name my-file \
         --file-format yaml
    

    A política exportada ficará parecida com o exemplo:

    description: my description
    fingerprint: PWfLGDWQDLY=
    id: '123'
    name: my-policy
    rules:

    • action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredExpr('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1
    • action: allow description: my-rule-2 match: config: srcIpRanges:
      • '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 2
    • action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges:
      • '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
  2. Use qualquer editor de texto para modificar a política. Por exemplo, você pode alterar as prioridades das regras existentes e adicionar uma nova regra:

    description: my description
    fingerprint: PWfLGDWQDLY=
    id: '123'
    name: my-policy
    rules:

    • action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredExpr('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1
    • action: allow description: my-new-rule match: config: srcIpRanges:
      • '1.2.3.1' versionedExpr: SRC_IPS_V1 preview: false priority: 10
    • action: allow description: my-rule-2 match: config: srcIpRanges:
      • '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 11
    • action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges:
      • '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
  3. Crie uma nova política de segurança do Google Cloud Armor e especifique o nome e o formato modificados do arquivo, conforme o exemplo a seguir:

    gcloud compute security-policies create new-policy \
       --description "allow-listed traffic" \
       --file-name modified-policy \
       --file-format yaml
    
  4. Remova a política de segurança antiga do serviço de back-end relevante, conforme o exemplo a seguir:

    gcloud compute backend-services update my-backend \
       --security-policy ""
    
  5. Adicione a nova política de segurança ao serviço de back-end, conforme o exemplo a seguir:

    gcloud compute backend-services update my-backend \
        --security-policy new-policy
    
  6. Se a política antiga não for usada, exclua-a:

    gcloud compute security-policies delete my-policy
    

Como eliminar regras

Use estas instruções para excluir regras de uma política de segurança do Google Cloud Armor.

Console

Para excluir uma regra de uma política de segurança do Google Cloud Armor:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Clique no nome da política de segurança do Google Cloud Armor. A página Detalhes da política é exibida.
  3. No meio da página, marque a caixa de seleção ao lado da regra que você quer excluir.
  4. Clique no botão Excluir.

gcloud

Use este comando para remover uma regra com a prioridade indicada de uma política de segurança especificada do Google Cloud Armor. Só é possível alterar uma política de segurança do Google Cloud Armor por vez, mas você pode excluir várias regras ao mesmo tempo.

gcloud compute security-policies rules delete PRIORITY [...] [
   --security-policy [POLICY_NAME] \
  ]

Por exemplo:

gcloud compute security-policies rules delete 1000 \
   --security-policy my-policy

Como ativar a geração de registros de solicitações HTTP(S)

Os registros do Google Cloud Armor para o nome da política de segurança, a prioridade da regra de correspondência, a ação associada e as informações relacionadas são registrados como parte da geração de registros do balanceamento de carga HTTP(S). A geração de registros para novos serviços de back-end é desativada por padrão. Portanto, é necessário ativar a geração de registros do balanceamento de carga HTTP(S) para registrar informações completas do Google Cloud Armor.

Usando a geração de registros de balanceamento de carga HTTP(S), é possível ver as solicitações HTTP(S) permitidas e negadas em detalhes. Por exemplo, para ver solicitações negadas, use filtros como jsonPayload.enforcedSecurityPolicy.outcome="DENY" ou jsonPayload.statusDetails="denied_by_security_policy".

Para ativar a geração de registros do balanceamento de carga HTTP(S), veja Como gerar registros e monitorar balanceamento de carga HTTP(S).

Ver registros

Só é possível ver os registros no Console.

Console

Para ver os registros de uma política de segurança do Google Cloud Armor:

  1. Acesse a página "Segurança de rede" no Console do Google Cloud.
    Acesse a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Na linha de uma política de segurança, clique no menu de três pontos correspondente à política cujos registros você quer ver.
  3. Selecione Ver registros.

A seguir