Para proteger um SaaS contra ataques sem migrar a aplicação nem reescrever código, basta colocar a Azion na frente do app. O tráfego passa primeiro pelo Firewall da Azion, com WAF, Bot Manager e rate limit, e o que as regras bloqueiam não chega ao seu servidor, que continua onde está.
O cenário costuma ser este: o SaaS cresceu rápido, muitas vezes com código escrito com ajuda de AI, e de repente aparecem scraping, logins em massa e tentativas de invasão. Não sobra tempo nem orçamento para resolver isso do jeito certo, e o time de segurança, quando existe, é o próprio desenvolvedor.
Boa parte desse trabalho dá para delegar a um agente de codificação, como o Claude Code, que usa os MCP servers da Azion para escrever a configuração de proteção da aplicação que já está no ar, enquanto você revisa cada mudança antes de ela entrar em produção.
Como saber se o seu SaaS está sob ataque?
Os sinais mais comuns são picos de tráfego em rotas específicas, milhares de logins falhos e parâmetros estranhos nas URLs.
O exemplo aqui é uma plataforma SaaS fictícia de pedidos B2B para o varejo, em que lojistas consultam o catálogo com preços negociados e fazem pedidos aos distribuidores. O app responde em app.seusaas.com.br, roda em um servidor em uma cloud qualquer, acessível por origem.seusaas.com.br, e ninguém quer mexer nele agora.
Na tabela, cada sinal aparece com o ataque que costuma indicar e a proteção que responde a ele. As rotas são exemplos; cada app organiza as suas.
Sinal (exemplo) | O que costuma ser | Proteção na Azion |
Picos de requisições em | Scraping de preços por concorrentes | Bot Manager e rate limit por IP |
Milhares de logins falhos em | Credential stuffing com senhas vazadas | Bot Manager e rate limit por IP |
Parâmetros estranhos nas URLs, como | Tentativas de SQL injection e XSS | WAF |
Servidor lento ou fora do ar durante o ataque | DDoS | DDoS Protection, sempre ativo |
Como proteger um SaaS e suas APIs sem migrar a aplicação?
Colocando a Azion na frente dela, como proxy. A aplicação continua no servidor de hoje, com o mesmo código e o mesmo banco; o que muda é o caminho do tráfego, que chega primeiro à Azion, passa pelo Firewall e só então segue para o servidor. O que uma regra bloqueia não chega à aplicação.
No Firewall, três controles fazem o trabalho. O WAF (Web Application Firewall) inspeciona cada requisição HTTP e bloqueia padrões de ataque como SQL injection e XSS. O rate limit define quantas requisições um mesmo IP pode fazer em um intervalo. E o Bot Manager pontua cada requisição para separar navegação humana de automação, como scraping e credential stuffing.
Os trechos a seguir são ilustrativos e mostram só as partes que mudam neste cenário; o azion.config.ts completo também declara a application que usa o connector e o workload do domínio. O WAF entra de outro jeito, explicado logo depois do código. Na configuração, o servidor atual vira um connector, que diz à Azion para onde encaminhar o tráfego:
connectors: [{ name: 'servidor-atual', type: 'http', attributes: { addresses: [{ address: 'origem.seusaas.com.br' }], connectionOptions: { transportPolicy: 'force_https' }, modules: { loadBalancer: { enabled: false, config: null }, originShield: { enabled: false, config: null }, }, },}],Fora do arquivo de configuração, mudam duas coisas. A primeira é o DNS: app.seusaas.com.br passa a apontar para a Azion, que também pode emitir o certificado TLS do domínio com Let’s Encrypt assim que o DNS estiver apontado.
A segunda é a origem, que deve aceitar apenas o tráfego vindo da Azion, para que ninguém contorne a proteção chamando o servidor direto pelo IP. Para isso, use o Origin Shield: ligue no connector o módulo originShield, desligado no trecho acima, e o Origin IP ACL, e configure o firewall da origem para aceitar só a lista de IPs que a Azion publica.
Como o Claude Code configura WAF, Bot Manager e rate limit pelo MCP da Azion?
O agente de codificação, aqui o Claude Code, se conecta aos MCP servers da Azion. Pelo servidor de documentação, que só faz leitura, ele consulta a documentação, os comandos da CLI e a referência da API e escreve a política no azion.config.ts. Quem aplica a configuração na conta é o azion deploy. O pedido pode ser simples assim:
“Coloque a Azion na frente do meu app, que responde em app.seusaas.com.br e roda no servidor origem.seusaas.com.br. Aplique o WAF em modo de observação em todas as rotas, rate limit por IP no login e no catálogo e o Bot Manager Lite nas duas rotas, só registrando, sem bloquear. Abra um pull request com a mudança.”
O resultado é um Firewall como este, com a instância do Bot Manager Lite e as regras que a acionam:
firewall: [{ name: 'firewall-saas', functions: true, waf: true, functionsInstances: [{ name: 'bot-manager-lite', ref: 12345, // ID da função instalada pelo Azion Marketplace na sua conta args: { action: 'allow', threshold: 30 }, // só registra, não bloqueia }], rules: [ { name: 'bot-manager-login-e-catalogo', criteria: [ { variable: '${request_uri}', conditional: 'if', operator: 'starts_with', argument: '/login' }, { variable: '${request_uri}', conditional: 'or', operator: 'starts_with', argument: '/api/catalogo' }, ], behaviors: [{ type: 'run_function', attributes: { value: 'bot-manager-lite' } }], // aponta para a instância acima }, { name: 'rate-limit-catalogo', criteria: [{ variable: '${request_uri}', conditional: 'if', operator: 'starts_with', argument: '/api/catalogo' }], behaviors: [{ type: 'set_rate_limit', attributes: { type: 'second', limitBy: 'client_ip', averageRateLimit: '1', maximumBurstSize: '10' } }], }, { name: 'rate-limit-login', criteria: [{ variable: '${request_uri}', conditional: 'if', operator: 'starts_with', argument: '/login' }], behaviors: [{ type: 'set_rate_limit', attributes: { type: 'second', limitBy: 'client_ip', averageRateLimit: '1', maximumBurstSize: '5' } }], }, ],}],O Bot Manager Lite, instalado pelo Azion Marketplace e executado como função no Firewall, pontua cada requisição por sinais como user agent ausente, falta de cabeçalhos que um navegador real enviaria e cookie de sessão que não confere. Quando a pontuação chega ao threshold, ele aplica a action configurada. Como não depende só do IP, ajuda a identificar robôs que trocam de IP a cada tentativa, algo que o rate limit por IP não consegue. A versão completa, o Bot Manager, acrescenta machine learning e Reputation Intelligence.
Os limites são um ponto de partida, a calibrar com o tráfego real. No catálogo, uma requisição por segundo por IP, com burst de 10, cobre um lojista navegando e inviabiliza um scraper rodando a partir de poucos IPs. No login, uma tentativa por segundo, com burst de 5, basta para quem errou a senha e freia ataques vindos de um mesmo IP. A contagem é feita em cada data center: o excesso entra em fila, e o que passa do burst recebe status 429.
O WAF fica fora deste arquivo: o azion deploy não cria o WAF a partir do azion.config, e a regra que liga o WAF ao Firewall usa o ID numérico dele e o modo logging. Por isso, crie os dois com a Azion CLI, usando azion create waf e azion create firewall-rule, e ajuste no WAF a sensibilidade por família de ameaça. Os arquivos JSON desses comandos podem ficar no mesmo repositório e passar pelo mesmo pull request.
O agente propõe, mas quem aprova é o time. Quando a branch principal é protegida e o azion deploy só roda depois do merge, cada regra chega como um pull request com o diff completo e nenhuma entra em produção sem revisão.
Esse fluxo aparece em mais detalhe em O agente que escreve seu código também sugere sua política de segurança e em Do código aprovado à proteção em produção.
Como proteger o SaaS sem bloquear clientes reais?
Começando em modo de observação. Com o app já em produção, o maior risco é barrar um cliente real, por isso o WAF em modo Logging e o Bot Manager Lite com a ação allow só registram as requisições que seriam bloqueadas. O rate limit é a exceção, porque já barra o excesso desde o primeiro deploy. Se vários usuários de um mesmo cliente saem pelo mesmo IP, como acontece em redes corporativas, comece com limites mais folgados.
No Real-Time Events, a fonte de dados HTTP Requests mostra, para cada requisição, campos como wafMatch, com a infração e o trecho que disparou a regra, e wafScore, com a pontuação por família de ameaça. Com o Debug Rules ativado no Firewall, que vem desligado por padrão, o evento também mostra quais regras foram executadas; ative-o pelo Console depois de cada deploy, porque o azion deploy grava o Firewall com essa opção desligada. Os registros do Bot Manager Lite ficam na fonte Functions Console, com a pontuação e as regras que cada requisição acionou. Os eventos ficam disponíveis por 7 dias, e o Data Stream os exporta para sistemas externos, abastecendo SIEMs, data lakes e ferramentas de análise como Splunk, Datadog e BigQuery.
Depois de alguns dias com tráfego real, você trata os falsos positivos e pede ao agente que troque para o modo de bloqueio, em mais um pull request. Se alguém perguntar o que foi bloqueado e por quê, os eventos mostram a resposta; para guardar esse histórico por mais de 7 dias, exporte-o com o Data Stream.
Passo a passo para proteger um SaaS em produção com a Azion
- Conecte o agente de codificação, como o Claude Code, aos MCP servers da Azion com um token pessoal.
- Peça a configuração: o connector para o servidor atual, o rate limit no login e no catálogo e o Bot Manager Lite com a ação
allownoazion.config.ts, além dos comandos da Azion CLI que criam o WAF e a regra dele em modologging. - Revise o pull request com o
azion.config.tse aprove a mudança. - Com a Azion CLI autenticada, rode o
azion deploy, crie o WAF e a regra dele no Firewall e aponte o domínio do app para a Azion no DNS. - Emita o certificado TLS do domínio com Let’s Encrypt.
- Restrinja a origem ao tráfego vindo da Azion, com o Origin Shield e o firewall da origem.
- Acompanhe o Real-Time Events por alguns dias e trate os falsos positivos.
- Peça ao agente a troca para o modo de bloqueio, em um novo pull request.
Como a HeroSpark reduziu em 99,5% os incidentes de fraude e ataques
Sem o fluxo com agente descrito aqui, mas com as mesmas proteções, a HeroSpark, plataforma SaaS de educação digital com uma solução própria de pagamentos, o HeroPay, enfrentava fraudes e ataques que consumiam o time técnico. Com WAF, Bot Manager e DDoS Protection da Azion, reduziu em 99,5% os incidentes de fraude e ataques. E, com o Security Response Team (SRT) da Azion automatizando a detecção e a resposta, devolveu ao time mais de 200 horas por mês de trabalho manual.
Segurança e governança para o SaaS que já está no ar
Proteger um SaaS sob ataque não precisa esperar um replatform nem a contratação de um time de segurança. Com a Azion na frente da aplicação, WAF, Bot Manager, rate limit e DDoS Protection passam a valer sem mudar uma linha do código do app, e cada decisão de bloqueio fica registrada no Real-Time Events.
As proteções rodam na mesma plataforma, sobre a infraestrutura distribuída da Azion, e o bloqueio acontece no data center que recebe a requisição, longe do seu servidor. E, como a política fica em um arquivo versionado e revisado em pull request, o desenvolvedor que hoje responde pela segurança ganha um processo que continua valendo quando o time crescer. Se o SaaS ainda vai nascer, o caminho completo está em Como estruturar um SaaS com AI e segurança na Azion.
Seu SaaS está sob ataque agora? Fale com um especialista da Azion para proteger seu app sem migrar, ou crie uma conta gratuita para testar a configuração antes.
Perguntas frequentes
Preciso mudar o código da aplicação para usar um WAF? Não. Você declara a política de segurança em um arquivo de configuração, aponta o domínio do app para a Azion no DNS e, para ninguém contornar a proteção, restringe a origem ao tráfego vindo da Azion.
Como bloquear scraping no meu SaaS? Combinando o Bot Manager Lite, que pontua cada requisição por sinais como cabeçalhos e cookie de sessão, e não só pelo IP, com rate limit por IP nas rotas mais visadas, como o catálogo de produtos.
O Bot Manager Lite pode bloquear clientes reais? Pode, se começar bloqueando. Por isso ele entra em modo de observação, com a ação allow, que só registra, e o bloqueio vem depois de alguns dias de tráfego real e do ajuste dos falsos positivos.
O que é credential stuffing? É o ataque em que robôs testam, em massa, combinações de e-mail e senha vazadas de outros serviços, apostando que parte dos usuários repete a mesma senha. No SaaS, aparece como milhares de logins falhos em pouco tempo.
O que é scraping de preços e por que ele é um problema? Scraping é a coleta automatizada de dados de um site ou API por robôs. Em um SaaS B2B, ele costuma mirar preços e catálogos, que podem acabar nas mãos de concorrentes, além de sobrecarregar o servidor.
Um agente de codificação pode configurar a segurança do meu app sozinho? Ele pode escrever toda a configuração, mas a aprovação deve continuar com o time. Peça que o agente entregue cada mudança como pull request no arquivo de configuração, em vez de alterar a conta diretamente pelos MCP servers, e só rode o deploy depois do merge.
Funciona se meu SaaS roda na AWS, Azure ou Google Cloud? Sim. A aplicação continua na cloud onde já está, ou em servidores próprios; só o domínio passa a apontar para a Azion, que filtra as requisições antes de encaminhá-las ao servidor de origem.
Como proteger o login contra força bruta e credential stuffing? Com rate limit por IP na rota de login e o Bot Manager pontuando cada tentativa, o que ajuda contra robôs que trocam de IP. Na aplicação, MFA e a checagem de senhas vazadas completam a proteção. O post Segurança de APIs financeiras mostra a mesma combinação aplicada a APIs com dados sensíveis.
