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.

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.


Para começar a usar esta integração, você precisa:


Para instalar a integração:

  1. Acesse o Azion Console > Marketplace.
  2. Na página inicial do Marketplace, selecione o card da integração.
  3. 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 conjunto de regras.


Para instanciar a integração Upstash Rate Limiting, siga os passos:

  1. No Products menu, selecione Edge Firewall na seção Secure.
  2. Clique no botão + Rule Set.
  3. Dê um nome fácil de lembrar ao seu edge firewall.
  4. Selecione os domínios que deseja proteger.
  5. Ative a opção Edge Functions na seção Modules.
  • Esta ação dá acesso a edge functions no seu edge firewall.
  1. Clique no botão Save.

Pronto. Você instanciou um edge firewall para sua função.

Configure uma função no Edge Firewall

Seção intitulada Configure uma funcao no Edge Firewall

Ainda na página do Edge Firewall, selecione a aba Functions Instances e siga estas etapas:

  1. Clique no botão Add ⁠Function.
  2. Dê um nome fácil de lembrar à sua instância.
  3. 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.

  1. Na guia Arguments, você passará suas credenciais do Upstash e suas variáveis:
Terminal window
{
"upstash_redis_rest_url": "https://your-database.upstash.io",
"upstash_redis_rest_token": "Your upstash token",
"rate_limit_prefix": "my_rate_limit",
"rate_limit_key_metadata": [
"remote_addr"
],
"rate_limit_key_header": [
"x-a-custom-header"
],
"rate_limit_key_hostname": true,
"rate_limit_repenalize": true,
"rate_limits": [
{
"algorithm": "sliding_window",
"requests": 2,
"interval": "20 s",
"start": "00:00",
"end": "12:00",
"penalty_in_seconds": 45
},
{
"algorithm": "fixed_window",
"requests": 3,
"interval": "120 s",
"start": "12:01",
"end": "23:00",
},
{
"algorithm": "token_bucket",
"refil_rate": 5,
"max_tokens": 5,
"interval": "10 s",
"start": "23:01",
"penalty_in_seconds": 55
}
]
}

Onde:

VariávelDescrição
upstash_redis_rest_urlA URL do seu banco de dados no Upstash que armazenará os dados
upstash_redis_rest_tokenSeu token de acesso à API do Upstash
rate_limit_prefixDefine 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_metadataDefine quais variáveis de metadados serão usadas para gerar a chave de rate limit na plataforma da Azion
rate_limit_key_headerDefine quais variáveis de metadados serão usadas para gerar a chave de rate limit na plataforma da Azion
rate_limit_key_hostnameSe true, a URL será usada para gerar a chave de rate limit
rate_limit_repenalizeSe true, o tempo de penalidade é recalculado toda vez que um usuário penalizado faz uma requisição
rate_limitsDefine as janelas de limites como um objeto. Você deve adicionar pelo menos um objeto
algorithmDefine o algoritmo de rate limit a ser aplicado. Valores possíveis: fixed_window, sliding_window, token_bucket. Leia mais
requestsNúmero máximo de requisições até atingir o rate limit
intervalIntervalo 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 endEssas variáveis definem a janela de tempo. Usam o formato de 24 horas e o fuso horário UTC. Leia mais
penalty_in_secondsTempo 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
  • 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 de 00:00 a 12:00 e outro de 15 requisições/minuto de 12:01 a 23: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 de 10 requisições por 1 minuto e, em seguida, divide o tempo em fatias de 1 minuto, como no algoritmo de fixed_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.
Terminal window
"algorithm": "token_bucket",
"refil_rate": 5,
"max_tokens": 5,
"interval": "10 s",
"start": "23:01",
"penalty_in_seconds": 55

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 o end 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.

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:

  1. Selecione a aba Rules Engine.
  2. Clique no botão New Rule.
  3. Dê um nome fácil de lembrar à sua nova regra.
  4. Selecione um criteria para executar a solução.
  • Por exemplo: if Hostname is equal xxxxxxxxxxxx.map.azionedge.net/classes.
  1. Abaixo, selecione o behavior Run Function.
  2. Selecione a função de Upstash Rate Limiting de acordo com o nome que você deu antes.
  3. Clique no botão Save.

Pronto. Agora, Upstash Rate Limiting está em execução e protegendo seus domínios.