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

olcortesb @olcortesb

About: Cloud / Software Architect

Location:
San lorenzo de el escorial
Joined:
Oct 8, 2023

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

Publish Date: Jul 1
0 0

Source: https://olcortesb.hashnode.dev/habilitar-mfa-multi-factor-authentication-en-aws-cognito-usando-terraform

En un post anterior, comentaba como desplegar AWS Cognito y una aplicación cliente utilizando Terraform. Este artículo es parte de la serie que comente realizaría sobre Cognito + Terraform. En el post de hoy nos centraremos en ver como habilitar el Multi Factor de Autenticación 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 código 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 definición del Cognito, además de activar el mfa_configuration es necesario activar el software_token_mfa_configuration, acorde a las definiciones y documentación de Terraform:

  // cognito.tf
resource "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
  }
  ...
}
Enter fullscreen mode Exit fullscreen mode

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 SNS
resource "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 Role
resource "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
      }
    ]
  })
}
Enter fullscreen mode Exit fullscreen mode

Configurando el Sandbox para el envío de mensajes:

Es necesario para las pruebas habilitar los números de teléfono en un ambiente de sandbox controlado los teléfonos a los que permitiremos el envío de mensaje, es recomendado probar primero en sandbox antes de pasa a un esquema productivo

Cognito MFA Terraform 1

Es necesario dar de alta los teléfonos que vamos a utilizar en las pruebas.

Cognito MFA Terraform 1.1

Damos de alta un usuario:

En esta configuración no habilitamos la autoverificación del teléfono para asegurarnos que el usuario cargue un teléfono válido

Cognito MFA Terraform 2

Cognito MFA Terraform 3

Prueba de Login:

A continuación un video de ejemplo de como funciona el doble factor de autenticación en Cognito:

Conclusiones

  • Hemos habilitado el MFA con Terraform agregando una configuración al Cognito y un par de Policy y roles.

  • Hemos habilitado el Sandbox, con números de teléfono específicos 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

Comments 0 total

    Add comment