Join our Newsletter — 33% off our NHI Course
Home› Guides› How to Find AWS IAM Users With Console…
Guide Cloud & Workload Identity

How to Find AWS IAM Users With Console Access and No MFA: Queries, Fixes and Guardrails

PDF for newsletter subscribers · free to read online

← All guides
By NHI Mgmt Group, edited by Lalit Choda Updated 11 November 2026 11 min read
On this page

An IAM user with a console password and no MFA device can be signed in to with nothing more than a guessed, reused or phished password. AWS enforces MFA for the root user of every account type, but each IAM user has its own MFA configuration, so this check stays with the account owner. This runbook shows how to find those users with the IAM credential report, AWS Config and AWS Security Hub, how to fix each one (add MFA, remove the password, or move the person to federated access), and how to stop new ones appearing. It is for cloud security and platform engineers working in a single account or across an AWS Organization. Root user checks and access keys have their own pages: see the Cloud Provider Mandatory MFA and the AWS Access Keys Security Guide.

This is an independent guide from NHI Mgmt Group, based on AWS's public documentation as of November 2026. It is not sponsored or reviewed by AWS. Product features change, so confirm settings against AWS's current documentation.

Key takeaways

  • The credential report answers the question directly. Filter rows where password_enabled is true and mfa_active is false; that is the list.
  • Use the managed checks for scale. The AWS Config rule mfa-enabled-for-iam-console-access and Security Hub control IAM.5 report the same condition continuously, across accounts if you aggregate them.
  • Decide per user, not in bulk. A person who needs the console gets MFA (passkey or security key first); a user that never signs in loses its password; most humans should move to IAM Identity Center.
  • Deleting a password does not touch access keys or live sessions. Revoke active console sessions separately and review the user's keys in the same change.
  • Guardrails stop the list growing back. A deny-unless-MFA policy, alerts on CreateLoginProfile and a standing IAM.5 check keep the count at zero.

When you need this

Run this check when you inherit accounts, before an audit, after a phishing or password spraying campaign against your staff, and as a standing monthly control. It matters most in accounts that still hold long-lived IAM users for people: contractors, break-glass users created before IAM Identity Center, shared "admin" users and users created for a third party to look at a console. AWS documentation recommends that human users use temporary credentials and asks whether you have considered IAM Identity Center, so every user this runbook finds is also a candidate for removal rather than repair.

The attack path is plain. A console password with no second factor is exposed to password spraying (ATT&CK T1110.003) and, once valid, gives the attacker a cloud account (T1078.004) with whatever the user's policies allow. See the Password Spraying and Credential Stuffing Defence Guide for the wider defence.

Before you start

  • Permissions: iam:GenerateCredentialReport and iam:GetCredentialReport to read the report; iam:ListMFADevices, iam:GetLoginProfile and iam:GetUser to confirm single users; iam:DeleteLoginProfile only for the people allowed to make the fix.
  • Report timing: IAM generates a new credential report at most once every four hours. If one was produced in the last four hours you get that one, so a fix made a minute ago will not show until the next report.
  • Owners: have a way to reach the person or team behind each user before you remove anything. An exceptions register with an owner and an expiry date (our recommendation) saves arguments later.
  • Change window: removing a password is reversible (you can create a new one), but agree the window with the owners of any user that signs in regularly.

Step-by-step

1. Pull the credential report

  1. Generate the report: aws iam generate-credential-report.
  2. Download and decode it: aws iam get-credential-report --query Content --output text | base64 --decode > credential-report.csv.
  3. Repeat per account, or run it from a script that assumes a read-only audit role in each member account.

2. Filter for console users without MFA

The columns you need are below. The report is a CSV with a header row, so filter by column name rather than position where your tooling allows.

ColumnValuesWhat it tells you
password_enabledTRUE or FALSEThe user has a console password (a login profile).
mfa_activeTRUE or FALSEAt least one MFA device is enabled for the user.
password_last_usedDate and time, no_information or N/ALast console sign-in with the password. no_information means never used or no data; N/A means no password.
password_last_changedDate and time or N/AWhen the password was last set; a very old value hints at a forgotten user.
user_creation_timeDate and timeHelps separate new starters still enrolling from long-standing gaps.
access_key_1_active, access_key_2_activeTRUE or FALSEWhether the same user also has programmatic access to deal with.

A one-line filter that works in most shells, matching on the header names and ignoring case:

python3 -c "import csv,sys; r=csv.DictReader(open(sys.argv[1])); [print(x['user'], x['password_last_used'], x['access_key_1_active'], x['access_key_2_active']) for x in r if x['password_enabled'].lower()=='true' and x['mfa_active'].lower()=='false']" credential-report.csv

The report also includes a row for the account root user (commonly shown as <root_account>; check your own report); handle it through the root user process, not this one.

3. Confirm each user before you act

  • aws iam get-login-profile --user-name <user> confirms a password still exists (it returns NoSuchEntity if not).
  • aws iam list-mfa-devices --user-name <user> confirms no device is enabled.
  • aws iam get-user --user-name <user> shows PasswordLastUsed, which is fresher than the report.
  • List the user's groups and attached policies so the owner knows what the user can do today.

4. Turn on continuous detection

For more than a handful of accounts, use the managed checks rather than scripts.

SourceNameWhat it evaluatesNotes
AWS Config managed rulemfa-enabled-for-iam-console-access (identifier MFA_ENABLED_FOR_IAM_CONSOLE_ACCESS)Each AWS::IAM::User with a console password has MFA enabledPeriodic trigger, no parameters. Check the rule page for the Regions where it is available.
AWS Security Hub controlIAM.5: MFA should be enabled for all IAM users that have a console passwordSame condition, backed by the Config rule aboveSeverity Medium. Mapped by AWS to CIS AWS Foundations Benchmark v5.0.0 1.9 and NIST SP 800-53 IA-2(1), IA-2(2).
AWS Security Hub controlIAM.19: MFA should be enabled for all IAM usersEvery IAM user, password or notStricter; useful once console users are clean, though users with only access keys will also appear.

In an AWS Organization, aggregate Config results or use a Security Hub delegated administrator account so IAM.5 findings from every member account land in one place.

5. Fix each user

Pick one action per user with its owner. The table is our recommended decision order.

SituationActionHow
Person needs the console and you run IAM Identity Center or another federated identity providerMove them to federated access, then remove the IAM user's passwordSee the AWS IAM Identity Center Guide.
Person needs the console and must keep an IAM user for nowRegister MFA, preferring a passkey or security keyUser registers a device on the Security credentials page; up to eight devices per user.
password_last_used is no_information or older than your threshold (for example 90 days, our suggestion)Remove the console passwordConsole: Security credentials, Manage console access, Disable access. CLI: aws iam delete-login-profile --user-name <user>.
User is really a workload that only uses access keys but was given a passwordRemove the password; plan to replace the keys with a roleSee How to find unused AWS IAM roles and access keys.
Shared user used by several peopleReplace with named federated access, then remove the passwordShared users cannot tie MFA or actions to one person.

AWS recommends phishing-resistant MFA (passkeys and security keys) wherever possible and describes virtual authenticator apps as an interim option. See the Phishing-Resistant MFA Guide.

6. End live sessions where risk is high

Removing the password stops new password sign-ins; to end console sessions already open, select Revoke active console sessions in the Manage console access dialog, which applies an inline deny policy keyed on aws:TokenIssueTime. Do this when you suspect the password was exposed, and check CloudTrail for the user's recent activity at the same time.

Verify it worked

  1. Wait for the four-hour window, generate a new credential report and re-run the filter: the fixed users should show mfa_active TRUE or password_enabled FALSE.
  2. Re-evaluate the Config rule (or wait for the periodic run) and confirm Security Hub IAM.5 findings move to passed or resolved.
  3. For users who enrolled MFA, confirm the next console sign-in event in CloudTrail (ConsoleLogin) shows "MFAUsed": "Yes" in its additionalEventData.
  4. Confirm with each owner that nothing they rely on broke.

Rollback and common errors

  • Someone still needs the console: recreate the password with aws iam create-login-profile --user-name <user> --password-reset-required (supply a temporary password through your approved channel) and enrol MFA in the same session.
  • Revoke left an inline policy behind: the session revocation policy stays on the user; review it with aws iam list-user-policies and remove it once it is no longer needed, or keep it as a record.
  • NoSuchEntity on delete-login-profile: the user had no password; the report you used was stale.
  • User cannot enrol MFA: an IAM user needs permission to manage their own MFA device. The AWS example policy for self-managed MFA grants it.
  • Deleting the IAM user instead: the CLI requires the login profile to be removed first; use the order in the unused access runbook linked above.

Hardening afterwards

Require MFA in policy

AWS publishes an example identity-based policy that lets users manage their own MFA device and denies everything else when MFA is absent. Its DenyAllExceptListedIfNoMFA statement uses NotAction with the condition "BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}. Because of IfExists, requests signed with long-term access keys are also denied for anything outside the MFA setup list, so CLI users must call sts:GetSessionToken with their MFA code first. Attach it to a group that holds your remaining human IAM users, test with one user, then widen.

Alert on new passwords

Watch CloudTrail for CreateLoginProfile, UpdateLoginProfile and DeactivateMFADevice. A new password on a user that previously had none, or MFA removed from an active user, should go to the security team the same day. AWS Organizations service control policies can also deny iam:CreateLoginProfile outside an approved administration role (our recommendation for accounts that use IAM Identity Center for all people).

Measure

MetricSourceTarget (our suggestion)
IAM users with a password and no MFACredential report or IAM.5 failed findingsZero, with named exceptions only
IAM users with a console password at allCredential report password_enabledFalling each quarter as people move to federation
Days from IAM.5 finding to fixSecurity Hub finding timestampsUnder 7 days
Console users on phishing-resistant MFAlist-mfa-devices device typesRising towards all
Accounts where the Config rule is deployedConfig aggregatorEvery account and supported Region

Framework mapping

FrameworkReferenceLink to this runbook
NIST SP 800-53 Rev 5IA-2(1), IA-2(2), AC-2MFA for privileged and non-privileged accounts; account management for unused passwords
NIST CSF 2.0PR.AA-03Users, services and hardware are authenticated
CIS AWS Foundations Benchmarkv5.0.0 1.9 (as mapped by AWS to IAM.5)MFA for every IAM user with a console password
MITRE ATT&CKT1078.004, T1110.003Valid cloud accounts reached by password spraying

Practitioner checklist

  • Credential report pulled from every account, filtered on password_enabled and mfa_active.
  • Each finding confirmed with get-login-profile and list-mfa-devices, and an owner named.
  • Unused passwords removed; active console users enrolled in phishing-resistant MFA or moved to IAM Identity Center.
  • Active console sessions revoked where the password may have been exposed.
  • Access keys on the same users reviewed in the same change.
  • Config rule mfa-enabled-for-iam-console-access deployed and IAM.5 enabled, aggregated across the Organization.
  • Deny-unless-MFA policy attached to remaining human IAM users.
  • CloudTrail alerts on CreateLoginProfile, UpdateLoginProfile and DeactivateMFADevice.
  • Exceptions register with owner and expiry date reviewed monthly.

Standards and references

Related NHI Mgmt Group resources: AWS IAM Identity Center Guide, AWS Access Keys Security Guide, How to find unused AWS IAM roles and access keys, Cloud Provider Mandatory MFA, Top 10 MFA Mistakes.

PDF for subscribers

Take this guide with you

Every section, table and checklist in one PDF, with links to the sources and related guides. Subscribe to our weekly NHI & AI Identity Journal and we’ll email you a download link.

Free weekly newsletter

Subscribe to the NHI & AI Identity Journal

The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.

Bonus 33% off our NHI Course when you subscribe.

NHIMG Editorial Note
Researched and written by the NHI Mgmt Group editorial team using AI tools, under the editorial direction of Lalit Choda. Facts are drawn from the sources listed on this page and checked by our automated quality process. Last updated 11 November 2026. Spotted an error? Use our contact page.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM and Agentic AI security. nhimg.org

PDF Downloads for Newsletter Subscribers

Get the guide

Enter your details and we’ll email you a download link.

The full guide is free to read online. The PDF is a thank you for subscribing.

Fill in all fields marked * and tick the PDF box to continue.