Controle os acessos à sua plataforma com a função Scheduled Blocking

Leia o blog sobre aplicações com controle de acessos para determinados períodos de tempo com a função Scheduling Blocking da Azion.

Pablo Diehl - Serverless Software Developer
Vivian Seixas - Technical Researcher
Controle os acessos à sua plataforma com a função Scheduled Blocking

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.

Imagem com card da solução Scheduled Blocking do Marketplace da Azion

Imagem com card da solução Scheduled Blocking do Marketplace da Azion

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:

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

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:

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

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.

Imagem com mensagem da função scheduled blocking: error 403 forbidden

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.

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

Ao fazermos essa mudança, o retorno efetuado pela edge function será o seguinte:

Imagem com mensagem da função scheduled blocking: streaming is offline, come back later

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:

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

Nossa resposta seria a seguinte:

Imagem com mensagem da função scheduled blocking: the service is currently offline! See you at 6pm!

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:

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

Teríamos o seguinte resultado:

Imagem com mensagem da função scheduled blocking: our stream starts at 6pm

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:

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

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.

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

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.

scheduled blocking

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.

Imagem mostrando como controlar o acesso a aplicações com base em janelas de tempo

Com isso, se tentarmos fazer uma requisição a partir do Chile, por exemplo, receberemos uma resposta vazia das edge locations da Azion.

Imagem com mensagem da função scheduled blocking: the connection was reset

E voilà! Nossa aplicação está protegida contra acessos durante horários indesejados e também contra acessos de localizações indesejadas!

Você pode acessar uma versão funcional desta demonstração em: http://kq0ylaqisc.map.azionedge.net/.

Não tem acesso à função Schedule Blocking?

ACESSE AQUI

Ou crie uma conta na Azion

Você ganha US$ 300 em créditos de serviço para utilizar em nossa plataforma.

CRIAR CONTA AGORA

Azion
Criada para empresas, amada por desenvolvedores.

Inscreva-se na nossa Newsletter