Amazon Cognito handles customer identity for applications. It has two main components:
The textbook Cognito incident is credential stuffing against a user pool that runs plain username-password authentication with MFA off and threat protection never enabled. Users reuse passwords across sites, breach dumps circulate, and an attacker replaying leaked credential pairs against your sign-in endpoint will land a percentage of them; this is exactly the attack Cognito's compromised-credentials detection exists to catch, since it compares your users' credentials against known leaked credential lists and commonly guessed passwords. Teams that do enable threat protection still trip over its documented boundaries: compromised-credentials detection works on username-and-password flows but has no access to passwords in SRP sign-in, threat protection does not apply to federated sign-in at all, it applies no rate limits (volumetric abuse is AWS WAF's job), and it does not monitor machine-to-machine client-credentials traffic. Each of those is a gap someone assumed was covered. On the identity pool side, the classic misconfiguration is the over-privileged guest: unauthenticated identities are mapped to an IAM role that was scoped generously during development, meaning anyone on the internet can mint temporary AWS credentials and use whatever that role allows, no password required. Review the unauthenticated role as if it were a public API, because it is one. Finally, watch the authentication flows enabled on each app client: leaving USER_PASSWORD_AUTH enabled when your app only uses SRP hands attackers a simpler oracle for password guessing.
Dump the pool configuration and read it critically:
aws cognito-idp describe-user-pool --user-pool-id eu-west-1_EXAMPLE
Check MfaConfiguration (OFF, ON, or OPTIONAL; note that adaptive authentication's risk-based MFA requires MFA to be set to optional so it can escalate selectively), the password policy block, deletion protection, and the account recovery settings. Then in the console, open the user pool's Threat protection menu and confirm the enforcement mode: audit-only gathers risk metrics without acting, and AWS recommends running audit-only for two weeks or more before switching to full-function mode so you can tune against false positives.
What happened to "advanced security features"?
They were renamed threat protection and are available in the Plus feature plan. The capabilities are compromised-credentials detection, adaptive authentication with risk scoring, IP address allow and block lists, and log export of threat assessments to S3, CloudWatch Logs, or Data Firehose.
Does threat protection cover all sign-in paths?
No. It supports username-password flows fully and adaptive authentication for SRP, but compromised-credentials checks cannot see SRP passwords, custom authentication has its own separate enforcement configuration, and federated sign-in through external identity providers is not covered. Map your actual authentication flows against these boundaries before assuming protection.
What should the automated responses be?
Cognito lets you assign responses per risk level: allow, optional MFA, require MFA, or block, with optional user notification emails. A common progression is notify on low risk, require MFA on medium, block on high. You can set these globally per user pool and override them per app client, and you cannot assign a weaker response to a higher risk level.
Are user pools and identity pools interchangeable?
No, and the distinction is security-critical. User pools authenticate people and issue JWTs your application verifies. Identity pools exchange tokens (or nothing, for guest access) for temporary AWS credentials via STS. A weakness in user pool configuration exposes your application; a weakness in identity pool role mapping exposes your AWS account. Audit the two with different checklists, because the failure modes and the blast radii are entirely different.
A security mechanism requiring two or more forms of verification (password + device/token) before granting access to an AWS account or resource.
The process of allowing external identities (corporate directory, social providers) to access AWS resources without creating IAM users, using SAML, OIDC, or IAM Identity Center.
Short-lived AWS credentials (access key, secret key, session token) issued by STS that expire automatically, eliminating the risk of permanent credential exposure.
A security model where no user, device, or network is trusted by default - every access request is verified regardless of location, using identity-based policies and continuous validation.
Toc Consulting: AWS Security & Cloud Architecture
Our team helps engineering teams secure and architect AWS the right way: assessment in week one, a prioritized action plan in week two.