▶️ Habilitar MFA (Multi-Factor Authentication)🔐 en AWS Cognito usando Terraform

3 min de lectura Ver original en Hashnode
Compartir:

En un post anterior, comentaba como desplegar AWS Cognito y una aplicacin cliente utilizando Terraform. Este artculo es parte de la serie que comente realizara sobre Cognito + Terraform. En el post de hoy nos centraremos en ver como habilitar el Multi Factor de Autenticacin en Cognito con Terraform y realizaremos algunas pruebas.

Estructura del repositorio:

Similar al repositorio anterior, pero ahora en una nueva rama add-mfa-configuration tenemos el cdigo de Terraform para desplegar nuestra infraestructura.

https://github.com/olcortesb/cognito-terraform/tree/feat/add-mfa-configuration

cognito.tf Main Cognito resources configuration

config.tf Terraform backend configuration

variables.tf ** Input variable definition**

maint.tf AWS provider configuration

sns_sms.tf Role and policy for SMS

terraform.tfvars Variable values for deployment

Habilitando el MFA:

Para habilitar el MFA es necesario agregar dentro de la definicin del Cognito, adems de activar el mfa_configuration es necesario activar el software_token_mfa_configuration, acorde a las definiciones y documentacin de Terraform:

 // cognito.tfresource "aws_cognito_user_pool" "this" { ... mfa_configuration = "ON" sms_authentication_message = "Your code is {####}" sms_configuration { external_id = "cognito-external-id" sns_caller_arn = aws_iam_role.cognito_sms_role.arn sns_region = var.region } software_token_mfa_configuration { enabled = true } ...}

Creando Roles y Policy

El archivo sns_sms.tf tiene los roles y Policy necesarios para el Cognito.

# IAM Role for Cognito to send SMS via SNSresource "aws_iam_role" "cognito_sms_role" { name = "cognito-sms-role" assume_role_policy = jsonencode({ Version = "2012-10-17", Statement = [ { Effect = "Allow", Principal = { Service = "cognito-idp.amazonaws.com" }, Action = "sts:AssumeRole", Condition = { StringEquals = { "sts:ExternalId" = "cognito-external-id" } } } ] })}# IAM Policy for Cognito SMS Roleresource "aws_iam_role_policy" "cognito_sms_policy" { name = "cognito-sms-policy" role = aws_iam_role.cognito_sms_role.id policy = jsonencode({ Version = "2012-10-17", Statement = [ { Effect = "Allow", Action = [ "sns:Publish" ], Resource = "*" // Remplazar por el resources para ambientes productivos } ] })}

Configurando el Sandbox para el envo de mensajes:

Es necesario para las pruebas habilitar los nmeros de telfono en un ambiente de sandbox controlado los telfonos a los que permitiremos el envo de mensaje, es recomendado probar primero en sandbox antes de pasa a un esquema productivo

Es necesario dar de alta los telfonos que vamos a utilizar en las pruebas.

Damos de alta un usuario:

En esta configuracin no habilitamos la autoverificacin del telfono para asegurarnos que el usuario cargue un telfono vlido

Prueba de Login:

A continuacin un video de ejemplo de como funciona el doble factor de autenticacin en Cognito: https://youtu.be/trigdzzkFFY

Conclusiones

Hemos habilitado el MFA con Terraform agregando una configuracin al Cognito y un par de Policy y roles.

Hemos habilitado el Sandbox, con nmeros de telfono especficos para las pruebas del Cognito.

Importante para remover el MFA por seguridad es necesario dar de baja el Cognito, tener en cuenta para ambientes productivos.

Referencias

https://youtu.be/trigdzzkFFY

https://olcortesb.hashnode.dev/desplegar-aws-cognito-y-una-aplicacion-cliente-con-terraform

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cognito_user_pool


Artículo original: ▶️ Habilitar MFA (Multi-Factor Authentication)🔐 en AWS Cognito usando Terraform