Edge Functions no Edge Firewall
Edge Functions são funções executadas na plataforma de Edge da Azion, com a latência baixa, levando a capacidade operacional para mais perto do usuário final.
Edge Firewall suporta edge functions. Através delas, você pode escrever seu próprio código de segurança em JavaScript e realizar deploy no edge.
Com edge functions nos Edge Firewall, você pode:
- Melhorar sua proteção.
- Ter mais dinamismo.
- Implementar a lógica necessária para o funcionamento do seu negócio.
- Fazer uso de APIs que possibilitam a manipulação dos headers de request e response.
Implementação
Escopo | Guia |
---|---|
Como criar e configurar uma edge function em seu Edge Firewall | Como criar e configurar uma edge function no seu Edge Firewall |
Exemplos | Exemplos de functions para firewall |
Exemplos no GitHub | Repositório do GitHub |
Como funcionam as edge functions no Edge Firewall
Processo
- As regras configuradas nas Rules Engine do Edge Firewall para a execução da função são acionadas.
- O Azion Runtime processa a função, retornando um resultado.
- O Edge Firewall Rules Engine prossegue com o processamento, baseado no resultado recebido, a partir do ponto que o comportamento foi acionado.
Adicionar Header da Requisição
Você pode adicionar headers na requisição que é enviada à origem.
addEventListener("firewall", (event) => { event.addRequestHeader("X-Custom-Header-1", "1"); event.addRequestHeader("X-Custom-Header-2", "2"); event.continue(); });
Adicionar Header da Resposta
Você pode adicionar headers na resposta que é enviada aos usuários.
addEventListener("firewall", (event) => { event.addResponseHeader("X-Custom-Header-3", "3"); event.addResponseHeader("X-Custom-Header-4", "4"); event.continue(); });
Deny (403 Forbidden)
Através do evento event.deny()
, você pode finalizar uma requisição retornando HTTP 403 Forbidden.
addEventListener("firewall", (event) => { event.deny(); });
Drop (Fechar Sem Resposta)
Através do evento event.drop()
, você pode finalizar uma solicitação sem retornar uma resposta ao cliente.
addEventListener("firewall", (event) => { event.drop(); });
Respond with
Através do evento event.respondWith()
, você pode interceptar requisições e retornar respostas customizadas, além de modificar os headers da resposta ou o conteúdo.
event.respondWith(new Response('{"my_custom_response": true}', { status: 599, headers: { "content-type": "application/json" } }));
Metadados
As edge functions no Edge Firewall possibilitam a manipulação de metadados.
Utilizando esses metadados, você pode filtrar e gerenciar o acesso às suas aplicações e implementar a lógica específica em diferente cenários, como por exemplo:
Informação de GeoIP
Você pode negar acesso quando a requisição vem de lugares específicos.
Leia mais sobre a lista de metadados de GeoIP.
Remote
Você pode verificar o endereço de IP e a porta TCP utilizada.
Leia mais sobre a lista de metadados de Remote.
Server
Você pode verificar o protocolo sendo usado na requisição.
Leia mais sobre a lista de metadados de Server.
TLS
Os metadados relacionados a TLS estarão disponíveis quando a requisição for feita de uma conexão segura.
Leia mais sobre a lista de metadados de TLS.
Repositório Azion Samples
Acesse o repositório Azion Samples no GitHub e analise os code samples que podem ajudar no desenvolvimento de suas edge functions.
Práticas recomendadas
Conditionals
Ao trabalhar com condicionais e event.method
, use if else
. Caso a implementação seja semelhante a:
if (someCondition){ event.drop() } event.continue()
Ela pode acabar com comportamentos inesperados.
É altamente recomendável utilizar da seguinte forma:
if (someCondition){ event.drop() }else{ event.continue() }
Sync x async
Como o eventHandler
é síncrono, é necessário escrever uma function assíncrona quando await
é implementado.
Recomenda-se usar event.waitUntil
. Caso contrário, a promise
pode acabar em exceções inesperadas.
async function firewallHandler(event) { // any async operation here like fetch, timeout etc.}
addEventListener("firewall", (event) => event.waitUntil(firewallHandler(event)));
}
Contribuidores