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
(somentegcloud
)
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
- Consulte a visão geral da limitação de taxa.
- Saiba mais sobre o gerenciamento de bots.