| name | cognito |
| description | Manage Amazon Cognito user pools, identity pools, users, groups, and authentication settings via AWS CLI. |
| metadata | {"openclaw":{"emoji":"🔐","requires":{"bins":["aws"]}}} |
Amazon Cognito
Use this skill for identity and authentication: managing user pools and identity pools, creating and managing users and groups, configuring app clients, setting up MFA, and managing federation with social/SAML/OIDC providers.
Prerequisites
- AWS CLI v2 configured with valid credentials
- IAM permissions:
cognito-idp:*, cognito-identity:* for full access
Common Operations
User Pools (Read-Only)
aws cognito-idp list-user-pools --max-results 20 \
--query 'UserPools[*].[Id,Name,Status,CreationDate]' --output table
aws cognito-idp describe-user-pool --user-pool-id <pool-id>
aws cognito-idp list-users --user-pool-id <pool-id> \
--query 'Users[*].[Username,UserStatus,Enabled,UserCreateDate]' --output table
aws cognito-idp list-users --user-pool-id <pool-id> \
--filter 'email = "user@example.com"'
aws cognito-idp list-users --user-pool-id <pool-id> \
--filter 'status = "Enabled"'
aws cognito-idp admin-get-user --user-pool-id <pool-id> --username <username>
aws cognito-idp list-groups --user-pool-id <pool-id> \
--query 'Groups[*].[GroupName,Description,Precedence]' --output table
aws cognito-idp list-users-in-group \
--user-pool-id <pool-id> \
--group-name <group-name>
aws cognito-idp list-user-pool-clients --user-pool-id <pool-id> \
--query 'UserPoolClients[*].[ClientId,ClientName]' --output table
aws cognito-idp describe-user-pool-client \
--user-pool-id <pool-id> \
--client-id <client-id>
aws cognito-idp list-identity-providers --user-pool-id <pool-id> \
--query 'Providers[*].[ProviderName,ProviderType]' --output table
aws cognito-idp list-resource-servers --user-pool-id <pool-id>
Identity Pools (Read-Only)
aws cognito-identity list-identity-pools --max-results 20 \
--query 'IdentityPools[*].[IdentityPoolId,IdentityPoolName]' --output table
aws cognito-identity describe-identity-pool --identity-pool-id <pool-id>
aws cognito-identity get-identity-pool-roles --identity-pool-id <pool-id>
User Management
aws cognito-idp admin-create-user \
--user-pool-id <pool-id> \
--username <username> \
--user-attributes Name=email,Value=user@example.com Name=email_verified,Value=true \
--temporary-password "<temp-password>"
aws cognito-idp admin-create-user \
--user-pool-id <pool-id> \
--username <username> \
--user-attributes Name=email,Value=user@example.com Name=email_verified,Value=true \
--message-action SUPPRESS
aws cognito-idp admin-set-user-password \
--user-pool-id <pool-id> \
--username <username> \
--password "<password>" \
--permanent
aws cognito-idp admin-add-user-to-group \
--user-pool-id <pool-id> \
--username <username> \
--group-name <group-name>
aws cognito-idp admin-remove-user-from-group \
--user-pool-id <pool-id> \
--username <username> \
--group-name <group-name>
aws cognito-idp admin-disable-user \
--user-pool-id <pool-id> \
--username <username>
aws cognito-idp admin-enable-user \
--user-pool-id <pool-id> \
--username <username>
aws cognito-idp admin-reset-user-password \
--user-pool-id <pool-id> \
--username <username>
aws cognito-idp admin-update-user-attributes \
--user-pool-id <pool-id> \
--username <username> \
--user-attributes Name=custom:role,Value=admin
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <pool-id> \
--username <username>
aws cognito-idp admin-user-global-sign-out \
--user-pool-id <pool-id> \
--username <username>
Create and Configure
⚠️ Cost note: Cognito free tier: 50,000 MAU (monthly active users) for user pools. Beyond that: $0.0055/MAU. SAML/OIDC federation: $0.015/MAU. Advanced security: $0.050/MAU.
aws cognito-idp create-user-pool \
--pool-name <pool-name> \
--auto-verified-attributes email \
--username-attributes email \
--mfa-configuration OFF \
--policies '{"PasswordPolicy": {"MinimumLength": 8, "RequireUppercase": true, "RequireLowercase": true, "RequireNumbers": true, "RequireSymbols": false}}'
aws cognito-idp create-group \
--user-pool-id <pool-id> \
--group-name <group-name> \
--description "Admin users" \
--precedence 1
aws cognito-idp create-user-pool-client \
--user-pool-id <pool-id> \
--client-name <client-name> \
--explicit-auth-flows ALLOW_USER_PASSWORD_AUTH ALLOW_REFRESH_TOKEN_AUTH \
--generate-secret
aws cognito-idp create-user-pool-client \
--user-pool-id <pool-id> \
--client-name <client-name> \
--explicit-auth-flows ALLOW_USER_SRP_AUTH ALLOW_REFRESH_TOKEN_AUTH \
--no-generate-secret \
--supported-identity-providers COGNITO \
--callback-urls "http://localhost:3000/callback" \
--logout-urls "http://localhost:3000/logout" \
--allowed-o-auth-flows code \
--allowed-o-auth-scopes openid email profile \
--allowed-o-auth-flows-user-pool-client
aws cognito-idp create-user-pool-domain \
--user-pool-id <pool-id> \
--domain <unique-domain-prefix>
aws cognito-idp set-user-pool-mfa-config \
--user-pool-id <pool-id> \
--mfa-configuration ON \
--software-token-mfa-configuration Enabled=true
aws cognito-identity create-identity-pool \
--identity-pool-name <pool-name> \
--allow-unauthenticated-identities \
--cognito-identity-providers '[{
"ProviderName": "cognito-idp.<region>.amazonaws.com/<user-pool-id>",
"ClientId": "<app-client-id>"
}]'
Delete / Destructive
🛑 DESTRUCTIVE — Always confirm with the user before executing any of these commands.
aws cognito-idp admin-delete-user \
--user-pool-id <pool-id> \
--username <username>
aws cognito-idp delete-group \
--user-pool-id <pool-id> \
--group-name <group-name>
aws cognito-idp delete-user-pool-domain \
--user-pool-id <pool-id> \
--domain <domain>
aws cognito-idp delete-user-pool --user-pool-id <pool-id>
aws cognito-identity delete-identity-pool --identity-pool-id <pool-id>
Safety Rules
- NEVER delete user pools without explicit user confirmation — all users are permanently lost.
- NEVER expose or log passwords, client secrets, or tokens.
- ALWAYS confirm the user pool ID before user management operations.
- ALWAYS warn before disabling or deleting users.
- WARN about the impact of changing auth flows on existing app clients.
- WARN that deleting a user pool domain breaks all hosted UI integrations.
Best Practices
- Enable MFA for production user pools (at least optional).
- Use SRP auth flow for browser/mobile clients (never send plain passwords).
- Set appropriate password policies.
- Use groups with IAM role mappings for authorization.
- Enable advanced security features for production (adaptive auth, compromised credentials).
Common Patterns
Pattern: Admin Login Test
aws cognito-idp admin-initiate-auth \
--user-pool-id <pool-id> \
--client-id <client-id> \
--auth-flow ADMIN_USER_PASSWORD_AUTH \
--auth-parameters USERNAME=<username>,PASSWORD=<password>
Pattern: Bulk User Export
aws cognito-idp list-users --user-pool-id <pool-id> \
--query 'Users[*].[Username,UserStatus,Attributes[?Name==`email`].Value|[0]]' \
--output text
Pattern: Set Up Google Federation
aws cognito-idp create-identity-provider \
--user-pool-id <pool-id> \
--provider-name Google \
--provider-type Google \
--provider-details '{"client_id": "<google-client-id>", "client_secret": "<google-secret>", "authorize_scopes": "openid email profile"}' \
--attribute-mapping '{"email": "email", "username": "sub"}'
Troubleshooting
| Error | Cause | Fix |
|---|
UserNotFoundException | Username doesn't exist | Verify with list-users; check if pool uses email as username |
UsernameExistsException | User already registered | Check existing users; may need different username |
NotAuthorizedException | Wrong password or disabled user | Verify credentials; check user is enabled |
InvalidParameterException | Missing required attributes | Check user pool schema for required attributes |
UserNotConfirmedException | User hasn't confirmed signup | Use admin-confirm-sign-up or resend confirmation |
ExpiredCodeException | Verification code expired | Request new code with resend-confirmation-code |