AWS IAM Access Analyzer external access finding false positive: how to troubleshoot
Fixes AWS IAM Access Analyzer external access findings that look like false positives by proving whether the access path is real, intended and compensated. Use when a finding is disputed by a resource owner. Not for findings on resources nobody recognizes.
TL;DR
Prove the finding with the resource policy itself before you archive anything, because Access Analyzer reads the actual policy and is usually right about the mechanics. Open the flagged resource policy, identify the external principal it names, and check whether the access is a known partner, a public service pattern, or your own other account. If the access is intended, archive the finding with a precise reason and supporting ticket; if the principal is broader than the business need, narrow the policy to the named external account and condition keys instead of dismissing the finding.
AWS IAM Access Analyzer external access finding false positive: how to troubleshootUse this when
- An external access finding names a partner, vendor or unexpected account on a resource.
- The owner insists the resource is not really shared externally.
- Findings pile up on storage, queues or key resources after a migration.
Not for this skill when
- The resource is unknown or abandoned. That is a cleanup and possible incident path, not a false positive review.
- The finding is about unused access, a different analyzer check with its own triage.
Steps
- Open the finding and copy the resource, the external principal, the policy source it came from and whether the access is read or write level. Verify: finding details are recorded exactly as reported.
- Open the resource policy, bucket policy, key policy or trust policy named as the source and find the statement that grants the external principal, reading its conditions. Verify: the granting statement and its conditions are identified.
- Establish the business owner for the external relationship and ask whether that principal, at that access level, matches a live contract or integration, recording the answer with a ticket reference. Verify: the owner confirms or denies the intended access in writing.
- Check for compensating conditions in the statement, such as source account, organization, IP range or a requirement for signed requests, and judge whether they reduce the access to the intended party only. Verify: conditions are assessed as sufficient or insufficient with reasons.
- If intended and sufficiently conditioned, archive the finding in Access Analyzer with a specific reason naming the partner and ticket, rather than a generic false positive note. Verify: the finding is archived with a traceable justification.
- If broader than intended, edit the policy to the exact external account and the minimum actions, retest the partner integration, and confirm the finding clears or updates to the narrower principal. Verify: the narrowed policy works for the partner and the finding reflects it.
- Set a review reminder for archived external findings so each archived exception is revalidated next cycle instead of living forever. Verify: archived findings carry a revalidation date in the review tracker.
Why it happens
External access findings feel wrong to owners because the sharing was often set up years ago through a console wizard and forgotten, while the analyzer simply reads today policy with fresh eyes. Most disputed findings turn out to be real access that is either intended, in which case it deserves a documented archive, or unintended residue, in which case the policy needs narrowing. A smaller set are genuine interpretation quirks, and those too are settled by reading the statement and its conditions rather than by debating the tool.
Variants and edge cases
Access Analyzer says bucket shared externally but it is our partner
The partner phrasing. Archive with the partner named and a ticket; vague archives fail audit review.
external access finding on KMS key for vendor account
The key phrasing. Key policies are the only control for many keys, so read the key policy itself, not an attached identity policy.
how to archive Access Analyzer finding with justification
The process phrasing. A good archive reason names who, why and the revalidation date.
Edge cases to check before closing the review cycle:
- Cross-account access from your own organization other accounts still counts as external to the analyzer in some setups. Document the relationship clearly.
- Public findings and external account findings are different severities. Do not archive a public finding with a partner justification.
- Condition keys differ per service. Verify the condition actually applies to the resource type before relying on it.
Compatibility: AWS IAM Access Analyzer external access findings, resource policies for storage, keys, queues and roles.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_H9GRVcxCe2Nqe2mfpgslsg