Usar a geração de registros de solicitações

Os registros por solicitação do Google Cloud Armor para o nome da política de segurança, prioridade de regra de correspondência, ação associada e informações relacionadas são registrados como parte da geração de registros para balanceadores de carga de aplicativo externos e balanceadores de carga de rede proxy externos. A geração de registros para novos serviços de back-end é desativada por padrão. Portanto, você precisa ativar a geração de registros para registrar informações completas de geração de registros do Google Cloud Armor.

Os registros do Google Cloud Armor fazem parte dos registros do Cloud Load Balancing. Isso significa que a geração de registros do Google Cloud Armor está sujeita à taxa de amostragem de registros configurada para o balanceador de carga. Se você reduzir a taxa de amostragem do balanceador de carga, a amostragem dos registros de solicitações do Google Cloud Armor será realizada de acordo com essa taxa reduzida. Além disso, se você usar a referência de serviço entre projetos, os registros serão gerados no projeto host ou de serviço que inclui o front-end e o mapa de URL do balanceador de carga. Portanto, recomendamos que os administradores no projeto de front-end concedam aos administradores no projeto de back-end permissões para ler registros e métricas.

Usando a geração de registros, é possível ver todas as solicitações avaliadas por uma política de segurança do Google Cloud Armor e o resultado ou a ação realizada. 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 de um balanceador de carga de aplicativo externo, consulte esta página. Para o balanceador de carga de rede de proxy externo, é possível usar os comandos do Google Cloud CLI conforme listado na página anterior Geração de registros e monitoramento do balanceador de carga de aplicativo externo. Não é possível ativar a geração de registros para o balanceador de carga de rede do proxy externo usando o console do Google Cloud.

Além disso, é possível definir diferentes níveis de registro para ajudar a avaliar se as políticas de segurança e suas regras estão funcionando conforme o esperado. Para informações completas, consulte Registro detalhado.

Entradas de registro da política de segurança

As entradas de registro a seguir, exibidas no Explorador de registros, são destinadas à geração de registros de regras e à política de segurança do Google Cloud Armor. As entradas incluem a seguinte estrutura em jsonPayload: Os detalhes da solicitação HTTP aparecem na mensagem httpRequest.

  • statusDetails (string): uma descrição textual do código de resposta.
    • redirected_by_security_policy: a solicitação foi redirecionada por uma regra de redirecionamento, GOOGLE_RECAPTCHA ou EXTERNAL_302.
    • denied_by_security_policy: uma solicitação foi negada por um balanceador de carga devido a uma política de segurança do Google Cloud Armor.
    • body_denied_by_security_policy: um corpo de solicitação foi negado pelo balanceador de carga devido a uma política de segurança do Google Cloud Armor.
  • enforcedSecurityPolicy: a regra da política de segurança que foi aplicada.
    • name (string): nome da política de segurança
    • priority (número): a prioridade da regra correspondente na política de segurança
    • adaptiveProtection: informações sobre a regra da Proteção adaptável implantada automaticamente, se aplicável.
      • autoDeployAlertId: o ID do alerta dos eventos que a Proteção adaptável detectou.
    • configuredAction (string): o nome da ação configurada na regra correspondente, por exemplo:ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302 e THROTTLE (para uma regra de limitação), RATE_BASED_BAN (para uma regra de proibição baseada em taxa)
    • rateLimitAction: informações sobre a ação de limite de taxa quando há correspondência com uma regra de proibição baseada em taxa ou com uma regra de limitação.
      • key (string): valor da chave de limite de taxa (até 32 bytes). Este campo é omitido quando o tipo de chave é ALL, se o tipo de chave é HTTP-HEADER ou HTTP-COOKIE e o cabeçalho ou cookie especificado não está presente na solicitação.
      • outcome (string): os valores possíveis são os seguintes:
        • "RATE_LIMIT_THRESHOLD_CONFORM" quando está abaixo do limite de taxa configurado
        • "RATE_LIMIT_THRESHOLD_EXCEED" quando ultrapassa o limite de taxa configurado.
        • "BAN_THRESHOLD_EXCEED" quando ultrapassa o limite de banimento configurado.
    • outcome (string): o resultado da execução da ação configurada, por exemplo, ACCEPT, DENY, REDIRECT e EXEMPT.
    • preconfiguredExprIds (string): IDs de todas as expressões de regra WAF pré-configuradas que acionaram a regra.
    • threatIntelligence: informações sobre as listas de endereços IP correspondentes do Threat Intelligence, se aplicável.
      • categories: (string) os nomes da lista de endereços IP correspondentes.
  • previewSecurityPolicy: preenchido se uma solicitação corresponder a uma regra configurada para visualização (presente apenas quando uma regra de visualização tiver prioridade sobre a aplicada).
    • name (string): nome da política de segurança
    • priority (número): a prioridade da regra correspondente na política de segurança
    • configuredAction (string): o nome da ação configurada na regra correspondente, por exemplo:ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302 e THROTTLE (para uma regra de limitação), RATE_BASED_BAN (para uma regra de proibição baseada em taxa)
    • rateLimitAction: informações sobre a ação de limite de taxa quando há correspondência com uma regra de proibição baseada em taxa ou com uma regra de limitação.
      • key (string): valor da chave de limite de taxa (até 32 bytes). Este campo é omitido quando o tipo de chave é ALL, se o tipo de chave for HTTP-HEADER ou HTTP-COOKIE e o cabeçalho ou cookie especificado não estiver presente na solicitação.
      • outcome (string): os valores possíveis são os seguintes:
        • "RATE_LIMIT_THRESHOLD_CONFORM" quando está abaixo do limite de taxa configurado
        • "RATE_LIMIT_THRESHOLD_EXCEED" quando ultrapassa o limite de taxa configurado.
        • "BAN_THRESHOLD_EXCEED" quando ultrapassa o limite de banimento configurado.
    • outcome (string): o resultado da execução da configuração.
    • outcome (string): o resultado da execução da ação configurada, por exemplo, ACCEPT, DENY, REDIRECT e EXEMPT.
    • preconfiguredExprIds (string): IDs de todas as expressões de regra WAF pré-configuradas que acionaram a regra.
    • threatIntelligence: informações sobre as listas de endereços IP correspondentes do Threat Intelligence, se aplicável.
      • categories: (string) os nomes da lista de endereços IP correspondentes.
  • enforcedEdgeSecurityPolicy (Visualização): a regra da política de segurança de borda que foi aplicada.
    • name (string): nome da política de segurança
    • priority (número): a prioridade da regra correspondente na política de segurança
    • configuredAction (string): o nome da ação configurada na regra correspondente. Por exemplo, ALLOW, DENY.
    • outcome (string): o resultado da execução da ação configurada, por exemplo, ACCEPT, DENY.
  • previewEdgeSecurityPolicy (Visualização): preenchido se uma solicitação corresponder a uma regra de política de segurança de borda configurada para visualização (presente apenas quando uma regra de visualização teria prioridade sobre a aplicada).
    • name (string): nome da política de segurança
    • priority (número): a prioridade da regra correspondente na política de segurança
    • configuredAction (string): o nome da ação configurada na regra correspondente. Por exemplo, ALLOW, DENY.
    • outcome (string): o resultado da execução da ação configurada, por exemplo, ACCEPT, DENY.

Registro detalhado

Pode ser difícil saber por que uma regra WAF pré-configurada foi acionada por uma solicitação específica. Os registros de eventos padrão do Google Cloud Armor contêm a regra que foi acionada, bem como a subassinatura. No entanto, talvez seja necessário identificar os detalhes da solicitação recebida que acionou a regra para solucionar problemas, validar ou ajustar a regra.

É possível alterar o nível de detalhes registrados para uma política usando a sinalização --log-level. Essa sinalização pode ter os valores NORMAL ou VERBOSE:

--log-level=[NORMAL | VERBOSE]

Exemplo:

gcloud compute security-policies update ca-policy-1 \
    --log-level=VERBOSE

Recomendamos que você ative o registro detalhado ao criar uma política, fazer alterações ou solucionar problemas.

Valores registrados quando o registro detalhado está ativado

Quando o registro detalhado está ativado, mais informações são registradas no registro de solicitação de balanceamento de carga que é enviado para o Cloud Logging. Os seguintes campos adicionais aparecem no registro de solicitação quando o registro detalhado está ativado:

  • matchedFieldType (string): é o tipo de campo que gera a correspondência.

    • ARG_NAMES
    • ARG_VALUES
    • BODY

      • Quando o campo BODY está no registro, significa que todo o corpo da postagem corresponde a uma regra.
    • COOKIE_VALUES

    • COOKIE_NAMES

    • FILENAME

    • HEADER_VALUES

    • RAW_URI

    • REFERER

    • REQUEST_LINE

    • URI

    • USER_AGENT

    • HEADER_NAMES

    • ARGS_GET

    • X_FILENAME

    • ARG_NAME_COUNT

    • TRANSFER_ENCODING

    • REQUEST_METHOD

  • matchedFieldName (string): se isso corresponder à parte do valor de um par de chave-valor, o valor da chave será armazenado nesse campo. Caso contrário, ele estará vazio.

  • matchedFieldValue (string): um prefixo de até 16 bytes para a parte do campo que causa a correspondência.

  • matchedFieldLength (número inteiro): o comprimento total do campo.

  • matchedOffset (número inteiro): o deslocamento inicial no campo que causa a correspondência.

  • matchedLength (inteiro): a duração da correspondência.

Por exemplo, é possível enviar essa solicitação para um projeto em que as regras WAF de injeção SQL estejam ativadas:

curl http://IP_ADDR/?sql_table=abc%20pg_catalog%20xyz

A entrada no Explorador de registros seria assim:

enforcedSecurityPolicy: {
 name: "user-staging-sec-policy"
 priority: 100
 configuredAction: "DENY"
 outcome: "DENY
 preconfiguredExprIds: [
   0: "owasp-crs-v030001-id942140-sqli"
  ]
matchedFieldType: "ARG_VALUES"
matchedFieldName: "sql_table"
matchedFieldValue: "pg_catalog"
matchedFieldLength: 18
matchedOffset: 4
matchedLength: 10
}

Como manter a privacidade quando o registro detalhado está ativado

Quando você usa o registro detalhado, o Google Cloud Armor registra snippets dos elementos das solicitações recebidas que acionaram uma determinada regra WAF pré-configurada. Esses snippets podem conter partes de cabeçalhos de solicitação, parâmetros de solicitação ou elementos do corpo do POST. É possível que um snippet contenha dados sensíveis, como um endereço IP ou outros dados sensíveis da solicitação recebida, dependendo do que está nos cabeçalhos ou no corpo da solicitação e do que aciona a regra WAF.

Ao ativar a geração de registros detalhados, você corre o risco de acumular dados potencialmente sensíveis nos registros do Logging. Recomendamos que você ative o registro detalhado apenas durante a criação e validação da regra ou para a solução de problemas. Durante as operações normais, recomendamos que você mantenha o registro detalhado desativado.

Como visualizar 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 as políticas do Google Cloud Armor.

    Acessar as políticas do Google Cloud Armor

  2. Clique em Ações.

  3. Selecione Ver registros.

Solicitar geração de registros de dados

Quando usado com o Google Cloud Armor, o jsonPayload tem o seguinte campo extra:

  • securityPolicyRequestData: dados relativos à solicitação enquanto estão sendo processados por uma política de segurança, independentemente de qual regra será correspondida.
    • recaptchaActionToken: dados relacionados a um token de ação do reCAPTCHA Enterprise.
      • score (float): uma pontuação de legitimidade do usuário incorporada em um token de ação do reCAPTCHA Enterprise. Presente apenas quando um token de ação do reCAPTCHA Enterprise é anexado à solicitação e decodificado com base em uma regra de política de segurança. Para mais informações, consulte Aplicar a avaliação do reCAPTCHA Enterprise.
    • recaptchaSessionToken: dados relacionados a um token de sessão reCAPTCHA Enterprise.
      • score (float): uma pontuação de legitimidade do usuário incorporada em um token de sessão do reCAPTCHA Enterprise. Presente apenas quando um token de sessão do reCAPTCHA Enterprise é anexado à solicitação e é decodificado com base em uma regra de política de segurança.
    • tlsJa3Fingerprint: uma impressão digital de TTL/SSL do JA3 se o cliente se conectar usando HTTPS, HTTP/2 ou HTTP/3. Presente apenas se a impressão digital estiver disponível e houver uma política de segurança que avalie a solicitação, independentemente de uma expressão na política corresponder à solicitação.

Exemplos de registro

Veja a seguir um exemplo de detalhes de registro para uma regra de limitação que bloqueia uma solicitação:

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "DENY"
  rateLimitAction: {
    key:"sample-key"
    outcome:"RATE_LIMIT_THRESHOLD_EXCEED"
  }
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"

Veja a seguir um exemplo de detalhes de registro para uma regra de proibição baseada em taxa que bloqueia uma solicitação:

jsonPayload: {
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 enforcedSecurityPolicy: {
  priority: 150
  name: "sample-prod-policy"
  outcome: "DENY"
  configuredAction: "RATE_BASED_BAN"
  rateLimitAction: {
    key:"sample-key"
    outcome:"BAN_THRESHOLD_EXCEED"
  }
 }
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

A seguir

Saiba mais sobre a solução de problemas do Google Cloud Armor.