aws.crafter.run

Cognito

Amazon Cognito

Autenticación gestionada que emite tokens JWT y te ahorra guardar contraseñas, a cambio de un esquema de usuario casi inmutable y una factura que crece por usuario activo.

Verificado el
Ver .md

Los tres conceptos

Si no entiendes estos tres, nada de lo demás encaja.

  1. 1

    User pools e identity pools no son lo mismo

    Un user pool es un directorio: registra usuarios, valida contraseñas y emite tokens JWT que tu API verifica. Un identity pool cambia una identidad por credenciales temporales de AWS para hablar directamente con S3 o DynamoDB. La mayoría de proyectos solo necesita el primero, y muchos montan el segundo sin saber por qué.

  2. 2

    Se factura por usuario activo mensual

    No por peticiones ni por almacenamiento: por MAU. Un usuario cuenta si en el mes hay una operación de identidad suya — alta, confirmación, inicio de sesión o respuesta a un desafío. La importación por CSV, según AWS, no cuenta. Eso hace la factura muy predecible y muy dependiente de tu producto, no de tu tráfico.

  3. 3

    El esquema de atributos es casi inmutable

    Son 50 atributos personalizados por user pool, con nombres de 20 caracteres, y ese límite no se amplía. Añadir campos al perfil sin planificarlo lleva a un pool que no se puede evolucionar y a una migración de usuarios, que es de las cosas más incómodas que existen.

Los límites

Hard es un muro: no se sube ni con un ticket. Soft se amplía pidiéndolo — antes del pico, no durante.

ConceptoValorTipo
Emails diarios por cuenta con el email por defectoLa trampa número uno. Solo aplica al email integrado; configurando SES el límite pasa a ser el de SES.50hard
Atributos personalizados por user poolCon nombres de 20 caracteres como mucho, y 2 048 bytes por valor.50hard
Usuarios por user pool40 000 000soft
User pools por región1 000 · ampliable a 10 000soft
App clients por user pool1 000 · ampliable a 10 000soft
Proveedores de identidad por user pool300 · ampliable a 1 000soft
Resource servers por user pool25 · ampliable a 300soft
Dominios personalizados por región4hard
Grupos por user pool10 000 · 100 grupos por usuariohard
URLs de callback y de logout por app client100 de cadahard
Scopes50 por app client · 100 por resource serverhard
Identidades federadas enlazadas a un usuario5hard
Autenticadores WebAuthn (passkeys) por usuario20hard
Longitud de la contraseña256 caracteres · mínimo configurable de 6 a 99hard
Caracteres en una respuesta SAML100 000hard
Cambios en el trigger de pre token generation5 000 claims y scopes combinadossoft
Ritmo de UserCreationSignUp, ConfirmSignUp, AdminCreateUser y AdminConfirmSignUp comparten cuota.50 peticiones/s combinadassoft
RespondToAuthChallengeSi el pool pide varios desafíos por inicio de sesión, el exceso se suma a la cuota de UserAuthentication y te estrangula antes de lo esperado.3× la cuota de UserAuthenticationsoft

Modelo mental

Cognito es dos productos con un nombre, y elegir el equivocado es el primer error del servicio:

User pool: un directorio que emite tokensusuariouser pooltu APItu códigousuario y claveJWTverifica la firmaIdentity pool: credenciales de AWS en el clienteusuarioidentity poolDynamoDBidentidadcredenciales temporales de AWSEl cliente firma peticiones a AWS por su cuenta — una superficie que casi nadie quiere gestionarSe factura por usuario activo mensual, no por peticiones · la factura crece con tu producto, no con tu tráfico
Dos productos con un nombre. La mayoría de las aplicaciones solo necesita el user pool: el usuario recibe un JWT y tu API lo valida. El identity pool reparte credenciales de AWS al navegador, y eso es una superficie que casi nadie quiere gestionar.
User pool Identity pool
Qué es un directorio de usuarios un intercambiador de credenciales
Qué te da tokens JWT credenciales temporales de AWS
Para qué que tu API sepa quién llama que el cliente hable con S3 o DynamoDB directamente
Lo necesitas si tienes usuarios el navegador va a firmar peticiones a AWS

La mayoría de las aplicaciones solo necesitan un user pool: el usuario se autentica, recibe un JWT, y API Gateway lo valida con un autorizador. El identity pool solo hace falta cuando el cliente tiene que llamar a un servicio de AWS directamente — y suele ser mejor evitarlo, porque reparte permisos de AWS a navegadores.

La factura no depende de tu tráfico

Cognito cobra por usuario activo mensual. Un usuario cuenta si en el mes hay una operación de identidad suya: alta, confirmación, inicio de sesión o respuesta a un desafío. Las operaciones que autorizas con un token de acceso ya emitido no suman.

Eso tiene dos consecuencias prácticas: la factura es muy predecible —crece con tu producto, no con tus picos— y es indiferente a que un usuario entre una vez o mil. La importación masiva por CSV, además, no cuenta como actividad.

El esquema que no se puede rehacer

Un user pool admite 50 atributos personalizados, con nombres de 20 caracteres, y ese límite no se amplía. Sumado a que evolucionar el esquema de un pool en producción es incómodo, la conclusión práctica es clara: guarda en Cognito lo mínimo para autenticar —identificador, email, poco más— y el perfil de usuario en tu propia base de datos, donde puedes cambiarlo.

Cómo te factura

Concepto Cómo se paga
Usuarios activos mensuales por MAU, con tramos decrecientes
MAU federados con SAML/OIDC tarifa propia, más cara
Capa gratuita un número generoso de MAU al mes
SMS para MFA aparte, y no es barato

La regla mental: pagas por personas, no por peticiones. Es de los pocos servicios de AWS donde eso es cierto, y hace que el coste sea fácil de proyectar desde el plan de negocio en vez de desde la arquitectura.

Los MAU federados con SAML u OIDC —el caso empresarial— tienen tarifa propia y bastante más alta. Si vendes a empresas con SSO, esa línea es la que crece.

Cuándo NO usarlo

Errores comunes

Meter el perfil de usuario en Cognito. Los 50 atributos personalizados y los 20 caracteres de nombre se agotan antes de lo que parece, y el esquema no es fácil de evolucionar. Cognito para autenticar, tu base de datos para el perfil.

Montar un identity pool sin necesitarlo. Si tu cliente llama a tu API y tu API llama a AWS, no hace falta. El identity pool reparte credenciales de AWS al navegador, que es una superficie que casi nadie quiere gestionar.

Ignorar el desafío múltiple. RespondToAuthChallenge tiene una cuota de tres veces la de UserAuthentication. Si tu pool pide MFA más autenticación de dispositivo, cada inicio de sesión gasta varias respuestas, y el exceso se suma a la cuota de autenticación y estrangula antes de lo que sugieren los números sueltos.

Validar el token llamando a Cognito. Un JWT se verifica localmente con las claves públicas del pool. Llamar al servicio en cada petición añade latencia y consume cuota sin ninguna necesidad.

Olvidar los 4 dominios personalizados por región. En una cuenta con varios entornos, ese número se alcanza antes de lo esperado.

Fuentes

Atributos personalizados, longitud de nombres y valores, usuarios y user pools, app clients, proveedores de identidad, resource servers, dominios personalizados, grupos, URLs de callback, scopes, identidades enlazadas, passkeys, contraseñas, respuestas SAML, límite de 50 correos diarios y cuotas por categoría de operación, incluido el factor 3× de RespondToAuthChallenge: Quotas in Amazon Cognito. La definición de usuario activo mensual y qué operaciones cuentan procede de esa misma página. Los importes proceden de la página de precios de AWS, que se renderiza dinámicamente y no pudo citarse literalmente.

Dónde aparece esto

Todavía ningún patrón escrito lo usa.