Usa el registro de solicitudes

Los registros por solicitud de Google Cloud Armor para el nombre de la política de seguridad, la prioridad de las reglas de coincidencia, la acción asociada y la información relacionada se registran como parte del registro de los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de red del proxy externos. El registro para los servicios de backend nuevos está inhabilitado de forma predeterminada, por lo que debes habilitar el registro a fin de ingresar la información de registro completa para Google Cloud Armor.

Los registros de Google Cloud Armor son parte de los registros de Cloud Load Balancing. Esto significa que la generación de registros de Google Cloud Armor está sujeta a la tasa de muestreo de registros configurada para tu balanceador de cargas. Si reduces la tasa de muestreo de tu balanceador de cargas, los registros de solicitudes de Google Cloud Armor se muestrearán a esa tasa reducida. Además, si usas referencias de servicios entre proyectos, los registros se generan en el proyecto host o de servicio que incluye el frontend y el mapa de URL del balanceador de cargas. Por lo tanto, recomendamos que los administradores en el proyecto de frontend otorguen permisos para leer registros y métricas a los administradores en el proyecto de backend.

Mediante el registro, puedes ver cada solicitud evaluada por una política de seguridad de Google Cloud Armor y el resultado o la acción realizados. Por ejemplo, para ver las solicitudes rechazadas, puedes usar filtros como jsonPayload.enforcedSecurityPolicy.outcome="DENY" o jsonPayload.statusDetails="denied_by_security_policy".

Para habilitar el registro de un balanceador de cargas de aplicaciones externo, consulta Registro y supervisión del balanceador de cargas de aplicaciones externo. Para el balanceador de cargas de red del proxy externo, puedes usar los comandos de Google Cloud CLI que se indican en la página anterior de registro y supervisión del balanceador de cargas de aplicaciones externo. No puedes habilitar el registro para el balanceador de cargas de red del proxy externo con la consola de Google Cloud.

Además, puedes establecer diferentes niveles de registro para evaluar si tus políticas de seguridad y sus reglas funcionan según lo previsto. Para obtener información completa, consulta Registro detallado.

Entradas de registro de la política de seguridad

Las siguientes entradas de registro en el explorador de registros son para la política de seguridad y el registro de reglas de Google Cloud Armor. Las entradas incluyen la siguiente estructura en jsonPayload. Los detalles de la solicitud HTTP aparecen en el mensaje httpRequest.

  • statusDetails (string): Una descripción textual del código de respuesta.
    • redirected_by_security_policy: La solicitud se redireccionó mediante una regla de redireccionamiento; ya sea GOOGLE_RECAPTCHA o EXTERNAL_302.
    • denied_by_security_policy: El balanceador de cargas rechazó una solicitud debido a una política de seguridad de Google Cloud Armor.
    • body_denied_by_security_policy: El balanceador de cargas rechazó el cuerpo de una solicitud debido a una política de seguridad de Google Cloud Armor.
  • enforcedSecurityPolicy: Es la regla de la política de seguridad que se aplicó.
    • name (string): El nombre de la política de seguridad.
    • priority (número): La prioridad de la regla coincidente en la política de seguridad.
    • adaptiveProtection: información sobre la regla de protección adaptable implementada de forma automática, si corresponde.
      • autoDeployAlertId: el ID de alerta de los eventos que detectó la protección adaptable.
    • configuredAction (string): el nombre de la acción configurada en la regla coincidente, por ejemplo: ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE (para una regla de limitación), RATE_BASED_BAN (para una regla de bloqueo basada en la frecuencia).
    • rateLimitAction: Información sobre la acción de límite de frecuencia cuando se detecta una coincidencia con una regla de limitación o una de bloqueo basada en la velocidad.
      • key (string): Valor de la clave de límite de frecuencia (hasta 32 bytes). Este campo se omite si el tipo de clave es ALL, o si el tipo de clave es HTTP-HEADER o HTTP-COOKIE y el encabezado o cookie especificado no está presente en la solicitud.
      • outcome (string): Los valores posibles son los siguientes:
        • "RATE_LIMIT_THRESHOLD_CONFORM" si está por debajo del umbral del límite de frecuencia configurado.
        • "RATE_LIMIT_THRESHOLD_EXCEED" si supera el umbral del límite de frecuencia configurado.
        • "BAN_THRESHOLD_EXCEED" si supera el umbral de bloqueo configurado.
    • outcome (string): El resultado de la ejecución de la acción configurada, por ejemplo, ACCEPT, DENY, REDIRECT, EXEMPT.
    • preconfiguredExprIds (string): El ID de todas las expresiones de reglas de WAF preconfiguradas que activaron la regla.
    • threatIntelligence: Es la información sobre las listas de direcciones IP coincidentes de Threat Intelligence, si corresponde.
      • categories: (string) son los nombres de las listas de direcciones IP coincidentes.
  • previewSecurityPolicy: Se propaga si una solicitud coincide con una regla configurada para la vista previa (presente solo cuando una regla de vista previa hubiera tenido prioridad sobre la regla aplicada).
    • name (string): el nombre de la política de seguridad
    • priority (número): La prioridad de la regla coincidente en la política de seguridad.
    • configuredAction (string): el nombre de la acción configurada en la regla coincidente, por ejemplo: ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE (para una regla de limitación), RATE_BASED_BAN (para una regla de bloqueo basada en la frecuencia).
    • rateLimitAction: Información sobre la acción de límite de frecuencia cuando se detecta una coincidencia con una regla de limitación o una de bloqueo basada en la velocidad.
      • key (string): Valor de la clave de límite de frecuencia (hasta 32 bytes). Este campo se omite si el tipo de clave es ALL, o si el tipo de clave es HTTP-HEADER o HTTP-COOKIE y el encabezado o cookie especificado no está presente en la solicitud.
      • outcome (string): Los valores posibles son los siguientes:
        • "RATE_LIMIT_THRESHOLD_CONFORM" si está por debajo del umbral del límite de frecuencia configurado.
        • "RATE_LIMIT_THRESHOLD_EXCEED" si supera el umbral del límite de frecuencia configurado.
        • "BAN_THRESHOLD_EXCEED" si supera el umbral de bloqueo configurado.
    • outcome (string): El resultado de la ejecución de la acción configurada.
    • outcome (string): El resultado de la ejecución de la acción configurada, por ejemplo, ACCEPT, DENY, REDIRECT, EXEMPT.
    • preconfiguredExprIds (string): El ID de todas las expresiones de reglas de WAF preconfiguradas que activaron la regla.
    • threatIntelligence: Es la información sobre las listas de direcciones IP coincidentes de Threat Intelligence, si corresponde.
      • categories: (string) son los nombres de las listas de direcciones IP coincidentes.
  • enforcedEdgeSecurityPolicy (vista previa): La regla de la política de seguridad perimetral que se aplicó.
    • name (string): El nombre de la política de seguridad.
    • priority (número): La prioridad de la regla coincidente en la política de seguridad.
    • configuredAction (string): El nombre de la acción configurada en la regla coincidente, por ejemplo, ALLOW, DENY.
    • outcome (string): El resultado de la ejecución de la acción configurada, por ejemplo, ACCEPT, DENY.
  • previewEdgeSecurityPolicy (Vista previa): Se propaga si una solicitud coincide con una regla de política de seguridad perimetral configurada para vista previa (presente solo cuando una regla de vista previa hubiera tenido prioridad sobre la regla aplicada).
    • name (string): El nombre de la política de seguridad.
    • priority (número): La prioridad de la regla coincidente en la política de seguridad.
    • configuredAction (string): El nombre de la acción configurada en la regla coincidente, por ejemplo, ALLOW, DENY.
    • outcome (string): El resultado de la ejecución de la acción configurada, por ejemplo, ACCEPT, DENY.

Registro detallado

Puede ser difícil saber por qué una solicitud específica activó una regla de WAF preconfigurada. Los registros de eventos predeterminados de Google Cloud Armor contienen la regla que se activó, además de la firma secundaria. Sin embargo, es posible que debas identificar los detalles de la solicitud entrante que activó la regla para solucionar problemas, validar o realizar ajustes.

Puedes cambiar el nivel de detalle registrado de una política mediante la marca --log-level. Esta marca puede tener los valores NORMAL o VERBOSE:

--log-level=[NORMAL | VERBOSE]

Por ejemplo:

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

Te recomendamos habilitar el registro detallado cuando crees una política, realices cambios en ella o soluciones sus problemas.

Valores que se registran cuando se habilita el registro detallado

Cuando el registro detallado está habilitado, se registra información adicional en el registro de solicitud de balanceo de cargas HTTP(S) que se envía a Cloud Logging. Los siguientes campos adicionales aparecen en el registro de solicitud cuando el registro detallado está habilitado:

  • matchedFieldType (string): este es el tipo de campo que causa la coincidencia.

    • ARG_NAMES
    • ARG_VALUES
    • BODY

      • Cuando el campo BODY está en el registro, significa que todo el cuerpo de POST coincide con una regla.
    • 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): si esto coincide con la parte del valor de un par clave-valor, el par clave-valor se almacena en este campo. De lo contrario, está vacío.

  • matchedFieldValue (string): un prefijo de hasta 16 bytes para la parte del campo que causa la coincidencia.

  • matchedFieldLength (número entero): la longitud total del campo.

  • matchedOffset (número entero): el desplazamiento de inicio dentro del campo que causa la coincidencia.

  • matchedLength (número entero): la longitud de la coincidencia.

Por ejemplo, puedes enviar esta solicitud a un proyecto en el que las reglas de WAF de inserción de SQL estén habilitadas:

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

La entrada en el Explorador de registros se vería como la siguiente:

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
}

Mantén la privacidad cuando el registro detallado esté activado

Cuando usas el registro detallado, Google Cloud Armor registra los fragmentos de los elementos de las solicitudes entrantes que activaron una regla de WAF preconfigurada específica. Estos fragmentos pueden contener partes de encabezados de la solicitud, parámetros de solicitud o elementos del cuerpo de POST. Es posible que un fragmento contenga datos sensibles, como una dirección IP o cualquier otro dato sensible de la solicitud entrante, según lo que haya en el encabezado o el cuerpo de la solicitud y lo que active la regla de WAF.

Si habilitas el registro detallado, ten en cuenta que existe el riesgo de acumular datos potencialmente sensibles en los registros en Logging. Te recomendamos que habilites el registro detallado solo durante la creación y validación de la regla o para la solución de problemas. Durante las operaciones normales, te recomendamos que dejes el registro detallado inhabilitado.

Visualiza los registros

Puedes ver los registros de una política de seguridad de Google Cloud Armor solo en la consola de Google Cloud.

Console

  1. En la consola de Google Cloud, ve a Políticas de Google Cloud Armor.

    Ir a las políticas de Google Cloud Armor

  2. Haz clic en Acciones.

  3. Selecciona Ver registros.

Solicita el registro de datos

Cuando se usa con Google Cloud Armor, jsonPayload tiene el siguiente campo adicional:

  • securityPolicyRequestData: datos que pertenecen a la solicitud mientras se procesa mediante una política de seguridad, sin importar qué regla coincide finalmente.
    • recaptchaActionToken: Datos relacionados con un token de acción de reCAPTCHA Enterprise.
      • score (float): Una puntuación de legitimidad del usuario incorporada en un token de acción de reCAPTCHA Enterprise. Solo está presente cuando un token de acción de reCAPTCHA Enterprise se adjunta a la solicitud y se decodifica de forma correcta en función de una regla de política de seguridad. Para obtener más información, consulta Aplica una evaluación de reCAPTCHA Enterprise.
    • recaptchaSessionToken: Datos relacionados con un token de sesión de reCAPTCHA Enterprise.
      • score (float): Una puntuación de legitimidad del usuario incorporada en un token de reCAPTCHA Enterprise. Solo está presente cuando un token de sesión de reCAPTCHA Enterprise se adjunta con la solicitud y se decodifica de forma correcta en función de una regla de política de seguridad.
    • tlsJa3Fingerprint: Es una huella digital de TTL/SSL JA3 si el cliente se conecta mediante HTTPS, HTTP/2 o HTTP/3. Solo está presente si la huella digital está disponible y hay una política de seguridad que evalúa la solicitud (sin importar si una expresión en la política coincide con la solicitud).

Ejemplos de registros

El siguiente es un ejemplo de detalles de registro de una regla de regulación que bloquea una solicitud:

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"

El siguiente es un ejemplo de los detalles de registro de una regla de bloqueo basada en la tarifa que bloquea una solicitud:

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"

¿Qué sigue?

Obtén más información para solucionar problemas de Google Cloud Armor.