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

Use estas instruções para criar políticas de segurança do Google Cloud Armor a fim de filtrar o tráfego de entrada destinado a balanceadores de carga HTTP(S) externos. Para informações conceituais sobre políticas de segurança, consulte a visão geral da política de segurança do Google Cloud Armor.

Para informações sobre como configurar o Google Cloud Armor no Google Kubernetes Engine (GKE), consulte a política de segurança do Google Cloud Armor na seção Como configurar recursos do Entrada por meio de parâmetros BackendConfig.

Antes de começar

Antes de configurar políticas de segurança, familiarize-se com os conceitos de balanceamento de carga HTTP(S).

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

As seguintes operações exigem o papel de gerenciamento de identidade e acesso (IAM) do administrador de segurança do Compute (roles/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 de administrador de rede do Compute (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 de 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.

Configure permissões de IAM para papéis personalizados

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

Permissão de IAM Métodos da 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 para balanceamento de carga HTTP(S)

Veja a seguir as etapas de alto nível para configurar as políticas de segurança do Google Cloud Armor a fim de ativar regras que permitam ou neguem tráfego para balanceadores de carga HTTP(S) externos:

  1. Crie uma política de segurança do Google Cloud Armor.
  2. Adicione regras à política de segurança com base em listas de endereços IP, expressões personalizadas ou conjuntos pré-configurados de expressões.
  3. Anexe a política de segurança a um serviço de back-end do balanceador de carga HTTP(S) externo do qual você quer controlar o acesso.
  4. Atualize a política de segurança 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 são aplicadas a diferentes serviços de back-end.
Exemplo em que duas políticas de segurança 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 sua 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 de back-end estiverem em várias regiões, a política de segurança do Google Cloud Armor associada ao serviço será aplicável às instâncias em todas as regiões. No exemplo anterior, a política de segurança 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 de configuração discutido na seção anterior.

Console

Configure a política para usuários externos:

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas, clique em Criar política.

  3. No campo Nome, use mobile-clients-policy.

  4. No campo Descrição, use Policy for external users.

  5. Em Ação de regra padrão, selecione Negar.

  6. Em Status negado, selecione 404 (não encontrado).

  7. Clique em Próxima etapa.

Adicione mais regras:

  1. Clique em Adicionar regra.
  2. No campo Descrição, use allow traffic from 192.0.2.0/24.
  3. Em Modo, selecione Modo básico (somente intervalos/endereços IP).
  4. No campo Correspondência, insira 192.0.2.0/24.
  5. Em Ação, selecione Permitir.
  6. No campo Prioridade, digite 1000.
  7. Clique em Concluído.
  8. Clique em Próxima etapa.

Aplicar a política nos destinos:

  1. Clique em Adicionar destino.
  2. Na lista Destino, selecione uma opção.
  3. Clique em Concluído.
  4. Clique em Criar política.

Configure a política para usuários internos:

  1. Na página Políticas, clique em Criar política.
  2. No campo Nome, use internal-users-policy.
  3. No campo Descrição, use Policy for internal test users.
  4. Em Ação de regra padrão, selecione Negar.
  5. Em Status negado, selecione 502 (gateway incorreto).
  6. Clique em Próxima etapa.

Adicione mais regras:

  1. Clique em Adicionar regra.
  2. No campo Descrição, use allow traffic from 198.51.100.0/24.
  3. Em Modo, selecione Modo básico (somente intervalos/endereços IP).
  4. No campo Correspondência, insira 198.51.100.0/24.
  5. Em Ação, selecione Permitir.
  6. Em Apenas visualização, marque a caixa de seleção Ativar.
  7. No campo Prioridade, digite 1000.
  8. Clique em Concluído.
  9. Clique em Próxima etapa.

Aplicar a política nos destinos:

  1. Clique em Adicionar destino.
  2. Na lista Destino, selecione uma opção.
  3. Clique em Concluído.
  4. Clique em Criar política.

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 das políticas de segurança 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:

    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 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 políticas de segurança do GKE

Use o procedimento de alto nível a seguir a fim de configurar as políticas de segurança do Google Cloud Armor para o GKE:

  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. Recupere a configuração do recurso Entrada para determinar quais serviços de back-end estão associados ao recurso:

    kubectl describe ingress INGRESS_NAME
    

    Os valores no campo backends da seção Annotations da saída são os nomes dos serviços de back-end usados.

  4. Com a API REST ou a ferramenta de linha de comando gcloud, anexe a política de segurança a cada um dos back-ends anotados na etapa anterior.

Se você excluir e recriar um recurso do Entrada do Kubernetes, precisará reaplicar a política de segurança aos novos serviços ou ao serviço de back-end. Para mais informações, consulte Recursos de entrada.

Como criar políticas, regras e expressões de segurança

É 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. Para mais informações sobre expressões, consulte a referência de linguagem de regras personalizadas do Google Cloud Armor.

Se você estiver criando uma regra ou expressão que usa códigos de país ou região ISO 3166-1 Alfa 2, o Google Cloud Armor tratará 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 que não estã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 faz a correspondência com solicitações se o valor decodificado em Base64 do cabeçalho user-id 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ê 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. Para ver um exemplo de como preencher os campos, consulte Como criar o exemplo.

Console

Crie políticas e regras de segurança do Google Cloud Armor e anexe uma política de segurança a um serviço de back-end:

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas, clique em Criar política.

  3. No campo Nome, digite o nome da política.

  4. Opcional: insira uma descrição da política.

  5. Por Ação de regra padrão , selecione Permitir para uma regra padrão que permite acesso ou selecione Negar para uma regra padrão que proíbe o acesso a um endereço IP 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 estiver criando uma regra Negar, selecione uma mensagem Status negado. 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ê está criando, clique em Próxima etapa.

Adicione mais regras:

  1. Clique em Adicionar regra.
  2. Opcional: insira uma descrição para a regra.
  3. Selecione o modo:

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

    • Modo básico: digite os endereços IP ou os intervalos de IP que serão correspondentes na regra.
    • Modo avançado: insira uma expressão ou subexpressões a serem avaliadas em relação às solicitações recebidas. Para mais informações sobre como escrever expressões, consulte a referência da linguagem de regras personalizadas.
  5. Em Ação, selecione Permitir ou Negar para permitir ou negar o tráfego, se a regra corresponder.

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

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

  8. Clique em Concluído.

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

Aplicar a política nos destinos:

  1. Clique em Adicionar destino.
  2. Na lista Destino, selecione uma opção.
  3. Para adicionar mais destinos, clique em Adicionar destino.
  4. Clique em Concluído.
  5. 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. Substitua NAME e DESCRIPTION pelo nome e pela descrição da política de segurança:

    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, use o comando gcloud compute security-policies rules create PRIORITY. Substitua PRIORITY pela prioridade atribuída à regra na política. Para mais informações sobre como a prioridade da regra funciona, consulte Ordem de avaliação da regra.

    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]
    

    Por exemplo, 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 a sinalização --expression para especificar uma condição personalizada na referência da linguagem de regras personalizadas. 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 que não estã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 user-id 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 compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "evaluatePreconfiguredExpr('sourceiplist-fastly')" \
        --action "allow"
    

Como listar 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 atuais usando a referência da linguagem de regras personalizadas.

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 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 políticas de segurança

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

Console

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Para visualizar uma política específica, acesse a lista de políticas e clique no nome dela na lista de Políticas de segurança.

gcloud

gcloud compute security-policies list

Exemplo:

gcloud compute security-policies list
NAME
my-policy

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

Como atualizar políticas de segurança

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

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Para atualizar uma política específica, na página Políticas de segurança, na lista de políticas, clique em Menu da política que você quer atualizar.

    • Para atualizar a descrição da política da ação da regra padrão, selecione Editar, faça as alterações desejadas e clique em Atualizar.
    • Para adicionar uma regra, selecione Adicionar regra e siga as instruções em Como adicionar regras a uma política de segurança.
    • Para alterar o serviço de back-end de destino da política, selecione Aplicar política ao destino, clique em Adicionar destino, selecione um destino e clique em Adicionar.

gcloud

Para atualizar uma política de segurança, use as seguintes instruções da ferramenta de linha de comando gcloud:

Como exportar políticas de segurança

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

    No exemplo a seguir, a política de segurança my-policy é exportada 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 importá-lo de volta para o Google Cloud usando o comando import.

Como importar políticas de segurança

É 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, você precisa atualizar as regras individualmente usando o procedimento Como atualizar uma única regra em uma política de segurança. Se preferir, atualize todos de uma só vez com o procedimento Como atualizar atomicamente várias regras em um procedimento de política de segurança.

gcloud

Para importar políticas de segurança, use o comando gcloud compute security-policies import NAME. Substitua NAME pelo nome da política de segurança 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

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

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, ao lado do nome da política que você quer excluir, marque a caixa de seleção.

  3. No canto superior direito da página, clique em Excluir.

gcloud

Use gcloud compute security-policies delete NAME. Substitua NAME pelo nome da política de segurança:

gcloud compute security-policies delete NAME

Como anexar uma política de segurança 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 pode ser anexada a mais de um serviço de back-end, mas um serviço de back-end pode ter somente uma política de segurança anexada.

Console

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, clique no nome da política de segurança. 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. Na lista Destino, selecione uma opção e clique em Adicionar.

gcloud

Use o comando gcloud compute backend-services:

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

Como remover uma política de segurança 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

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, clique no nome da política de segurança. 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. Na mensagem Remover destino, clique em Remover.

gcloud

Use o comando gcloud compute backend-services:

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

Como adicionar regras a uma política de segurança

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

Console

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida.

  3. No meio da página, clique na guia Regras.

  4. Clique em Adicionar regra.

  5. Opcional: insira uma descrição para a regra.

  6. Selecione o modo:

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

    • Modo básico: insira de um (1) a cinco (5) intervalos de endereços IP para que correspondam à regra.
    • Modo avançado: insira uma expressão ou subexpressões a serem avaliadas em relação às solicitações recebidas. Para saber mais sobre como gravar as expressões e ler os exemplos a seguir, consulte a referência da linguagem de regras personalizadas.

      • 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 que não estã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 faz a correspondência com solicitações se o valor decodificado em Base64 do cabeçalho user-id 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')
        
  8. Em Ação, selecione Permitir ou Negar.

  9. Se você estiver criando uma regra de negação, selecione uma mensagem Status negado.

  10. Se você quiser ativar o modo de visualização da regra, marque a caixa de seleção Ativar.

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

  12. Clique em Add.

gcloud

Use o comando gcloud compute security-policies rules create PRIORITY. Substitua PRIORITY pela 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

Por exemplo, 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 a sinalização --expression para especificar uma condição na referência da linguagem de regras personalizadas. 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 que não estã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 user-id 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

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

Console

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida, e as regras da política são listadas na guia Regras no meio da página.

gcloud

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

gcloud compute security-policies describe NAME \

Use o seguinte comando gcloud para descrever uma regra com a prioridade especificada na política de segurança especificada:

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 my-policy:

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

Saída:

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 em uma política de segurança

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 Como atualizar atomicamente várias regras em uma política de segurança.

Console

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida.

  3. No meio da página, clique na guia Regras.

  4. Ao lado da regra que você quer atualizar, clique em Editar. A página Editar regra é exibida.

  5. 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. Só é possível atualizar uma política de segurança 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"

Para mais informações sobre esse comando, consulte gcloud compute security-policies rules update.

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

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

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 para um arquivo JSON ou YAML e modifique-a. Use o arquivo modificado para criar uma nova política de segurança e troque a política de segurança dos 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 excluir regras de uma política de segurança

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

Console

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida.

  3. No meio da página, na guia Regras, marque a caixa de seleção ao lado da regra a ser excluída.

  4. Clique em Excluir.

gcloud

Use este comando para remover uma regra com a prioridade especificada de uma política de segurança designada. É possível modificar somente uma política de segurança por vez, mas excluir várias regras de uma só vez:

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

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

Como ver registros

É possível ver os registros de uma política de segurança do Google Cloud Armor somente no Console do Google Cloud.

Console

  1. No Console do Google Cloud, acesse a página Segurança de rede.

    Acesse a página Segurança de rede

  2. Na página Políticas de segurança, na linha de uma política de segurança, clique em Menu da política com os registros que você quer ver.

  3. Selecione Ver registros.

A seguir