Configure a limitação de velocidade

Esta página contém informações sobre a configuração de regras do Google Cloud Armor para aplicar limites de taxa por cliente através da configuração de uma ação de restrição ou proibição baseada na taxa. Antes de configurar a limitação de taxa, certifique-se de que conhece as informações na vista geral da limitação de taxa.

Antes de começar

As secções seguintes explicam todas as funções e autorizações da gestão de identidade e de acesso (IAM) necessárias para configurar as políticas de segurança do Cloud Armor. Para os exemplos de utilização neste documento, só precisa da autorização compute.securityPolicies.create.

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

As seguintes operações requerem a função de administrador de segurança do Compute do Identity and Access Management (IAM) (roles/compute.securityAdmin):

  • Configurar, modificar, atualizar e eliminar uma política de segurança do Cloud Armor
  • Usando os seguintes métodos da API:
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Um utilizador com a função de administrador de rede de computação (roles/compute.networkAdmin) pode realizar as seguintes operações:

  • Definir uma política de segurança do Cloud Armor para um serviço de back-end
  • Usando os seguintes métodos da API:
    • BackendServices setSecurityPolicy
    • BackendServices list (apenas gcloud)

Os utilizadores com a função de administrador de segurança (roles/iam.securityAdmin) e a função de administrador de rede de computação podem ver as políticas de segurança do Cloud Armor através dos métodos da API SecurityPolicies get, list e getRule.

Configure autorizações da IAM para funções personalizadas

A tabela seguinte apresenta as autorizações base das funções da IAM e os respetivos métodos da API associados.

Autorizaçã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

Regras para a limitação baseada na taxa

As regras para a limitação baseada na taxa têm o seguinte formato na CLI do Google Cloud:

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]

Limitação de velocidade em chaves únicas

Por exemplo, o seguinte comando da CLI gcloud cria uma regra com a prioridade throttle com um limite de taxa de 100 pedidos a cada 60 segundos para cada endereço IP em 1.2.3.0/24.105 Os pedidos que excedem o limite de limitação devolvem um código de erro 429.

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 exemplo, o seguinte comando da CLI gcloud cria uma throttleregra com a prioridade 110 com um limite de taxa de 10 pedidos a cada 60 segundos para cada valor único do cabeçalho HTTP User-Agent em todos os pedidos provenientes de endereços IP em 1.2.3.0/24. Os pedidos que excedem o limite de restrição devolvem um código de erro 429.

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, pode emitir proibições baseadas em taxas para utilizadores que tenham um cookie de isenção do reCAPTCHA válido. Por exemplo, o seguinte comando da CLI gcloud cria uma regra throttle com prioridade 115 com um limite de taxa de 20 pedidos por 5 minutos para cada cookie de isenção do reCAPTCHA exclusivo em todos os pedidos que tenham um cookie de isenção do reCAPTCHA válido. Os pedidos que excedam o limite de restrição são redirecionados para avaliação do reCAPTCHA. Para mais informações acerca dos cookies de isenção e da avaliação do reCAPTCHA, consulte a vista geral da gestão de bots.

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"

Limitação de velocidade com base nas impressões digitais JA4 e JA3

Pode usar as impressões digitais JA4 e JA3 como chaves de limitação de taxa. O exemplo seguinte cria uma regra throttle com prioridade 1000 com um limite de taxa de 20 pedidos por 5 minutos que correspondem a pedidos com o caminho /login, com base na impressão digital do JA4 do cliente. Os pedidos que excedam o limite de restrição são recusados.

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

Limitação da taxa com base no endereço IP do utilizador

Quando recebe pedidos através de um proxy a montante, pode aplicar limites de taxa com base no endereço IP do cliente de origem. O exemplo seguinte cria uma regra throttle na prioridade 1000 com um limite de taxa de 20 pedidos por 5 minutos que correspondem a pedidos com o caminho /login, com base no endereço IP do cliente de origem. Os pedidos que excedam o limite de restrição são recusados.

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 mais informações sobre o suporte de endereços IP de utilizadores, consulte a referência da linguagem de regras.

Limitação de taxa com base em várias chaves

Também pode limitar o tráfego com base em várias chaves de limitação de taxa através da flag enforce-on-key-configs. Esta sinalização substitui a sinalização enforce-on-key e a sinalização enforce-on-key-name. A flag enforce-on-key-configs requer uma lista separada por vírgulas de pares KEY=NAME, embora não precise de fornecer um nome para algumas chaves.

O exemplo seguinte cria uma regra throttle para a política POLICY_NAME com a prioridade 105 com um limite de taxa de 100 pedidos a cada 60 segundos para cada combinação de HTTP-PATH e site_id em todos os pedidos provenientes de endereços IP em 1.2.3.0/24. Os pedidos que excedem o limite de restrição devolvem um código de erro 429.

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"

Regras para banimentos com base na taxa

As regras para proibições baseadas em taxas têm o seguinte formato na CLI gcloud:

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 exemplo, o seguinte comando da CLI gcloud cria uma regra de proibição baseada na taxa na prioridade 100 para cada endereço IP cujos pedidos correspondam a um cabeçalho fish com o valor tuna e proíbe-o durante 300 segundos quando a respetiva taxa exceder um limite de 50 pedidos por cada 120 segundos. As solicitações banidas devolvem um código de erro de 404.

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 exemplo, o seguinte comando da CLI gcloud cria uma regra de proibição baseada na taxa de pedidos com a prioridade 101 para limitar todos os pedidos cujo código de região corresponda a US a 10 pedidos por 60 segundos. A regra também proíbe pedidos da região US durante 300 segundos quando a respetiva taxa excede um limite de 1000 pedidos por 600 segundos. Os pedidos proibidos devolvem um código de erro de 403.

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 exemplo, o seguinte comando da CLI gcloud cria uma regra de proibição baseada na taxa de pedidos com a prioridade 102 para limitar todos os pedidos de qualquer intervalo de endereços IP de origem a 20 pedidos por 60 segundos. A regra também proíbe pedidos de qualquer intervalo de endereços IP de origem durante 600 segundos quando a taxa de pedidos excede um limite de 500 pedidos por 400 segundos. Os pedidos proibidos devolvem um código de erro de 429.

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

Altere uma regra de limitação para uma regra de proibição baseada na taxa

Pode usar o seguinte comando para alterar a ação de uma regra existente de uma ação de limitação para uma ação de proibição baseada na taxa.

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

Não pode alterar a ação de uma regra existente de uma ação de proibição baseada em taxa para uma ação de restrição.

O que se segue?