Functions no Firewall
Com Functions em JavaScript em seu Firewall você pode impulsionar a sua proteção, ter mais dinamismo e implementar a lógica necessária para o seu negócio.
Functions são funções executadas na Azion Web Platform, com a latência baixa, levando a capacidade operacional para mais perto do usuário final.
Firewall suporta functions. Através delas, você pode escrever seu próprio código de segurança em JavaScript e realizar deploy no edge.
Com functions nos 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 function em seu Firewall | Como criar e configurar uma function no seu Firewall |
| Exemplos | Exemplos de functions para firewall |
| Exemplos no GitHub | Repositório do GitHub |
Como funcionam as functions no Firewall
Processo
- As regras configuradas nas Rules Engine do Firewall para a execução da função são acionadas.
- O Azion Runtime processa a função, retornando um resultado.
- O 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.
Adicionar Header da Resposta
Você pode adicionar headers na resposta que é enviada aos usuários.
Deny (403 Forbidden)
Através do evento event.deny(), você pode finalizar uma requisição retornando HTTP 403 Forbidden.
Drop (Fechar Sem Resposta)
Através do evento event.drop(), você pode finalizar uma solicitação sem retornar uma resposta ao cliente.
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.
Metadados
As functions no 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 functions.
Práticas recomendadas
Conditionals
Ao trabalhar com condicionais e event.method, use if else. Caso a implementação seja semelhante a:
Ela pode acabar com comportamentos inesperados.
É altamente recomendável utilizar da seguinte forma:
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.
Limites
Estes são os limites padrão:
| Escopo | Limite |
|---|---|
| Argumentos | 100 KB |
| Memória por Isolate | 512 MB |
| Limite de código (UI) | 6 MB |
| Limite de código (API) | 50 MB |
| Tamanho de variáveis de ambiente | 32 KB |
| Sub-requisições | 50 Sub-Req |
| Tempo máximo de execução de CPU | 2s |