Reading a multi-statement IAM policy and mentally tracing through what a specific action + resource + condition-context combination would actually resolve to is slow and error-prone, especially once Deny statements and Condition blocks are involved. IAM Policy Simulator (logic-based) lets you paste a policy document, describe one request — an action, a resource ARN, and any condition-key context values you want to supply — and see the resulting decision, which statements actually applied, and exactly what was uncertain, all computed locally with the same core evaluation logic AWS itself follows.
The evaluation walks every statement in the document and, for each one, checks whether its Action/NotAction matches the requested action (case-insensitive glob matching, since AWS treats action names case-insensitively) and whether its Resource/NotResource matches the requested resource ARN (case-sensitive glob matching, since ARNs are case-sensitive). A statement that matches both is then checked against its Condition block, if it has one, using the context key/value pairs you supplied through the "Add context key" rows. Statements matching on Action and Resource but whose condition definitively evaluates to false are excluded; among what remains, an explicit Deny always wins over any Allow — the single most important rule in real AWS policy evaluation, and the one this tool implements faithfully. If nothing applies at all, the result is Implicit Deny, matching AWS's default-deny posture.
The condition evaluation is deliberately narrow and says so plainly: only four operators are actually evaluated — StringEquals, StringNotEquals, StringLike, and Bool. Any other operator (IpAddress, DateGreaterThan, ArnLike, NumericLessThan, and the rest of AWS's much larger operator set) is treated the same way as a condition key you never supplied a value for: as unevaluatable. Crucially, an unevaluatable condition does not silently resolve to true or false — the statement is conservatively marked as possibly applicable, its condition result comes back indeterminate rather than a guess, and a caveat is added to the results explicitly naming which key or operator could not be evaluated. This matters because a policy simulator that silently assumes an unknown condition is satisfied (or unsatisfied) gives you false confidence; this one tells you precisely where its answer is uncertain and why, so you can supply the missing context and get a definitive read.
What this tool does not do deserves equal emphasis, prominently, not buried in a footnote: it is not the real AWS IAM Policy Simulator and does not call any AWS API. It evaluates exactly one policy document against one request in isolation — it has no model of Service Control Policies, permission boundaries, resource-based policy combination (an S3 bucket policy plus an IAM identity policy plus a VPC endpoint policy, evaluated together), session policies, or cross-account trust relationships, all of which materially affect what actually happens in a real AWS account. It also has no catalog of real AWS actions or services — an Action or Resource string is matched purely as a wildcard pattern, with no validation that the action or service name is real. Treat this as a fast, local, first-pass sanity check on a single policy document's own internal logic — a way to catch "wait, does my Deny statement actually cover this case?" while writing or reviewing a policy — not as a substitute for AWS's actual evaluation engine or for testing against a real account before granting production access.
The request-builder UI mirrors this scope: one action field, one resource field, and a dynamic list of context key/value rows you add one at a time, since this tool has no real caller identity or request metadata to draw from — you supply exactly the condition-relevant facts you want evaluated, and nothing more is assumed. The matched-statements table shows every statement whose Action and Resource matched, its effect, and whether its condition was satisfied, not satisfied, or indeterminate, so the reasoning behind the final decision is fully visible rather than a single opaque verdict.