🚀 Desplegar AWS Cognito 🔑 y una Aplicación Cliente Con Terraform.


En una entrada anterior contaba un poco sobre que es AWS Cognito Link, he estado realizando muchas pruebas con nuevas funcionalidades e identificando las posibilidades que tenemos para integrarla con nuestras aplicaciones.
He decidido armar una serie de artículos con distintas configuraciones e integraciones para entender en profundidad este servicio de AWS, y como siempre es mejor empezar por el principio.
Vamos a Desplegar AWS Cognito + una aplicación Cliente utilizando Terraform, Aquí Link dejaré el repositorio con el código, recuerda cambiar el nombre de los buckets y las aplicaciones.
Estructura del repositorio:
cognito.tf – Main Cognito resources configuration
config.tf – Terraform backend configuration
variables.tf – Input variables definition
maint.tf – AWS provider configuration
terraform.tfvars – Variable values for deployment
El “User pool”
Para definir el user pool utilizamos el recurso "aws_cognito_user_pool"
de Terraform, importante definir los atributos del usuario (recordar que Cognito tiene unos atributos predefinidos) y los atributos custom que se configura con un esquema más, tenemos hasta 50 atributos custom para agregar. Ref
# 1. User Pool
resource "aws_cognito_user_pool" "this" {
name = "olcb-community-user-pool"
username_attributes = ["email"]
auto_verified_attributes = ["email"]
admin_create_user_config {
allow_admin_create_user_only = false
}
# Configuraciones del password
password_policy {
minimum_length = 8
require_lowercase = true
require_uppercase = true
require_numbers = true
require_symbols = false
}
# habilitar attributo predefinido
schema {
name = "email"
attribute_data_type = "String"
required = true
mutable = true
}
# Atrributo custom
schema {
name = "custom_attr"
attribute_data_type = "Number"
required = false
mutable = true
number_attribute_constraints {
min_value = 1
max_value = 100
}
}
}
Esta parte del código crea nuestro User Pool
Una vez configurado el User Pool necesitamos crear una aplicación Cliente que Sirva de integración con las aplicaciones externas que se conectaran a través de Cognito.
La “App Cliente”
La aplicación cliente la desplegamos utilizando el recurso "aws_cognito_user_pool_client"
, los parámetros más importantes son la referencia al User Pool que creamos en el paso anterior, user_pool_id,
los flujos que aceptaremos allowed_auth_flows
y el proveedor de los que tengamos en Cognito que soportará esta aplicación supported_identity_providers
# 2. App Client
resource "aws_cognito_user_pool_client" "this" {
name = "olcb-app-client"
user_pool_id = aws_cognito_user_pool.this.id
generate_secret = false
allowed_oauth_flows_user_pool_client = true
allowed_oauth_flows = ["code", "implicit"]
allowed_oauth_scopes = ["email", "openid", "profile"]
explicit_auth_flows = ["ADMIN_NO_SRP_AUTH", "USER_PASSWORD_AUTH"]
callback_urls = ["https://example.com/callback"]
logout_urls = ["https://example.com/logout"]
supported_identity_providers = ["COGNITO"]
refresh_token_validity = 30
}
Este recurso generará la aplicación dentro de nuestro Cognito user pool
El “User Pool Domain”
Finalmente, asignamos un dominio para que nuestras URLs de login y alta de usuarios y LogOut:
# 3. User Pool Domain
resource "aws_cognito_user_pool_domain" "this" {
domain = "olcb-app-domain"
user_pool_id = aws_cognito_user_pool.this.id
}
En el apartado domain de nuestro Cognito User Pool tendremos la URI que hemos definido en el Terraform.
Pantalla de Login
Finalmente, tendremos operativo nuestro Cognito con un login “UI Clásico”, y el dominio que hemos configurado.
En siguientes entrada mostraré como es el circuito de alta de usuario, conexión desde una app en Python y varias características más,
gracias por leer, Saludos
Referencias
Subscribe to my newsletter
Read articles from Oscar Cortes Bracho directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Oscar Cortes Bracho
Oscar Cortes Bracho
Cloud Software Engineer