¿Alguna vez has querido controlar el acceso a tu aplicación para que los usuarios solo puedan acceder a ella durante un período específico del día? Digamos que somos los responsables por hacer la transmisión en vivo de un campeonato de videojuegos, toda la semana, entre las 6 y las 9 de la noche. Obviamente, podríamos crear una respuesta fija en nuestro servidor durante los períodos en que la transmisión está fuera de línea, sin embargo, en ese caso recibiríamos muchas solicitudes y consumiríamos los recursos de nuestro servidor con solicitudes no deseadas.
Pues bien, Azion tiene una nueva función que puede ayudarte a resolver este problema: Edge function Scheduled Blocking.
Edge function Scheduled Blocking permite controlar el acceso a tus aplicaciones de acuerdo a ventanas de tiempo, directamente desde nuestras edge locations. De esa forma, los usuarios solo tendrán acceso a tu infraestructura cuando realmente la necesiten.
En este artículo, te enseñaremos cómo usar esta nueva función.
Primero, obtengamos la función en el Azion Marketplace
Como se trata de una función gratuita, todo lo que necesitas hacer es buscar y adquirir la función en nuestro Marketplace.
En seguida, vamos a usarla
Una vez que hayamos adquirido la edge function, podemos usarla en nuestros Edge Firewalls (cualquiera que tenga el módulo Edge Functions activado). Luego, nuestro siguiente paso es acceder a la sección de funciones de Edge Firewall responsable de proteger nuestro Edge Application (o crear un nuevo Edge Firewall, en caso de que nuestra aplicación no cuente con un Edge Firewall vinculado) y crear una nueva Function Instance (instancia de función) de la función Scheduled Blocking.
Los JSON Args básicos de nuestra nueva instancia de función se verían así:
En un breve resumen sobre nuestros JSON Args, tenemos dos horarios, ya que nuestra regla es ligeramente diferente durante los días entre semana y los fines de semana.
En el primer horario, que como puedes ver arriba en el campo “week_days” (días de la semana) está activo de lunes a viernes, ejecutaremos la “action” (acción) “deny_‘_(denegar); es decir, que bloquearemos la solicitud cuando la función se ejecute fuera del intervalo, por lo que “execute_action_when” (cuando ejecutar la acción) se establece en “not_in_interval” (sin intervalo) de 21:00 a 23:59. Y recuerda que la función siempre se basa en la hora UTC, en formato de 24 horas.
El segundo horario se utiliza los fines de semana. Como en estos dos días no queremos recibir ningún tipo de acceso, utilizamos un intervalo que va desde las 00:00 hasta las 23:59; es decir, todo el día.
Una vez creada nuestra Function Instance, el siguiente paso es agregarla a una Rule Engine (motor de reglas). En este ejemplo, queremos ejecutar la función para todas las rutas de nuestra aplicación, por lo que la regla se vería así:
Una vez que se propagan los cambios, siempre que intentemos acceder a nuestra aplicación durante el final de semana o antes de las 21:00 UTC, de lunes a viernes, recibiremos una respuesta de código de estado 403 de las edge locations de Azion.
Personalicemos un poco nuestra respuesta
Aunque nuestra función ya impide el acceso no autorizado a nuestra aplicación, podemos personalizarla para responder con un mensaje más significativo a los usuarios. Para eso, volvamos a JSON Args de nuestra Function Instance y hagamos algunos cambios. Al cambiar la “action” de nuestra Function Instance de “deny” a “static_response” (respuesta fija), también podemos definir un código de estado y un mensaje para usarlo en la respuesta de bloqueo enviada por la edge function.
Cuando hagamos este cambio, la edge function devolverá esta respuesta:
Aún más personalizaciones
Bien, nuestra edge function ya ofrece una respuesta a los usuarios más fácil de usar, pero todavía disponemos de un nivel más de personalización. En lugar de usar la clave “static_response_data.message” (mensaje de datos de respuesta fija), podemos reemplazarla con “static_response_data.html” (datos de respuesta estáticos html), lo que nos permite agregar un HTML personalizado que la función podrá mostrar los períodos de bloqueo.
Por lo tanto, si cambiamos JSON Args a algo como:
Nuestra respuesta sería la siguiente:
Como Edge Function nos permite insertar una página HTML completa, también podemos agregar estilos CSS para que nuestra respuesta sea más estética para el usuario. Así, si usamos el siguiente contenido en JSON Args:
Tendremos el siguiente resultado:
Excelente, ¿no?
Agregar otras funcionalidades
Ahora tenemos una agenda que nos permite bloquear el acceso de los usuarios durante los períodos en que nuestra transmisión en vivo está fuera de línea. Pero, ¿y si resulta que nuestro contrato con el campeonato de videojuegos solo nos permite transmitir la competición en Brasil, Estados Unidos y México? ¡No hay problema, basta con agregar una nueva regla a nuestro Edge Firewall!
En este momento, nuestras reglas de Edge Firewall deberían verse así:
Entonces, primero deberás habilitar el módulo Network Layer Protection en Main Settings (Configuración principal) en Edge Firewall (si aún no lo has hecho) y después crear una nueva Network List del tipo “Country” (país) en los que estén incluidos los países Brasil, Estados Unidos y México.
De vuelta a Edge Firewall podemos crear una nueva regla donde “descartaremos” la conexión de cualquier solicitud realizada desde fuera de los países que queramos.
Después de eso, vamos a reordenar nuestras reglas para que la verificación de geolocalización se realice antes de nuestra edge function de programación de bloqueos, de modo que la función solo se use cuando sea necesario.
Como resultado, si intentamos realizar una solicitud desde Chile, por ejemplo, recibiremos una respuesta vacía de las edge locations de Azion.
¡Y voilá! ¡Nuestra aplicación estará protegida contra accesos en horarios y ubicaciones no deseados!
¿Aún no tienes acceso a la función Schedule Blocking?
O crea una cuenta en Azion
Gana 300 USD en créditos a utilizar en nuestra plataforma en hasta 12 meses.