DEV Community

camilo cabrales
camilo cabrales

Posted on • Updated on

Autenticación de doble factor con Step Functions

La autenticación de doble factor lo están utilizando mucho los bancos para confirmar que somos las personas dueñas de la cuenta y no se esta realizando una suplantación para tomar nuestro dinero.

En el banco donde tengo mi cuenta de ahorros cuando, voy a realizar una transacción me solicitan que digite 4 números, estos números pueden ser enviados por SMS a mi celular o a mi correo electrónico.

Vamos a ver como podemos simular este proceso utilizando Step Functions de AWS.

Para este ejemplo vamos a utilizar los siguientes servicios:

Step Functions: Definición del flujo.
SNS: Envío de mensajes de texto.
SES: Envio de email.
IAM: Definición de roles

Empecemos con la configuración de SES para realizar el envío de nuestros correos.

  1. Buscamos SES en el barra de búsqueda de servicios, vamos a ver una pantalla como la siguiente. Y damos click en Create Identity o en Verified identities

Main SES

2.En la siguiente pantalla vamos a configurar el correo por el cual queremos que se envíen nuestros mensajes. Después de colocar nuestro correo damos click en Create Identity.

Main SES

El siguiente paso es ingresar a nuestro correo y dar click en el enlace de confirmación para que el correo sea verificado y podamos enviar mensajes a través de SES.

Nota: El correo que se utiliza en este ejemplo es de mailinator que es una plataforma gratuita para un buzon temporal de correo de pruebas.

Confirmation Email

3.Lo siguiente que debemos hacer es buscar el servicio de Step Functions para la creación de nuestro flujo. Ya en la pagina inicial damos click en Create State Machine.

Create State Machine

4.En la siguiente pantalla vamos a definir cómo vamos a trabajar nuestro flujo de trabajo.

En nuestro caso vamos a seleccionar la opción del diseño visual, que es un diseñador de nuestro flujo que convierte este diseño en un texto 'JSON'. También podemos diseñar nuestro flujo escribiendo directamente el texto en formato 'JSON' o subiendo una plantilla de CloudFormation (Infraestructura como código). El tipo de flujo que utilizaremos es Standard.

Config State Machine

5.Al dar click en Next vamos a ver la pantalla de inicio del diseñador del Work Flow.

Work Flow Design

En la sección 1, vamos a encontrar todos los servicios que se pueden utilizar dentro del work flow de Step Functions.

En la sección 2, vamos a encontrar los tipos de flujos que podemos utilizar.

En la sección 3, vemos el work flow que estamos diseñando.

En la sección 4, vemos las opciones para el elemento (Servicio o Flujo) que este seleccionado en el momento.

6.Iniciemos con la creación del primer paso de nuestro flujo que es del tipo Choice. Este tipo de flujo nos sirve para definir condiciones del tipo if else, donde vamos a definir dos condiciones: que la entrada sea igual a SMS y la otra condición que sea igual a EMAIL.

First Step

Ahora vamos a definir nuestras reglas.

First Rule

Para agregar la segunda regla le debemos dar click en el botón Add new choice rule

Second Rule

7.Después de tener definidas nuestras reglas debemos definir cuál servicio va ser ejecutado.
Iniciemos buscando el servicio de SNS para el envió de mensajes de texto, seleccionamos SNS Publish y lo arrastramos a nuestro flujo.

Select SNS

Ahora que tenemos el servicio en nuestro flujo debemos realizar su configuración. Damos click en Edit as JSON y colocamos el mensaje y el numero de teléfono.

Select SNS

{
  "PhoneNumber.$": "$.data.numerotelefono",
  "Message": "Hola"
}
Enter fullscreen mode Exit fullscreen mode

PhoneNumber.$ : Indica que la propiedad va a ser utilizada como parametro.
$.data.numerotelefono: es el campo que se va utilizar del JSON de entrada del Work Flow.

8.Ahora debemos agregar el servicio SES que nos va a servir para el envió del correo electrónico.Buscamos el servicio SES y seleccionamos Amazon SES V1 Send Email

Select SES

En la sección Api Parameters vamos a reemplazar el JSON predeterminado por el siguiente:

{
  "Destination": {
    "ToAddresses.$": "$.data.para"
  },
  "Message": {
    "Body": {
      "Text": {
        "Data.$": "$.data.mensaje"
      }
    },
    "Subject": {
      "Data": "Mensaje Step Function"
    }
  },
  "Source.$": "$.data.de"
}
Enter fullscreen mode Exit fullscreen mode

Source.$: Debemos colocar el correo autorizado en SES para el envió de correos.

9.Como en nuestro flujo quedo una opción por defecto podemos hacer dos cosas.
Entrar en la edición de la opción Default y dar en el bóton Clear para que ya no este en el flujo o podemos agregar un flujo de error.Para nuestro caso vamos agregar un flujo de error.

Error Flow

Podemos configurar el mensaje del tipo de error o de la causa en la sección de configuración (son opcionales).

10.Ahora que tenemos definido nuestro flujo vamos a dar click en el botón Next.

Error Flow

En la pantalla nuestra el diseño de nuestro flujo y el 'JSON' que genero el diseñador.

11.En la siguiente pantalla le asignamos un nombre a nuestro Work Flow, seleccionamos Create new role y seleccionamos en la sección de Log level ALL, que nos va a servir para ver en detalle cómo se ejecuto nuestro Flujo.

Create Flow

12.En el caso que el rol que creamos no se le hallan asignado los permisos para enviar correos, debemos ir al ROL en IAM y asignarle los permisos totales sobre SES (Solo para pruebas).

13.Ahora que tenemos todo configurado, vamos a ejecutar nuestro Work Flow dando click en el bóton Start Execution.

Start Execution

Vamos a iniciar con la prueba del envió del mensaje de texto. Ingresamos el siguiente mensaje de JSON:

{
  "data":{
    "tipo":"SMS",
    "numerotelefono":"573105015690"
}
}
Enter fullscreen mode Exit fullscreen mode

EL numero de teléfono esta compuesto por él indicativo del país y el numero de teléfono. En este caso es un numero (ejemplo) de Colombia.

Start Execution SNS

Después de ejecutar nuestro Work Flow vamos a ver gráficamente cómo se realizo la ejecución y el detalle del log.

Result Execution SNS

Con esto hemos realizado la creación, configuración y ejecución de nuestro Work Flow.

Los invito a que realicen la ejecución del Work Flow para el envío de correo o para que el flujo se ejecute donde no cumple ninguna de las condiciones.

{
  "data":{
    "tipo":"EMAIL",
    "para":["prueba@gmail.com"],
     "mensaje":"Hola mundo",
     "de":"prueba@mailinator.com"
   }
}
Enter fullscreen mode Exit fullscreen mode

Referencias

Step Functions

Me pueden encontrar en

Camilo Cabrales

Oldest comments (0)