Como utilizar a integração Upstash Rate Limiting através do Marketplace da Azion
Upstash Rate Limiting permite que você controle o tráfego de entrada diretamente no edge da rede, evitando gargalos, gerenciando picos de tráfego e protegendo suas aplicações contra possíveis ameaças, como DDoS, fuzzing ou ataques de força bruta.
Com essa integração, baseada em uma edge function, você pode definir:
- Limiting requests e window limit, incluindo janelas de limites específicas para diferentes períodos do dia.
- Uma configuração de penalty que analisa a validade de cada requisição.
- Se a requisição não for válida, ela é bloqueada e é retornado um código de status
403 Forbidden
ao usuário. - Se a requisição for válida, ela é somada e, caso atinja o limite de taxa definido, é interrompida e é retornado um código de status
429 Too Many Requests
ao usuário.
- Se a requisição não for válida, ela é bloqueada e é retornado um código de status
A Upstash Rate Limiting é integrada à biblioteca upstash/ratelimit
e fornece uma contabilidade global do limite de taxa, somando todas as requisições recebidas em toda a rede, em vez de contar separadamente para cada edge location.
Pré-requisitos
Para começar a usar esta integração, você precisa:
- Criar uma conta no Upstash.
- Criar um banco de dados global para obter a melhor latência de edge disponível no console do Upstash.
Obtenha a integração
Para instalar a integração:
- Acesse o Azion Console > Marketplace.
- Na página inicial do Marketplace, selecione o card da integração.
- Na página da integração, clique no botão Install, localizado no canto inferior da direita.
Você receberá uma mensagem indicando que sua integração foi instalada com sucesso.
Em seguida, você precisará concluir as etapas explicadas abaixo para instanciar a função e configurar um edge firewall.
- Acesse o Real-Time Manager (RTM) > Marketplace.
- Na página inicial do Marketplace, selecione o card da integração.
- Na página da integração, clique no botão Get it Now, localizado no canto inferior da direita.
Você receberá uma mensagem indicando que sua integração foi instalada com sucesso.
Em seguida, você precisará concluir as etapas explicadas abaixo para instanciar a função e configurar um edge firewall.
Configure a integração
Configure uma regra no Edge Firewall
Para instanciar a integração Upstash Rate Limiting, siga os passos:
- No Products menu, selecione Edge Firewall na seção Secure.
- Clique no botão + Edge Firewall.
- Dê um nome fácil de lembrar ao seu edge firewall.
- Selecione os domínios que deseja proteger.
- Ative a opção Edge Functions na seção Modules.
- Esta ação dá acesso a edge functions no seu edge firewall.
- Clique no botão Save.
Pronto. Você instanciou um edge firewall para sua função.
- No Products menu, selecione Edge Firewall na seção Secure.
- Clique no botão + Rule Set.
- Dê um nome fácil de lembrar ao seu edge firewall.
- Selecione os domínios que deseja proteger.
- Ative a opção Edge Functions na seção Modules.
- Esta ação dá acesso a edge functions no seu edge firewall.
- Clique no botão Save.
Pronto. Você instanciou um edge firewall para sua função.
Configure uma função no Edge Firewall
Ainda na página do Edge Firewall:
- Selecione a aba Functions e siga estas etapas:
- Clique no botão Add Function.
- Dê um nome fácil de lembrar à sua instância.
- No menu suspenso, selecione a função Upstash Rate Limiting.
Esta ação carregará a função, mostrando um formulário com o código-fonte desta e, logo acima dele, duas abas: Code e Arguments. Ao clicar na aba Code, você poderá navegar pelo código-fonte, mas não poderá alterá-lo.
- Na guia Arguments, você passará suas credenciais do Upstash e suas variáveis:
Onde:
Variável | Descrição |
---|---|
upstash_redis_rest_url | A URL do seu banco de dados no Upstash que armazenará os dados |
upstash_redis_rest_token | Seu token de acesso à API do Upstash |
rate_limit_prefix | Define um prefixo a ser usado em todas as chaves de rate limit. Essa variável é crucial para evitar sobreposições entre diferentes instâncias da função |
rate_limit_key_metadata | Define quais variáveis de metadados serão usadas para gerar a chave de rate limit na plataforma da Azion |
rate_limit_key_header | Define quais variáveis de metadados serão usadas para gerar a chave de rate limit na plataforma da Azion |
rate_limit_key_hostname | Se true , a URL será usada para gerar a chave de rate limit |
rate_limit_repenalize | Se true , o tempo de penalidade é recalculado toda vez que um usuário penalizado faz uma requisição |
rate_limits | Define as janelas de limites como um objeto. Você deve adicionar pelo menos um objeto |
algorithm | Define o algoritmo de rate limit a ser aplicado. Valores possíveis: fixed_window , sliding_window , token_bucket . Leia mais |
requests | Número máximo de requisições até atingir o rate limit |
interval | Intervalo de tempo da janela de limite. Esta variável segue o padrão Upstash: XXXX y , onde X é o numeral e y é a unidade, que pode ser s para segundos ou m para minutos. Exemplo: 120 s |
start e end | Essas variáveis definem a janela de tempo. Usam o formato de 24 horas e o fuso horário UTC. Leia mais |
penalty_in_seconds | Tempo de penalidade (bloqueio que retorna o código de status 403 ) a que os usuários estarão sujeitos após violarem o limite de taxa. Leia mais |
- Clique no botão Save.
- Selecione a aba Functions Instances e siga estas etapas:
- Clique no botão + Function Instance.
- Dê um nome fácil de lembrar à sua instância.
- No menu suspenso, selecione a função Upstash Rate Limiting.
- Esta ação irá carregar a aba Arguments.
- Na guia Arguments, você passará suas credenciais do Upstash e suas variáveis:
Onde:
Variável | Descrição |
---|---|
upstash_redis_rest_url | A URL do seu banco de dados no Upstash que armazenará os dados |
upstash_redis_rest_token | Seu token de acesso à API do Upstash |
rate_limit_prefix | Define um prefixo a ser usado em todas as chaves de rate limit. Essa variável é crucial para evitar sobreposições entre diferentes instâncias da função |
rate_limit_key_metadata | Define quais variáveis de metadados serão usadas para gerar a chave de rate limit na plataforma da Azion |
rate_limit_key_header | Define quais variáveis de metadados serão usadas para gerar a chave de rate limit na plataforma da Azion |
rate_limit_key_hostname | Se true , a URL será usada para gerar a chave de rate limit |
rate_limit_repenalize | Se true , o tempo de penalidade é recalculado toda vez que um usuário penalizado faz uma requisição |
rate_limits | Define as janelas de limites como um objeto. Você deve adicionar pelo menos um objeto |
algorithm | Define o algoritmo de rate limit a ser aplicado. Valores possíveis: fixed_window , sliding_window , token_bucket . Leia mais |
requests | Número máximo de requisições até atingir o rate limit |
interval | Intervalo de tempo da janela de limite. Esta variável segue o padrão Upstash: XXXX y , onde X é o numeral e y é a unidade, que pode ser s para segundos ou m para minutos. Exemplo: 120 s |
start e end | Essas variáveis definem a janela de tempo. Usam o formato de 24 horas e o fuso horário UTC. Leia mais |
penalty_in_seconds | Tempo de penalidade (bloqueio que retorna o código de status 403 ) a que os usuários estarão sujeitos após violarem o limite de taxa. Leia mais |
- Clique no botão Save.
Importante
-
Esta integração permite definir diferentes janelas de limites para diferentes períodos do dia. Exemplo: você pode definir um limite de
10 requisições/minuto
de00:00
a12:00
e outro de15 requisições/minuto
de12:01
a23:59
. -
Esta integração suporta três valores possíveis para
algorithm
:fixed_window
divide o tempo em durações/janelas fixas.sliding_window
é construído em cima da janela fixa, mas usa uma janela variável. Exemplo: você deseja definir um limite de taxa de10 requisições
por1 minuto
e, em seguida, divide o tempo em fatias de1 minuto
, como no algoritmo defixed_window
.token_bucket
define o número máximo de tokens para preencher um bucket e o intervalo em que o bucket será limpo. Cada requisição remove um token e, se não houver token para receber, a requisição será rejeitada.
-
O
token_bucket
inclui valores diferentes, onde:max_tokens
define o número de tokens (ou chaves) que esse limite de taxa permitirá.refil_rate
define o número de buckets que serão “limpados” em cada intervalo de tempo.
Neste exemplo, a cada 10 segundos
, 5 buckets
são limpados, de um máximo de 5 buckets
“ocupados”.
-
Se o
start
não estiver definido, o valor padrão será00:00
. Se oend
não estiver definido, o valor padrão será23:59
. Em caso de sobreposições entre os limites de taxa, o limite que estiver primeiro nos Args será considerado. -
Quando a variável
penalty_in_seconds
não é preenchida, o limite da tarifa não se aplica a uma penalidade, comportando-se como um limite de tarifa simples.
Configure o Rules Engine
Para concluir, você deve configurar uma regra no Rules Engine para definir os critérios (criteria) e o comportamento (behavior) para executar a função.
Ainda na página do Edge Firewall:
- Selecione a aba Rules Engine.
- Clique no botão + Rule Engine.
- Dê um nome fácil de lembrar à sua nova regra.
- Selecione um criteria para executar a integração. Por exemplo:
if Hostname is equal xxxxxxxxxxxx.map.azionedge.net/classes
. - Abaixo, selecione o behavior Run Function.
- Selecione a função de Upstash Rate Limiting de acordo com o nome que você deu antes.
- Clique no botão Save.
Pronto. Agora, Upstash Rate Limiting está em execução e protegendo seus domínios.
- Selecione a aba Rules Engine.
- Clique no botão New Rule.
- Dê um nome fácil de lembrar à sua nova regra.
- Selecione um criteria para executar a integração. Por exemplo:
if Hostname is equal xxxxxxxxxxxx.map.azionedge.net/classes
. - Abaixo, selecione o behavior Run Function.
- Selecione a função de Upstash Rate Limiting de acordo com o nome que você deu antes.
- Clique no botão Save.
Pronto. Agora, Upstash Rate Limiting está em execução e protegendo seus domínios.