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.

EscopoGuia
Como criar e configurar uma edge function em seu Edge FirewallComo criar e configurar uma edge function no seu Edge Firewall
ExemplosExemplos de functions para firewall
Exemplos no GitHubRepositório do GitHub

Como funcionam as edge functions no Edge Firewall

Seção intitulada Como funcionam as edge functions no Edge Firewall
  • As regras configuradas nas Rules Engine do Edge Firewall para a execução da função são acionadas.
  • O Azion Edge 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.

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();
});

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();
});

Através do evento event.deny(), você pode finalizar uma requisição retornando HTTP 403 Forbidden.

addEventListener("firewall", (event) => {
event.deny();
});

Através do evento event.drop(), você pode finalizar uma solicitação sem retornar uma resposta ao cliente.

addEventListener("firewall", (event) => {
event.drop();
});

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" }
}));

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:

Você pode negar acesso quando a requisição vem de lugares específicos.

Leia mais sobre a lista de metadados de GeoIP.

Você pode verificar o endereço de IP e a porta TCP utilizada.

Leia mais sobre a lista de metadados de Remote.

Você pode verificar o protocolo sendo usado na requisição.

Leia mais sobre a lista de metadados de Server.

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.

Acesse o repositório Azion Samples no GitHub e analise os code samples que podem ajudar no desenvolvimento de suas edge functions.


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()
}

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