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

Use estas instruções para filtrar o tráfego recebido para o balanceamento de carga HTTP(S) criando políticas de segurança do Google Cloud Armor. Para informações conceituais sobre as políticas de segurança do Google Cloud Armor, consulte Conceitos da política de segurança do Google Cloud Armor.

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

Para informações sobre como configurar o Google Cloud Armor no GKE, consulte 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):

  • 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 de administrador de rede (functions/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 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 no qual duas políticas de segurança do Google Cloud Armor são aplicadas a diferentes serviços de back-end
Exemplo no qual 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 de seus serviços games.
  • internal-users-policy se aplica à equipe test-network da sua organização.

Você aplica mobile-clients-policy ao serviço games, cujo serviço de back-end é chamado games e aplica internal-users-policy ao serviço test interno da equipe de teste, que o 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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Vá para a página Segurança de rede
    Você verá a página Políticas de segurança.
  2. Clique em Create policy.
  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 Done.
  14. Clique em Próxima etapa.
  15. Clique em Adicionar destino.
  16. Selecione um Destino na lista suspensa.
  17. Clique em Done.
  18. Clique em Create policy. 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 Enable.
  29. No campo Prioridade, digite 1000.
  30. Clique em Done.
  31. Clique em Próxima etapa.
  32. Clique em Adicionar destino.
  33. Selecione um Destino na lista suspensa.
  34. Clique em Done.
  35. Clique em Create policy. 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 ferramenta de linha de comando API REST ou 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-end mencionados na etapa anterior.

Se um recurso de Entrada do Kubernetes for excluído e recriado, a política de segurança deverá ser aplicada novamente à um ou mais novos serviço de back-end.

Para mais informações, consulte 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

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

A seguir, são mostradas expressões de exemplo. Para obter mais informações sobre expressões, consulte a referência de linguagem das 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 às 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 possuem 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 às solicitações, se o URI corresponder a uma expressão regular:

    request.path.matches('/bad_path/)')
    
  • A expressão a seguir corresponde às solicitações se o valor decodificado 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 uma correspondência pré-configurada do conjunto de expressões contra ataques SQLi:

    evaluatePreconfiguredExpr('sqli-stable')
    

As instruções a seguir pressupõem que você esteja 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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Vá para a página Segurança de rede
    Você verá a página Políticas de segurança.
  2. Clique em Create policy.
  3. No campo Nome, digite o nome da sua política.
  4. Também é possível digitar uma descrição da política.
  5. Selecione Permitir para uma regra padrão que permita o acesso ou Negar para uma regra padrão que proíba o acesso a um endereço ou intervalo de endereços IP.

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

  6. Se você estiver criando uma regra de negação, escolha o status Negar. Esta é a mensagem de erro que o Google Cloud Armor exibe se um usuário sem acesso tentar obter acesso.

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

  8. Clique em Adicionar regra para configurar regras adicionais 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: o intervalo de endereços IP do tipo corresponde à regra.
    • Modo avançado: digite uma expressão ou subexpressão para avaliar as solicitações recebidas. Consulte a linguagem das regras do Google Cloud Armor para mais informações sobre como escrever as expressões.
  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, você pode ver como a regra se comporta, mas a regra não está ativada.

  14. Digite a prioridade da regra. Pode ser qualquer número inteiro positivo entre 0 e 2.147.483.646. Para mais informações sobre a ordem de avaliação, consulte Prioridade da regra e ordem de avaliação.

  15. Clique em Done.

  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 Done.

  21. Clique em Create policy.

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]]
    

    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. Para mais informações sobre como a prioridade da regra funciona, consulte 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 é uma regra em 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 aciona a regra é 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 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 pré-configuradas disponíveis

Liste regras pré-configuradas para visualizar as assinaturas e 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. Você adiciona essas regras pré-configuradas a regras novas ou existentes usando a linguagem de regras personalizadas do Google Cloud Armor.

Para mais informações, consulte 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 a 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
    

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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Vá para 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 visualizar 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

Exemplo:

gcloud compute security-policies list
NAME
my-policy

Para mais informações, consulte gcloud compute security-policies list.

Como atualizar 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, você pode modificar a descrição da política, modificar o comportamento da regra padrão, alterar 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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Vá para 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 de 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

Você pode 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 fornecer 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. Você pode modificar o arquivo exportado com qualquer editor de texto e, em seguida, importar de volta para o GCP usando o comando import.

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

Você pode 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, você deve atualizar as regras uma a uma usando o procedimento Atualizar regras ou de uma só vez usando o Atualizar automaticamente as regras em um procedimento da 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á assumido 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 quando você a importa, o Google Cloud Armor mostra um erro. Isso significa que a política foi modificada desde a última vez em que você a exportou. Para corrigir isso, use o comando describe na política para obter a impressão digital mais recente. Mescle as diferenças entre a política descrita e sua política e 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. Você deve remover todos os serviços de back-end da política antes de poder excluí-la.

Console


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

  1. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para 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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para 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 Selecione um destino.
  7. Selecione o destino.
  8. Clique em Add.

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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para 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ê está removendo 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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para 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ão para avaliar as solicitações recebidas. Consulte a linguagem das regras do Google Cloud Armor para mais informações sobre como escrever as expressões e ler os seguintes exemplos:

      • A expressão a seguir corresponde às 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 possuem 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 às solicitações, se o URI corresponder a uma expressão regular:

        request.path.matches('/bad_path/)')
        
      • A expressão a seguir corresponde às solicitações se o valor decodificado 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 aos ataques SQLi:

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

  8. Se você estiver criando uma regra de negação, 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 Add.

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 é uma regra em 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 a sinalização --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 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:

  1. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para 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 uma única política de segurança, além de 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 especificada 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 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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para 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 especificada em uma política de segurança designada do Google Cloud Armor. Você pode atualizar apenas 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 1111 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"

Para mais informações sobre este comando, consulte atualização de regras de políticas de segurança de computação do gcloud

Para atualizar a prioridade de uma regra, você deve usar a API REST. Consulte securityPolicies.patchRule para mais informações.

Atualização automática de 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, poderá observar um comportamento não intencional porque as regras novas e antigas podem estar trabalhando juntas por um curto período de tempo.

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 mostrado no exemplo a seguir:

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

    A política exportada será semelhante ao seguinte 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 modificar 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 mostrado no 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 mostrado no 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 mostrado no 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. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para 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 especificada de uma política de segurança designada do Google Cloud Armor. Você pode modificar apenas uma política de segurança do Google Cloud Armor por vez, mas pode excluir várias regras ao mesmo tempo.

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

Exemplo:

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

Ver registros

Você pode ver os registros apenas no console.

Console


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

  1. Vá para a página "Segurança de rede" no Console do Google Cloud.
    Ir para a página "Segurança de rede"
    Você verá a página Políticas de segurança do Google Cloud Armor.
  2. Clique no menu de três pontos correspondente à política cujos registros você quer ver.
  3. Selecione Exibir registros.

Resolver problemas

Use estas instruções para solucionar problemas com as políticas de segurança do Google Cloud Armor.

O tráfego é permitido, apesar de uma regra de negação estar configurada na política de segurança do Google Cloud Armor

  1. Verifique se a política de segurança do Google Cloud Armor está anexada a um serviço de back-end de destino. Por exemplo, o comando a seguir descreve todos os dados associados ao serviço de back-end my-backend. Os resultados retornados devem incluir o nome da política de segurança do Google Cloud Armor associada a este serviço de back-end.

    gcloud compute backend-services describe my-backend
    
  2. Analise os registros HTTP(S) do Stackdriver para determinar qual política e regra foram correspondidas para seu tráfego com a ação associada. Use o visualizador de registros do Stackdriver para visualizar os registros.

    Aqui está um registro de amostra de uma solicitação permitida com os campos interessantes em negrito. Verifique os seguintes campos e verifique se eles correspondem à regra que você configurou para negar o tráfego:

    • configuredAction deve corresponder à ação configurada na regra
    • outcome deve corresponder a configuredAction acima
    • priority deve corresponder ao número de prioridade da regra
    • name deve corresponder ao nome da política de segurança do Google Cloud Armor anexada a este serviço de back-end
    httpRequest:
     remoteIp: 104.133.0.95
     requestMethod: GET
     requestSize: '801'
     requestUrl: http://74.125.67.38/
     responseSize: '246'
     serverIp: 10.132.0.4
     status: 200
     userAgent: curl/7.35.0
       insertId: ajvis5ev4i60
       internalId:
         projectNumber: '895280006100'
       jsonPayload:
         '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
         **enforcedSecurityPolicy:
           configuredAction: ACCEPT
           name: mydev-policy-log-test1
           outcome: ACCEPT
           priority: 2147483647**
         statusDetails: response_sent_by_backend
       logName: projects/mydev-staging/logs/requests
       resource:
         labels:
           backend_service_name: ''
           forwarding_rule_name: mydev-forwarding-rule
           project_id: mydev-staging
           target_proxy_name: mydev-target-http-proxy
           url_map_name: mydev-url-map
           zone: global
         type: http_load_balancer
       severity: INFO
       timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Revise a hierarquia de regras para garantir que a regra correta seja correspondida. É possível que uma regra de prioridade mais alta com uma ação de permissão corresponda ao seu tráfego. Use o comando describe nas políticas de segurança do gCloud para ver o conteúdo da política de segurança do Google Cloud Armor.

    Por exemplo, o exemplo a seguir mostra como uma regra de permissão de prioridade mais alta (na prioridade 100) corresponde ao tráfego proveniente do endereço IP 1.2.3.4, impedindo que a regra de negação de menor prioridade (na prioridade 200) acione e bloqueie o tráfego.

gcloud compute security-policies describe my-policy
creationTimestamp: '2017-04-18T14:47:58.045-07:00
description: ''
fingerprint: Yu5spBjdoC0=
id: '2560355463394441057'
kind: compute#securityPolicy
name: my-policy
rules:
- action: allow
  description: allow high priority rule
  kind: compute#securityPolicyRule
  match:
    srcIpRanges:
    - '1.2.3.4/32'
  preview: false
  priority: 100
- action: deny
  description: deny lower priority rule
  kind: compute#securityPolicyRule
  match:
    srcIpRanges:
    - '1.2.3.0/24
  preview: false
  priority: 200
- action: deny
  description: default rule
  kind: compute#securityPolicyRule
  match:
    srcIpRanges:
    - '*'
  preview: false
  priority: 2147483647
  selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp

A regra pré-configurada retorna falsos positivos

A detecção XSS e SQLi é baseada na correspondência estática de assinaturas nos cabeçalhos de solicitação HTTP e outros parâmetros L7. Esses padrões de expressão regular são propensos a falsos positivos. Você pode usar a regra pré-configurada para detecção de XSS e SQLi no modo de visualização e, em seguida, verificar o registro do Stackdriver para obter quaisquer falsos positivos.

Se você encontrar um falso positivo, poderá comparar o conteúdo do tráfego com as regras do CRS do ModSecurity. Se a regra for inválida ou não relevante, desative-a usando a expressão evaluatePreconfiguredExpr e especifique o ID da regra no argumento exclude ID list.

Após revisar os registros e remover todos os falsos positivos, desative o modo de visualização.

Para adicionar uma regra pré-configurada no modo de visualização, siga as etapas abaixo:

  1. Crie uma política de segurança com a expressão pré-configurada definida no modo de visualização:

    gcloud compute security-policies rules create 1000
       --security-policy my-policy
       --expression "evaluatePreconfiguredExpr('xss-stable')"
       --action deny-403
       --preview
    
  2. Revise os registros HTTP(S) da Stackdriver para consultar os campos de solicitação HTTP, como url e cookie. Por exemplo, o requestUrl se compara positivamente ao ID da regra 941180 do CRS do ModSecurity:

    httpRequest:
      remoteIp: 104.133.0.95
      requestMethod: GET
      requestSize: '801'
      requestUrl: http://74.125.67.38/foo?document.cookie=1010"
      responseSize: '246'
      serverIp: 10.132.0.4
      status: 200
      userAgent: curl/7.35.0
    insertId: ajvis5ev4i60
    internalId:
      projectNumber: '895280006100'
    jsonPayload:
      '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
      enforcedSecurityPolicy:
        configuredAction: ACCEPT
        name: my-policy
        outcome: ACCEPT
        priority: 2147483647
        preconfiguredExprIds: [ 'owasp-crs-v030001-id941180-xss' ]
      statusDetails: response_sent_by_backend
    logName: projects/mydev-staging/logs/requests
    resource:
      labels:
        backend_service_name: ''
        forwarding_rule_name: mydev-forwarding-rule
        project_id: mydev-staging
        target_proxy_name: mydev-target-http-proxy
        url_map_name: mydev-url-map
        zone: global
      type: http_load_balancer
    severity: INFO
    timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Exclua o ID da regra 941180 do CRS do ModSecurity atualizando a regra na política de segurança do Google Cloud Armor.

    gcloud compute security-policies rules update 1000 \
       --security-policy my-policy \
       --expression "evaluatePreconfiguredExpr('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \
       --action deny-403 \
       --preview
    
  4. Revise os registros do Stackdriver novamente e desative o modo de visualização para implementar a regra.

Clientes com assinaturas negadas não são bloqueados ou negados

Se você estiver usando o Google Cloud Armor com Cloud CDN, as políticas de segurança serão aplicadas apenas para solicitações de conteúdo dinâmico, falhas de cache ou outras solicitações destinadas ao servidor de origem da CDN. As ocorrências em cache serão exibidas mesmo se a política de segurança downstream do Google Cloud Armor impedir que a solicitação chegue ao servidor de origem da CDN.

A seguir