Configura el límite de frecuencia

Para proteger tus servicios contra ataques web y de denegación de servicio (DoS), puedes configurar políticas de seguridad de Google Cloud Armor para aplicar límites de frecuencia por cliente. En esta página, se describe cómo configurar acciones de restricción o basadas en la frecuencia, lo que te permite controlar la frecuencia con la que los clientes envían solicitudes para ayudar a prevenir el abuso y garantizar una asignación justa de recursos. Antes de configurar el límite de frecuencia, consulta la descripción general del límite de frecuencia.

Antes de comenzar

En las siguientes secciones, se explican todas las funciones y permisos de Identity and Access Management (IAM) necesarios para configurar las políticas de seguridad de Cloud Armor. Para los casos de uso de este documento, solo necesitas el permiso compute.securityPolicies.create.

Configura permisos de IAM para las políticas de seguridad de Cloud Armor

Las siguientes operaciones requieren Identity and Access Management (IAM) Administrador de seguridad de Compute (roles/compute.securityAdmin):

  • Configurar, modificar, actualizar y borrar una política de seguridad de Cloud Armor
  • Usar los siguientes métodos de la API:
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Un usuario con la función de administrador de red de Compute (roles/compute.networkAdmin) puede realizar las siguientes operaciones:

  • Establecer una política de seguridad de Cloud Armor para un servicio de backend
  • Usar los siguientes métodos de la API:
    • BackendServices setSecurityPolicy
    • BackendServices list (solo gcloud)

Los usuarios con la función de administrador de seguridad (roles/iam.securityAdmin) y la función de administrador de red de Compute (roles/compute.networkAdmin) pueden ver las políticas de seguridad de Cloud Armor con los métodos de la API SecurityPolicies get, list y getRule.

Configura permisos de IAM para funciones personalizadas

En la siguiente tabla, se enumeran los permisos básicos de las funciones de IAM, sus métodos de API asociados y las funciones que otorgan ese permiso.

Permisos de IAM Métodos de la API Funciones
compute.securityPolicies.create SecurityPolicies insert Administrador de seguridad de Compute (roles/compute.securityAdmin)
compute.securityPolicies.delete SecurityPolicies delete Administrador de seguridad de Compute (roles/compute.securityAdmin)
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
Administrador de seguridad (roles/iam.securityAdmin)
compute.securityPolicies.list SecurityPolicies list Administrador de seguridad (roles/iam.securityAdmin)
Ambos de los siguientes:
  • compute.securityPolicies.use
  • compute.backendServices.
    setSecurityPolicy
BackendServices
setSecurityPolicy
Administrador de red de Compute (roles/compute.networkAdmin)
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Administrador de seguridad de Compute (roles/compute.securityAdmin)

Reglas de regulación basadas en frecuencias

Las reglas para la limitación basada en la velocidad tienen el siguiente formato en Google Cloud CLI:

gcloud compute security-policies rules create PRIORITY \
    --security-policy=SECURITY_POLICY \
    {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
    --action "throttle" \
    --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
    --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
    --conform-action=[allow] \
    --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
    --exceed-redirect-type=[google-recaptcha|external-302] \
    --exceed-redirect-target=REDIRECT_URL \
    --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
    --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]

Límite de frecuencia en claves únicas

Por ejemplo, con el siguiente comando de la gcloud CLI, se crea una regla throttle con una prioridad de 105 con un límite de frecuencia de 100 solicitudes cada 60 segundos para cada dirección IP en 1.2.3.0/24. Las solicitudes que exceden el límite de regulación muestran un código de estado 429 Too Many Requests.

gcloud compute security-policies rules create 105 \
    --security-policy SECURITY_POLICY \
    --src-ip-ranges="1.2.3.0/24" \
    --action=throttle \
    --rate-limit-threshold-count=100 \
    --rate-limit-threshold-interval-sec=60 \
    --conform-action=allow \
    --exceed-action=deny-429 \
    --enforce-on-key=IP

Por ejemplo, con el siguiente comando de gcloud CLI, se crea una regla throttle con una prioridad de 110 con un límite de frecuencia de 10 solicitudes cada 60 segundos para cada valor único del encabezado HTTP User-Agent en todas las solicitudes provenientes de direcciones IP en 1.2.3.0/24. Las solicitudes que exceden el límite de regulación muestran un código de estado 429 Too Many Requests.

gcloud compute security-policies rules create 110 \
    --security-policy SECURITY_POLICY \
    --src-ip-ranges="1.2.3.0/24" \
    --action=throttle \
    --rate-limit-threshold-count=10 \
    --rate-limit-threshold-interval-sec=60 \
    --conform-action=allow \
    --exceed-action=deny-429 \
    --enforce-on-key=HTTP-HEADER \
    --enforce-on-key-name='User-Agent'

Por último, puedes emitir restricciones basadas en la tasa para los usuarios que tienen una cookie de exención de reCAPTCHA válida. Por ejemplo, el siguiente comando de la gcloud CLI crea una regla throttle con una prioridad de 115 con un límite de frecuencia de 20 solicitudes cada 5 minutos para cada cookie de exención de reCAPTCHA única en todas las solicitudes que tengan una cookie de exención de reCAPTCHA válida. Las solicitudes que exceden el límite de regulación se redireccionan para la evaluación de reCAPTCHA. Para obtener más información sobre las cookies de exención y la evaluación de reCAPTCHA, consulta la descripción general de la administración de bots de Cloud Armor.

gcloud compute security-policies rules create 115 \
    --security-policy SECURITY_POLICY \
    --expression="token.recaptcha_exemption.valid" \
    --action=throttle \
    --rate-limit-threshold-count=20 \
    --rate-limit-threshold-interval-sec=300 \
    --conform-action=allow \
    --exceed-action=redirect \
    --exceed-redirect-type=google-recaptcha \
    --enforce-on-key=HTTP-COOKIE \
    --enforce-on-key-name="recaptcha-ca-e"

Límite de frecuencia basado en huellas digitales JA4 y JA3

Puedes usar las huellas digitales JA4 y JA3 como claves de límite de frecuencia. En el siguiente ejemplo, se crea una regla throttle con una prioridad de 1000 con un límite de frecuencia de 20 solicitudes cada 5 minutos que coinciden con las solicitudes con la ruta de acceso /login, según la huella digital JA4 del cliente. Se rechazan las solicitudes que exceden el límite de regulación.

gcloud compute security-policies rules create 1000 \
    --security-policy SECURITY_POLICY \
    --expression "request.path.matches('/login')" \
    --action throttle \
    --rate-limit-threshold-count 20 \
    --rate-limit-threshold-interval-sec 300 \
    --conform-action allow \
    --exceed-action deny-429 \
    --enforce-on-key-configs tls-ja4-fingerprint

Límite de frecuencia basado en la dirección IP del usuario

Cuando recibes solicitudes que provienen de un proxy ascendente, puedes aplicar un límite de frecuencia basado en la dirección IP del cliente de origen. En el siguiente ejemplo, se crea una regla throttle con una prioridad de 1000 con un límite de frecuencia de 20 solicitudes cada 5 minutos que coinciden con las solicitudes con la ruta de acceso /login, según la dirección IP del cliente de origen. Se rechazan las solicitudes que exceden el límite de regulación.

gcloud compute security-policies rules create 1000 \
    --security-policy SECURITY_POLICY \
    --expression "request.path.matches('/login')" \
    --action throttle \
    --rate-limit-threshold-count 20 \
    --rate-limit-threshold-interval-sec 300 \
    --conform-action allow \
    --exceed-action deny-429 \
    --enforce-on-key-configs user-ip

Para obtener más información sobre la compatibilidad con la dirección IP del usuario, consulta la referencia del lenguaje de reglas.

Límite de frecuencia basado en varias claves

También puedes limitar el tráfico según varias claves de límite de frecuencia con la marca enforce-on-key-configs. Esta marca reemplaza la marca enforce-on-key y la marca enforce-on-key-name. La marca enforce-on-key-configs requiere una lista separada por comas de pares KEY=NAME; sin embargo, no es necesario proporcionar un nombre para algunas claves.

En el siguiente ejemplo, se crea una regla throttle para la política POLICY_NAME con una prioridad de 105 con un límite de frecuencia de 100 solicitudes cada 60 segundos para cada combinación de HTTP-PATH y site_id en todas las solicitudes provenientes de direcciones IP en 1.2.3.0/24. Las solicitudes que exceden el límite de regulación muestran un código de estado 429 Too Many Requests.

gcloud compute security-policies rules create 105 \
    --security-policy=POLICY_NAME \
    --src-ip-ranges="1.2.3.0/24" \
    --action=throttle \
    --rate-limit-threshold-count=100 \
    --rate-limit-threshold-interval-sec=60 \
    --conform-action=allow \
    --exceed-action=deny-429 \
    --enforce-on-key-configs="HTTP-PATH,HTTP-COOKIE=site_id"

Reglas de bloqueo basadas en tarifas

Las reglas para las prohibiciones basadas en tasas tienen el siguiente formato en gcloud CLI:

gcloud compute security-policies rules create PRIORITY \
    --security-policy=SECURITY_POLICY \
    {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
    --action "rate-based-ban" \
    --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
    --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
    --ban-duration-sec=BAN_DURATION_SEC \
    --ban-threshold-count=BAN_THRESHOLD_COUNT \
    --ban-threshold-interval-sec=BAN_THRESHOLD_INTERVAL_SEC \
    --conform-action=[allow] \
    --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
    --exceed-redirect-type=[google-recaptcha|external-302] \
    --exceed-redirect-target=REDIRECT_URL \
    --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
    --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]

Por ejemplo, con el siguiente comando de la gcloud CLI, se crea una regla de bloqueo basada en la tasa con prioridad 100 para cada dirección IP cuyas solicitudes coincidan con un encabezado fish con valor tuna y se prohíba realizar 300 segundos cuando su frecuencia exceda un límite de 50 solicitudes cada 120 segundos. Las solicitudes bloqueadas muestran un código de estado de 404 Not Found.

gcloud compute security-policies rules create 100 \
    --security-policy=sec-policy \
    --expression="request.headers['fish'] == 'tuna'" \
    --action=rate-based-ban \
    --rate-limit-threshold-count=50 \
    --rate-limit-threshold-interval-sec=120 \
    --ban-duration-sec=300 \
    --conform-action=allow \
    --exceed-action=deny-404 \
    --enforce-on-key=IP

Por ejemplo, con el siguiente comando de la gcloud CLI, se crea una regla de bloqueo basada en la tasa con una prioridad de 101 para limitar todas las solicitudes cuyo código de región coincida con US a 10 solicitudes cada 60 segundos. La regla también prohíbe las solicitudes de la región US durante 300 segundos cuando su tasa exceda un límite de 1,000 solicitudes cada 600 segundos. Las solicitudes bloqueadas muestran un código de estado de 403 Forbidden.

gcloud compute security-policies rules create 101 \
    --security-policy sec-policy \
    --expression "origin.region_code == 'US'" \
    --action rate-based-ban \
    --rate-limit-threshold-count 10 \
    --rate-limit-threshold-interval-sec 60 \
    --ban-duration-sec 300 \
    --ban-threshold-count 1000 \
    --ban-threshold-interval-sec 600 \
    --conform-action allow \
    --exceed-action deny-403 \
    --enforce-on-key ALL

Por ejemplo, el siguiente comando de gcloud CLI crea una regla de bloqueo basada en la tasa con una prioridad de 102 para limitar todas las solicitudes de cualquier rango de direcciones IP de origen a 20 solicitudes cada 60 segundos. La regla también prohíbe las solicitudes de cualquier rango de direcciones IP de origen durante 600 segundos cuando la tasa de solicitudes supere un límite de 500 solicitudes cada 400 segundos. Las solicitudes bloqueadas muestran un código de estado de 429 Too Many Requests.

gcloud compute security-policies rules create 102 \
    --security-policy sec-policy \
    --src-ip-ranges="*" \
    --action rate-based-ban \
    --rate-limit-threshold-count 20 \
    --rate-limit-threshold-interval-sec 60 \
    --ban-duration-sec 600 \
    --ban-threshold-count 500 \
    --ban-threshold-interval-sec 400 \
    --conform-action allow \
    --exceed-action deny-429 \
    --enforce-on-key ALL

Cambia una regla de restricción a una regla de bloqueo basada en la tasa

Puedes usar el siguiente comando para cambiar la acción de una regla existente de una acción de restricción a una acción de bloqueo basada en la tasa.

gcloud compute security-policies rules update 105 \
    --action=rate-based-ban \
    --security-policy=sec-policy \
    --ban-duration-sec=600

No puedes cambiar la acción de una regla existente de una acción de bloqueo basada en la tasa a una acción de restricción.

¿Qué sigue?