Amazon Cognito is where the SAA-C03 checks whether you can place application identity correctly. The scenarios rarely ask what Cognito is; they ask which piece of it solves a stated requirement, and whether you can keep it apart from IAM. Two clean distinctions carry almost every question.
User Pools: who the user is
A User Pool is a managed user directory for your app’s end-users. It handles sign-up, sign-in, password policies, multi-factor authentication, and a hosted UI, and it scales to millions of users with no servers for you to run or patch. After a successful sign-in it issues signed JSON Web Tokens — an ID token and an access token — that prove who the user is and carry their group claims.
That token is the payoff. A serverless backend behind Amazon API Gateway can validate it with a Cognito authorizer and admit only signed-in users, reading identity and group membership straight from the claims. The token proves identity to your application — it is not, by itself, an AWS credential.
Identity Pools: temporary AWS access
An Identity Pool (federated identities) answers the other half. It takes a trusted token — from a User Pool or a social provider — and exchanges it, through AWS STS, for short-lived temporary AWS credentials tied to an IAM role. Now the client can call AWS services directly: a mobile app can upload straight to its own prefix in an Amazon S3 bucket, or write to Amazon DynamoDB, with the role’s policy scoping each user to their own data.
The diagram traces the full path: an app user authenticates against the User Pool, presents the returned token to the Identity Pool, receives temporary credentials, and calls S3 and DynamoDB directly. The exam’s favourite trap is trying to hand a User Pool ID token straight to S3 as if it were a credential — it is not. Identity comes from the User Pool; AWS access comes from the Identity Pool.
Federation: bringing in existing identities
Users often already have identities elsewhere. A User Pool can act as a federation hub, accepting social logins (such as Google) and enterprise SAML identity providers, so customers sign in with credentials they already own and your app never stores a password. Downstream code still receives one consistent set of Cognito tokens regardless of where the user came from. This is distinct from IAM SAML federation, which grants a workforce access to the AWS console and APIs — not app customers to your app.
The line you must not cross: Cognito vs IAM
The single sharpest distinction: IAM identifies principals that operate the AWS account — employees, roles, and workloads using the console, CLI, or SDKs. Cognito identifies your application’s own end-users. Minting an IAM user per app customer is a genuine anti-pattern that collides with account limits and mismanages who your customers are. If the identity belongs to someone administering AWS, it is IAM; if it belongs to a customer of your app, it is Cognito.
How to use the seven scenarios below
Answer each before opening the explanation, and when you miss, name the requirement that decided it — “managed directory, no servers”, “call S3 directly from the device”, “sign in with Google”, “operators versus customers”. Every explanation states that deciding constraint and then takes apart the distractors, most of which are real AWS features solving a slightly different problem. That discrimination is the skill the exam measures. For the temporary-credential mechanics underneath Identity Pools, see IAM roles and STS, and for the wider picture, Design Secure Architectures.
Updated for SAA-C03 (July 2026). The sample questions above are our own work
in the style of the exam — not real exam items. The exam itself is set and marked
by the certification body.