IAM Access Analyzer helps you identify resources in your account that are shared with an external entity. It uses automated reasoning (mathematical proofs) to analyze resource-based policies on S3 buckets, IAM roles, KMS keys, Lambda functions, SQS queues, and Secrets Manager secrets, among other resource types including SNS topics, EBS snapshots, RDS snapshots, ECR repositories, EFS file systems, and DynamoDB tables and streams.
Access Analyzer uses AWS's automated reasoning technology (published in research as Zelkova) to mathematically analyze whether a policy grants access to external principals. This is not pattern matching: it is logic-based reasoning designed to evaluate all possible access paths for supported resource types. When you create or change a policy, the analyzer evaluates it within about 30 minutes; all monitored policies are also re-analyzed periodically.
Two operational details matter. First, external access analyzers are Regional: an analyzer only examines resources in the Region where it was created, so full coverage means one analyzer per active Region. Unused access analysis is the exception; its findings do not depend on Region, so one unused access analyzer is enough. Second, the pricing model differs by type: external access analysis is part of IAM at no extra charge, while unused access analysis is billed per IAM role and user analyzed per analyzer per month, and internal access analysis is billed per monitored resource.
The recurring failure is treating findings as informational. A typical sequence: a developer needs a vendor integration working before a demo, edits an IAM role trust policy to allow sts:AssumeRole from the vendor's whole AWS account without an external ID or any condition, and moves on. Access Analyzer generates an external access finding within the hour. Nobody is looking at the findings page, there is no EventBridge rule on new findings, and the over-permissive trust relationship sits there for a year. Cross-account trust policies and public S3 buckets found this way are exactly the entry points that credential-theft and confused deputy attacks use. The tool did its job; the process around it did not exist.
The mirror-image mistake is archiving findings to make the dashboard green. Archive rules are meant for access that is reviewed and intended, such as a known SaaS integration. Teams under audit pressure sometimes bulk-archive findings without review, which converts a detection control into a false attestation that external access was evaluated.
With an external access analyzer in place, pull its findings:
aws accessanalyzer list-findings --analyzer-arn arn:aws:access-analyzer:eu-west-1:111122223333:analyzer/prod-analyzer --filter '{"resourceType": {"eq": ["AWS::IAM::Role"]}}'
The --analyzer-arn parameter is required, and the --filter supports eq, neq, contains, and exists operators. Note that list-findings works only for external access analyzers; unused access and internal access analyzers use list-findings-v2. Wire new findings into EventBridge so they page someone instead of accumulating.
Is IAM Access Analyzer free?
External access analysis and policy validation come at no additional charge. Unused access analysis is a paid feature billed per IAM role and user analyzed per analyzer per month (service-linked roles are excluded), internal access analysis is billed per monitored resource, and custom policy checks are billed per API request.
What counts as "external" in a finding?
Anything outside the analyzer's zone of trust, which is the account or the organization depending on how you created the analyzer. That includes other AWS accounts, federated users, and anonymous (public) access. If your zone of trust is a single account, access from your own other accounts is flagged too.
How fast will a risky policy change show up?
Typically within about 30 minutes of the policy being added or changed. In rare delivery failure cases the analyzer catches the change during its periodic scan within 24 hours, and you can force a rescan of a specific resource from the findings page or via the StartResourceScan API.
A JSON document that defines permissions - which actions are allowed or denied on which AWS resources, and under what conditions.
The security principle of granting only the minimum permissions needed to perform a task - no more, no less.
A policy attached directly to an AWS resource (S3 bucket, SQS queue, KMS key) that defines who can access it, including principals from other accounts.
A resource-based policy attached to an IAM role that defines which principals (users, services, accounts) are allowed to assume that role.
Toc Consulting: AWS Security & Cloud Architecture
Our team helps engineering teams secure and architect AWS the right way: assessment in week one, a prioritized action plan in week two.