iot-cognito ============= Resumen ------- Este proyecto crea la infraestructura de identidad y autenticación para un proyecto IoT educativo usando Amazon Cognito. El objetivo es proporcionar un User Pool y un App Client que puedan ser consumidos por otros proyectos (por ejemplo, una API y un frontend Vue) sin contener lógica de aplicación, Lambdas, APIs ni almacenamiento de datos. Qué problema resuelve ---------------------- Proporciona una fuente centralizada de usuarios y credenciales (Cognito User Pool) y un App Client para una SPA (Vue) de modo que otras aplicaciones puedan autenticarse y validar JWTs emitidos por Cognito. Recursos que crea ----------------- - AWS::Cognito::UserPool (iot-dashboard-users) - AWS::Cognito::UserPoolClient (iot-dashboard-vue) Ambos recursos incluyen tags para facilitar identificación (Project: iot-project, Component: cognito, Environment: dev). Outputs ------- El stack exporta los siguientes valores (Outputs + Exports): - UserPoolId - UserPoolClientId - UserPoolArn Estos valores serán consumidos por los proyectos: - iot-lambda-dashboardApi - iot-front-dashboard Validar el template ------------------- Usar el validador de CloudFormation: ```bash aws cloudformation validate-template \ --template-body file://template.yml ``` Desplegar el stack ------------------ Desplegar con AWS CLI. Este template no crea roles ni recursos IAM nombrados, por lo que no es necesario pasar CAPABILITY_NAMED_IAM. ```bash aws cloudformation deploy \ --template-file template.yml \ --stack-name iot-cognito ``` Si el despliegue falla por permisos relacionados con IAM (no esperado para este template), añadir la capability requerida: ```bash aws cloudformation deploy \ --template-file template.yml \ --stack-name iot-cognito \ --capabilities CAPABILITY_NAMED_IAM ``` Obtener los Outputs ------------------- Para ver los Outputs directamente desde el stack: ```bash aws cloudformation describe-stacks \ --stack-name iot-cognito \ --query "Stacks[0].Outputs" --output table ``` O listar los Exports (útil si otro stack los importa): ```bash aws cloudformation list-exports --query "Exports[?starts_with(Name, 'iot-cognito')]==[] || Exports" --output table ``` Eliminar el stack ----------------- ```bash aws cloudformation delete-stack --stack-name iot-cognito ``` Notas de uso ------------ - El App Client creado es público (GenerateSecret: false) y está pensado para una SPA (Vue). No se incluye client secret. - No se crean Lambdas, API Gateway, S3, DynamoDB ni otros recursos fuera del alcance de identidad/usuario. - Mantener este proyecto simple y didáctico facilita que los alumnos entiendan Cognito: User Pools, App Clients, credenciales y JWTs. Cómo consumir los valores desde otros stacks ------------------------------------------- En otros templates CloudFormation se puede usar `Fn::ImportValue` con los nombres exportados. Por ejemplo: ```yaml Parameters: CognitoUserPoolId: Type: String Default: !ImportValue "iot-cognito-UserPoolId" ``` Ajustar el nombre del export si el stack se despliega con otro nombre distinto a `iot-cognito`. Contacto -------- Proyecto educativo preparado para ser utilizado por los ejercicios de la materia.