AWS IAM access analyzer failed with error "policy evaluation timed out" troubleshooting
Fixes AWS IAM Access Analyzer runs that fail with a policy evaluation timeout by shrinking policy scope, splitting analyzers and retrying with a longer window. Use when an analyzer scan stalls on large accounts. Not for findings triage on a completed scan.
TL;DR
Split the analyzer run before you retry it, because a straight retry usually times out on the same oversized policy set. Scope the analyzer to one account or organization unit at a time, exclude archived and unused policies from the first pass, and re-run so each evaluation finishes inside the service window. Then widen the scope in stages and record which policy set pushed the run over the limit.
policy evaluation timed outUse this when
- An account or organization analyzer fails partway through a scheduled scan.
- The console shows the timeout on large policy sets but smaller accounts complete.
- A quarterly least privilege review is blocked because no fresh findings exist.
Not for this skill when
- The analyzer completes but you disagree with a finding. Archive or dispute the finding instead.
- Access is denied with an authorization error rather than a timeout. Fix permissions first.
Steps
- Open IAM Access Analyzer in the failing account, note the analyzer type, scope and the time the run started, and check the service health and the account size in AWS Organizations. Verify: the failing analyzer, its scope and start time are recorded in the review notes.
- List the policies in scope and sort by size and attachment count, flagging customer managed policies with many versions, long condition blocks or wildcard resources for a separate pass. Verify: the largest policies are named explicitly instead of guessed at.
- Create or edit a scoped analyzer that covers a single account or a small organization unit, run it first, and confirm a small run can still complete in this account. Verify: the scoped run finishes and produces findings with a completed status.
- Exclude service-linked and archived resources from the next pass, raise the run to the next organization unit, and watch the elapsed time against the earlier timeout point. Verify: the widened run passes the point where the original run timed out.
- For any single policy that still stalls evaluation, open it in the policy editor, remove unused versions, and split combined statements so each statement covers one service and one resource family. Verify: the edited policy validates with no syntax errors and keeps the same intended grants.
- Re-run the full analyzer during a low traffic window, wait for completion rather than polling in a tight loop, and save the findings export for the review evidence pack. Verify: the full run reports completed and the export row count matches the console count.
- Set a recurring smaller-scope schedule, weekly per account and monthly for the organization roll-up, so no single run again grows large enough to time out. Verify: the schedule exists and the next two runs are dated in the calendar.
Why it happens
Access Analyzer evaluates every in-scope policy against every resource and principal combination. In a large account that work grows with the product of policies, versions and resources, so a run that worked at a smaller size quietly crosses an internal evaluation budget as the account grows. Nothing is corrupt; the job is simply too big for one pass. Scoping the run and trimming policy versions reduces the combinations the evaluator has to walk, which is why a staged run succeeds where a retry does not.
Variants and edge cases
Access Analyzer scan takes too long and never finishes
The symptom-first phrasing reviewers use when the console only shows a spinning run. Treat it the same way: scope down, prove a small run, then widen in stages and time each stage.
IAM Access Analyzer findings not updating
Stale findings usually mean the last successful run is old, not that findings were suppressed. Check the last completed run date first; if it predates the timeout, this fix applies.
analyzer evaluation failed on organization scope only
Account analyzers pass while the organization analyzer fails. That split confirms scope size as the cause, so keep the organization run as a roll-up of account results.
Edge cases to check before closing the review cycle:
- A service control policy can hide resources from the analyzer, making a completed run silently incomplete. Compare resource counts before trusting it.
- Recently deleted policies can linger in results until the next completed run. Note the run date on every evidence export.
- Cross-account roles with session limits can cut a long run short. Use a role session long enough for the staged run.
Compatibility: AWS IAM Access Analyzer in commercial and GovCloud accounts, AWS Organizations management and member accounts, current AWS console and CLI v2.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_o2pQwmVljgbX3fQaZ9w21A