🚀 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 artculos 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 aplicacin Cliente utilizando Terraform, Aqu Link dejar el repositorio con el cdigo, recuerda cambiar el nombre de los buckets y las aplicaciones.
Estructura del repositorio:
https://github.com/olcortesb/cognito-terraform
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 ms, tenemos hasta 50 atributos custom para agregar. Ref
# 1. User Poolresource "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 cdigo crea nuestro User Pool
Una vez configurado el User Pool necesitamos crear una aplicacin Cliente que Sirva de integracin con las aplicaciones externas que se conectaran a travs de Cognito.
La App Cliente
La aplicacin cliente la desplegamos utilizando el recurso "aws_cognito_user_pool_client", los parmetros ms 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 aplicacin supported_identity_providers
# 2. App Clientresource "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 aplicacin 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 Domainresource "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 Clsico, y el dominio que hemos configurado.
En siguientes entrada mostrar como es el circuito de alta de usuario, conexin desde una app en Python y varias caractersticas ms,
gracias por leer, Saludos
Referencias
https://github.com/olcortesb/cognito-terraform
https://aws.amazon.com/es/blogs/security/use-the-hosted-ui-or-create-a-custom-ui-in-amazon-cognito/
https://olcortesb.hashnode.dev/aws-cognito-lambda-triggers
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cognito_user_pool
Artículo original: 🚀 Desplegar AWS Cognito 🔑 y una Aplicación Cliente Con Terraform.