¿Cómo se formatean las métricas y los registros para la acción de la regla de recuento en AWS WAF?

Última actualización: 27/07/2022

He configurado AWS WAF y algunas de las reglas de mi ACL web están en la acción de recuento. ¿Cómo puedo analizar las métricas y registros de Amazon CloudWatch para las reglas de la acción de la regla de recuento?

Descripción corta

Puede usar la acción de la regla de recuento para probar las reglas antes de implementarlas con la configuración normal de la acción. AWS WAF evalúa las solicitudes con respecto a las reglas de la acción de la regla de recuento e informa de las coincidencias en las métricas, ejemplos de solicitudes y registros.

También puede usar la acción de la regla de recuento para solucionar problemas de reglas que generan falsos positivos. Los falsos positivos se producen cuando una regla o un grupo de reglas bloquea un tráfico que no se espera que se bloquee. Si identifica una regla que bloquea solicitudes que quiere permitir, puede actualizar la acción de esa regla para que realice un recuento. Esto impide que la regla actúe sobre las solicitudes. Para más información sobre cómo detectar y mitigar los falsos positivos, consulte ¿Cómo puedo detectar falsos positivos causados por reglas administradas de AWS y agregarlas a una lista segura?

Resolución

Para comprender cómo se formatean las métricas y registros para la acción de la regla de recuento, considere los tres escenarios siguientes:

  1. Establezca la acción de la regla para una regla personalizada en el modo de recuento.
  2. Establezca la acción de la regla para reglas individuales en el modo de recuento en un grupo de reglas administradas de AWS.
  3. Anule la acción de recuento de un grupo de reglas completo.

Establecer la acción de la regla para una regla personalizada en el modo de recuento

Ejemplo

Tiene una ACL web (Test1-ACL) que tiene una única regla personalizada (Geo-Count) con una acción de la regla de recuento. La regla Geo-Count cuenta la solicitud si esta se origina en Estados Unidos. Si la IP del cliente pertenece a un país diferente, la acción predeterminada de la ACL web con una acción Allow (Permitir) coincide.

A continuación, se incluye una representación JSON de esta regla:

{
  "Name": "Geo-Count",
  "Priority": 0,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "Geo-Count"
  }
}

Si la solicitud se origina en una IP de cliente ubicada en Estados Unidos, ocurre lo siguiente:

  • La solicitud se cuenta.
  • La métrica de CloudWatch para la regla personalizada Geo-Count muestra un punto de datos en la métrica CountedRequests.
    Nota: CloudWatch informa de la métrica CountedRequests solo cuando hay un valor distinto de cero. Para ver los datos, cambie la estadística a Sum (Suma) en la pestaña Graphed metrics (Métricas diagramadas) de la consola de CloudWatch.
  • Como Geo-Count es una regla personalizada con la acción de recuento, AWS WAF cuenta la solicitud.
  • A continuación, AWS WAF evalúa la solicitud con respecto a la acción predeterminada de la ACL web. Dado que la acción predeterminada de la ACL web está configurada como Allow (Permitir), se permite la solicitud.
  • Aparece un punto de datos para esta acción en la métrica AllowedRequests para la ACL web.

Para más información sobre las métricas y dimensiones incluidas en el espacio de nombres de AWS WAF, consulte AWS WAF metrics and dimensions (Métricas y dimensiones de AWS WAF).

Cuando se actualiza la acción de una regla personalizada para que sea de recuento, se considera que la regla no es de terminación desde una perspectiva de registro. Por lo tanto, si la solicitud coincide con una regla personalizada en el modo de recuento, se registran los siguientes campos:

  • nonTerminatingMatchingRules: la lista de reglas que no son de terminación que coinciden con la solicitud.
  • ruleId: el ID de la regla que coincidió con la solicitud y que no era de terminación.
  • action: siempre es COUNT (RECUENTO).
  • ruleMatchDetails: información detallada sobre la regla que coincidió con la solicitud. Este campo solo se completa para las instrucciones de reglas de coincidencia de inyección de código SQL (SQLi) y scripting entre sitios (XSS).

Si la regla Geo-Count coincide con la solicitud, los registros muestran los detalles de nonTerminatingMatchingRules como se muestra en el siguiente ejemplo:

"nonTerminatingMatchingRules": [{
  "ruleId": "Geo-Count",
  "action": "COUNT",
  "ruleMatchDetails": [

  ]
}]

Para más información sobre todos los campos de registro posibles, consulte Log fields (Campos de registro).

A fin de activar el registro para una ACL web, consulte Managing logging for a web ACL (Administración de registros para una ACL web).

Establecer la acción de la regla para reglas individuales en el modo de recuento en un grupo de reglas administradas de AWS

Para anular las acciones de las reglas dentro de un grupo de reglas, puede configurarlas para que realicen un recuento para algunas o todas las reglas. En el caso de las acciones de las reglas configuradas dentro del grupo de reglas para realizar algo distinto de un recuento, la anulación cambia esa acción para que solo se cuenten las solicitudes que coincidan.

Si una solicitud web coincide con la regla, AWS WAF procesa la coincidencia como un recuento y luego continúa evaluando las reglas posteriores en el grupo de reglas.

Para más información sobre cómo configurar la acción de la regla para que realice un recuento en un grupo de reglas, consulte Setting rule actions to count in a rule group (Configurar acciones de regla para que cuenten en un grupo de reglas).

Ejemplo

Tiene una ACL web (Test2-ACL) que incluye un grupo de reglas administradas de AWS (AWSManagedRulesKnownBadInputsRuleSet). No hay otras reglas en esta ACL web y la acción predeterminada de la ACL web está configurada con una acción Allow (Permitir).

Actualice la regla Log4JRCE dentro del grupo de reglas AWSManagedRulesKnownBadInputsRuleSet a una acción de recuento. Ahora bien, si un componente (como un URI, una cadena de consulta, etc.) en la solicitud del cliente tiene una vulnerabilidad de Log4j, entonces dicha solicitud se cuenta mediante la regla Log4JRCE. Si la solicitud no coincide con ninguna otra regla en el grupo de reglas, entonces se permite mediante la acción predeterminada de la ACL web.

A continuación, se incluye una representación JSON de esta regla:

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet",
      "ExcludedRules": [
        {
          "Name": "Log4JRCE"
        }
      ]
    }
  },
  "OverrideAction": {
    "None": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

Si configura la acción de la regla para contar las reglas dentro del grupo de reglas, estas reglas se consideran excluidas en el grupo de reglas. Si tiene las métricas activadas, recibe las métricas COUNT para cada regla excluida.

Si la solicitud coincide con la regla Log4JRCE, ocurre lo siguiente:

  • La solicitud se cuenta.
  • La métrica de CloudWatch para la regla Log4JRCE muestra un punto de datos en la métrica CountedRequests.

Si ninguna otra regla dentro de AWSManagedRulesKnownBadInputsRuleSet coincide con la solicitud, ocurre lo siguiente:

  • La solicitud se permite mediante la acción predeterminada de la ACL web.
  • Aparece un punto de datos en la métrica AllowedRequests para la ACL web.

Para las reglas excluidas, se capturan los siguientes campos en los registros de AWS WAF:

  • excludedRules: la lista de reglas en el grupo de reglas que ha excluido. La acción para estas reglas se establece como Count (Recuento).
  • exclusionType: un tipo que indica que la regla excluida tiene la acción Count (Recuento).
  • ruleId: el ID de la regla dentro del grupo de reglas que se excluye.

Si la regla Log4JRCE coincide con la solicitud, los registros muestran los detalles de excludedRules como se muestra en el siguiente ejemplo:

"ruleGroupList":[
  {
    "ruleGroupId":"AWS#AWSManagedRulesKnownBadInputsRuleSet",
    "terminatingRule":null,
    "nonTerminatingMatchingRules":[
      
      ],
    "excludedRules":[
      {
        "exclusionType":"EXCLUDED_AS_COUNT",
        "ruleId":"Log4JRCE"
      }
    ]
  }
]

Si una regla individual dentro de un grupo de reglas se actualiza a la acción de la regla de recuento, ocurre lo siguiente:

  • Los registros de la solicitud que coincida con esta regla no contarán con una acción de recuento para la regla del campo nonTerminatingMatchingRules.
  • Los registros de AWS WAF muestran esta regla en el campo excludedRules.

Anular la acción de recuento de un grupo de reglas completo

Para obtener información sobre cómo anular la acción de recuento de un grupo de reglas, consulte Overriding the resulting rule groups action to count (Anulación de la acción de recuento de los grupos de reglas resultantes).

Para obtener información sobre cómo anular la acción de recuento de un grupo de reglas, consulte Overriding a rule group's action to count (Anulación de la acción de recuento de un grupo de reglas).

Ejemplo

Tiene una ACL web (Test3-ACL) que incluye un grupo de reglas administradas de AWS (AWSManagedRulesKnownBadInputsRuleSet). No hay otras reglas en esta ACL web y la acción predeterminada de la ACL web es Allow (Permitir). Todas las reglas del grupo de reglas AWSManagedRulesKnownBadInputsRuleSet utilizan la acción predeterminada definida en la regla. Esto significa que las reglas dentro de este grupo de reglas no están configuradas para realizar un recuento. Sin embargo, la opción Override rule group action to count (Anular la acción de recuento del grupo de reglas) está activada.

A continuación, se incluye una representación JSON de esta regla:

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet"
    }
  },
  "OverrideAction": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

Si un componente (como un URI, una cadena de consulta, etc.) en la solicitud del cliente tiene una vulnerabilidad de Log4j, ocurre lo siguiente:

  • La solicitud se bloquea mediante la regla Log4JRCE.
  • Como la acción de bloqueo es de terminación, AWS WAF deja de evaluar el grupo de reglas y devuelve el resultado de la acción de terminación a la ACL web.
  • En este punto, la opción Override rule group action to count (Anular la acción de recuento del grupo de reglas) surte efecto. La acción de terminación del grupo de reglas se sustituye por un recuento.
  • AWS WAF continúa procesando el resto de las reglas en la ACL web.

Si una solicitud coincide con la regla Log4JRCE (o cualquier otra regla) dentro del grupo de reglas AWSManagedRulesKnownBadInputsRuleSet, ocurre lo siguiente:

  • CloudWatch muestra un punto de datos en la métrica CountedRequests correspondiente al nombre del grupo de reglas AWSManagedRulesKnownBadInputsRuleSet.
  • AWS WAF continúa procesando el resto de las reglas de la ACL web después de que se produzca la anulación. Por lo tanto, la solicitud se compara finalmente con la acción predeterminada de la ACL web. Esto se muestra como un punto de datos en la métrica AllowedRequests para la ACL web.
  • En los registros de AWS WAF, la solicitud coincidente contiene una acción de recuento en el campo nonTerminatingMatchingRules.
  • Además, ruleGroupList muestra la regla dentro del grupo de reglas que originalmente bloqueó la solicitud antes de que la acción de terminación se sustituyese por el recuento.
  • Si la regla Log4JRCE coincide con la solicitud, los registros muestran los detalles de ruleGroupList y nonTerminatingMatchingRules como se muestra en el siguiente ejemplo:
"ruleGroupList": [{
  "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet",
  "terminatingRule": {
      "ruleId": "Log4JRCE",
      "action": "BLOCK",
      "ruleMatchDetails": null
    },
  "nonTerminatingMatchingRules": [

  ],
    "excludedRules": null
  }
],
"rateBasedRuleList": [

],
"nonTerminatingMatchingRules": [{
    "ruleId": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
    "action": "COUNT",
    "ruleMatchDetails": [

  ]
}]

Basic handling of the rule and rule group actions in a web ACL (Gestión básica de las acciones de reglas y grupos de reglas en una ACL web)

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?