Você já quis controlar os acessos à sua aplicação de modo que os usuários só possam acessá-la durante um determinado período do dia? Digamos que estamos encarregados de entregar a transmissão ao vivo de um campeonato de videogame, todos os dias da semana, entre as 18h e 21h no horário de Brasília (BRT).
Obviamente, poderíamos criar uma resposta estática em nosso servidor durante os períodos em que a transmissão estivesse offline, porém, nesse caso estaríamos recebendo muitas requisições e consumindo os recursos do nosso servidor com requisições indesejadas.
Pois bem, a Azion tem um novo recurso que pode te ajudar a resolver esse problema: a edge function Scheduled Blocking.
A edge function Scheduled Blocking permite controlar o acesso às suas aplicações com base em janelas de tempo, diretamente de nossas edge locations. Dessa forma, os usuários somente terão acesso à sua infraestrutura quando realmente for necessário.
E neste post, você vai aprender a usar esse novo recurso.
Primeiramente, vamos adquirir a função no Azion Marketplace
Como se trata de uma função gratuita, tudo o que você precisa fazer é procurar e adquirir a função em nosso Marketplace.
Em seguida, vamos usá-la
Uma vez que adquirimos a edge function, podemos usá-la em nossos Edge Firewalls (qualquer um que tenha o módulo Edge Functions ativado). Assim, nosso próximo passo é acessar a seção de funções do Edge Firewall responsável por proteger nosso Edge Application (ou criar um novo Edge Firewall, caso nossa aplicação não tenha um Edge Firewall vinculado) e criar uma nova Function Instance da função Scheduled Blocking.
O JSON Args básico de nossa nova instância de função ficaria assim:
Em um breve resumo sobre nosso JSON Args, temos duas agendas, pois nossa regra é ligeiramente diferente durante os dias da semana e nos fins de semana.
Na primeira agenda, que está ativa de segunda à sexta, como pode ser visto no campo “week_days” acima, vamos executar a “action” deny (ou seja, vamos bloquear a requisição) quando a função for executada fora do intervalo (portanto o “execute_action_when” é configurado como “not_in_interval”) das 21:00 às 23:59 horas – e lembre-se que a function sempre usa como base o horário UTC, em formato de 24 horas.
Já a segunda agenda é usada nos finais de semana. E como nesses dois dias não queremos receber nenhum tipo de acesso, utilizamos um intervalo que vai da hora 00:00 até as 23:59 – ou seja, o dia inteiro.
Uma vez criada nossa Function Instance, o próximo passo é adicioná-la em uma regra do Rule Engine. Neste exemplo, desejamos executar a função para todas as rotas de nossa aplicação, logo a regra ficaria assim:
Assim que as alterações forem propagadas, sempre que tentarmos acessar nossa aplicação durante o final de semana ou antes das 21:00 UTC durante a semana, receberemos uma resposta do código de status 403 das edge locations da Azion.
Vamos customizar nossa resposta um pouquinho
Embora nossa função já esteja prevenindo acessos indevidos à nossa aplicação, podemos customizá-la para retornar uma mensagem mais significativa para os usuários. Para isso, vamos voltar ao JSON Args da nossa Function Instance e fazer algumas alterações. Ao alterarmos a “action” de nossa Function Instance de “deny” para “static_response”, podemos também definir um status code e uma mensagem para serem usados na resposta de bloqueio enviado pela edge function.
Ao fazermos essa mudança, o retorno efetuado pela edge function será o seguinte:
Ainda mais customizações
Certo, nossa edge function já está entregando uma resposta mais amigável aos usuários, porém ainda existe mais um nível de customização. Ao invés de utilizarmos a chave “static_response_data.message”, podemos substituí-la pelo “static_response_data.html”, que nos permite adicionar um HTML customizado a ser entregue pela função durante os períodos de bloqueio.
Portanto, se alterarmos o JSON Args para algo como:
Nossa resposta seria a seguinte:
Como a edge function nos permite inserir uma página HTML por completo, nós podemos adicionar também estilos CSS para deixar nossa resposta ainda mais agradável aos olhos do usuário. Portanto, ao usarmos o seguinte conteúdo no JSON Args:
Teríamos o seguinte resultado:
Legal, não?
Agregando outras funcionalidades
Agora temos uma agenda que nos permite bloquear os acessos de usuários durante os períodos em que nossa livestream está offline. Porém, digamos que nosso contrato com o campeonato de videogame apenas nos permita transmitir a competição no Brasil, Estados Unidos e México? Sem problemas, basta adicionarmos uma nova regra em nosso Edge Firewall!
Atualmente, as regras de nosso Edge Firewall devem estar assim:
Então, primeiramente, devemos habilitar o módulo do Network Layer Protection no Main Settings do nosso Edge Firewall (caso você ainda não tenha feito isso). Depois disso, iremos criar uma nova Network List do tipo “Country”, incluindo os países Brasil, Estados Unidos e México.
De volta ao nosso Edge Firewall, podemos criar uma nova regra, onde “droparemos” a conexão de qualquer requisição feita de fora dos países que desejamos.
Após isso, vamos reordenar nossas regras, de modo que a verificação de geolocalização seja feita antes da nossa edge function de agendamento de bloqueios, assim a função será usada apenas quando necessário.
Com isso, se tentarmos fazer uma requisição a partir do Chile, por exemplo, receberemos uma resposta vazia das edge locations da Azion.
E voilà! Nossa aplicação está protegida contra acessos durante horários indesejados e também contra acessos de localizações indesejadas!
Não tem acesso à função Schedule Blocking?
Ou crie uma conta na Azion
Você ganha US$ 300 em créditos de serviço para utilizar em nossa plataforma.