Configurar limitação de taxa

Esta página contém informações sobre como configurar as regras do Google Cloud Armor para impor limites de taxa por cliente, configurando uma ação de proibição ou baseada em taxa. Antes de configurar a limitação de taxa, conheça as informações na visão geral da limitação de taxa.

Antes de começar

As seções a seguir explicam todos os papéis e permissões do Identity and Access Management (IAM) necessários para configurar as políticas de segurança do Google Cloud Armor. Para os casos de uso deste documento, você só precisa da permissão compute.securityPolicies.create.

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

As operações a seguir exigem o papel de administrador de segurança (roles/compute.securityAdmin) do Identity and Access (IAM):

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

Um usuário com o papel de administrador da rede do Compute (roles/compute.networkAdmin) pode realizar as seguintes operações:

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

Os usuários com os papéis de administrador de segurança (roles/iam.securityAdmin) e de rede podem ver as políticas de segurança do Google Cloud Armor usando os métodos de API SecurityPolicies, get, list e getRule.

Configure permissões de IAM para papéis personalizados

A tabela a seguir lista as permissões básicas dos papéis de IAM e os métodos de API associados.

Permissã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 limitação baseada em taxa

As regras de limitação com base em taxa têm o seguinte formato na 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]

Limitação de taxa em chaves únicas

Por exemplo, o comando da CLI gcloud a seguir cria uma regra throttle na prioridade 105 com um limite de taxa de 100 solicitações a cada 60 segundos para cada endereço IP em 1.2.3.0/24. As solicitações que excedem o limite de limitação retornam 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 comando da CLI gcloud a seguir cria uma regra throttle na prioridade 110 com um limite de taxa de 10 solicitações a cada 60 segundos para cada valor exclusivo do cabeçalho HTTP User-Agent em todas as solicitações provenientes de endereços IP em 1.2.3.0/24. As solicitações que excedem o limite de limitação retornam 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 fim, é possível emitir banimentos com base em taxa para usuários que tenham um cookie válido de isenção do reCAPTCHA. Por exemplo, o comando da CLI gcloud a seguir cria uma regra throttle na prioridade 115 com um limite de taxa de 20 solicitações a cada 5 minutos para cada cookie de isenção reCAPTCHA exclusivo em todas as solicitações que tenham um cookie de isenção reCAPTCHA válido. As solicitações que excedem o limite de limitação são redirecionadas para teste reCAPTCHA. Para mais informações sobre cookies de isenção e teste reCAPTCHA, consulte a visão geral do gerenciamento 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 taxa com base em impressões digitais JA3

É possível usar impressões digitais JA3 como uma chave de limitação de taxa. O exemplo a seguir cria uma regra throttle na prioridade 1000 com um limite de taxa de 20 solicitações a cada 5 minutos que corresponde a solicitações com o caminho /login, com base na impressão digital JA3 do cliente. As solicitações que excedem o limite de limitação são negadas.

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-ja3-fingerprint

Limitação de taxa com base no endereço IP do usuário

Quando você recebe solicitações que vêm por um proxy upstream, é possível aplicar a limitação de taxa com base no endereço IP do cliente de origem. O exemplo a seguir cria uma regra throttle na prioridade 1000 com um limite de taxa de 20 solicitações a cada 5 minutos que corresponde a solicitações com o caminho /login, com base no endereço IP do cliente de origem. As solicitações que excedem o limite de limitação são negadas.

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 a endereços IP do usuário, consulte a referência da linguagem de regras.

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

Também é possível limitar o tráfego com base em várias chaves de limitação de taxa usando a sinalização enforce-on-key-configs. Essa sinalização substitui as sinalizações enforce-on-key e enforce-on-key-name. A sinalização enforce-on-key-configs requer uma lista separada por vírgulas de pares KEY=NAME. embora não seja necessário fornecer um nome para algumas chaves.

O exemplo a seguir cria umthrottle regra da política POLICY_NAME na prioridade105 com um limite de taxa de 100 solicitações a cada 60 segundos para cada combinação de HTTP-PATH e site_id em todas as solicitações provenientes de endereços IP em 1.2.3.0/24. As solicitações que excedem o limite de limitação retornam 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 proibições baseadas em taxa

As regras para proibições baseadas em taxa 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 comando da CLI gcloud a seguir cria uma regra de banimento com base em taxa na prioridade 100 para cada endereço IP com solicitações que correspondem a um cabeçalho fish com valor tuna e o bane por 300 segundos, quando a taxa excede o limite de 50 solicitações para cada 120 segundos. As solicitações proibidas retornam 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 comando da CLI gcloud a seguir cria uma regra de proibição com base em taxa de prioridade 101 para limitar todas as solicitações com código regional correspondente a US a 10 solicitações a cada 60 segundos. A regra também proíbe solicitações da região US por 300 segundos quando a taxa exceder um limite de 1.000 solicitações a cada 600 segundos. As solicitações proibidas retornam 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 comando da CLI gcloud a seguir cria uma regra de proibição com base em taxa na prioridade 102 para limitar todas as solicitações de qualquer intervalo de endereços IP de origem a 20 solicitações a cada 60 segundos. A regra também proíbe solicitações de qualquer intervalo de endereços IP de origem por 600 segundos quando a taxa de solicitações excede o limite de 500 solicitações a cada 400 segundos. As solicitações proibidas retornam 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

Mudar uma regra de limitação para uma regra de proibição baseada em taxa

Use o comando abaixo para mudar 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 é possível mudar a ação de uma regra de proibição com base na taxa para uma ação de limitação.

A seguir