Hand-writing IAM policy JSON is a game of matching braces and remembering exactly which fields go where — Action or NotAction, a bare string or an array, whether Condition block keys are objects of objects. IAM Policy JSON Generator turns that into a form: pick an effect, list your actions and resources one per line, optionally attach a single condition, and the tool assembles a correctly-shaped statement for you — then lets you add as many statements as the policy needs before producing the final document.
Every statement you add is tracked as a row in a list below the form, showing its Sid, effect and a quick summary of how many actions, resources and conditions it carries, with a remove button so you can drop one before building the final policy. This mirrors how you actually work with a multi-statement policy in practice: you rarely write the whole thing in one pass, you add an Allow block, then a Deny block for the sensitive bits, then maybe a scoped exception, checking the shape of each one as you go.
Clicking Build assembles every statement in the list into {"Version":"2012-10-17","Statement":[...]} and immediately runs it through a structural validator. That validator is intentionally scoped: it checks that Version is present and one of the two real AWS policy language versions, that Statement exists and is not empty, and that every individual statement has a recognized Effect, an Action or NotAction, and either a Resource/NotResource or a Principal/NotPrincipal (the latter covers resource-based policies, which name a principal instead of a resource). It does not attempt to verify that the action names correspond to real AWS API operations, that the resource ARNs are syntactically valid for the services named in the actions, or anything else that would require IAM's own service-side policy grammar and simulator — this is a structural sanity check, not a substitute for testing a policy against AWS.
Above the JSON output, three stat cards summarize the built policy at a glance: total statement count, and how many are Allow versus Deny — useful for spotting at a glance whether a policy you are reviewing is mostly permissive with a few explicit denies bolted on, or the other way around. Below that sits the full pretty-printed JSON in a monospace code block, ready to copy to your clipboard or download as a .json file for attaching to an IAM role, user, or group, or for pasting into infrastructure-as-code.
The condition builder deliberately keeps to one operator/key/value block per statement rather than trying to reproduce IAM's full condition grammar (which supports multiple operators and multiple keys per statement, each with multiple values) — for the common cases, a single StringEquals, StringLike, IpAddress or Bool check against one key, it produces exactly the JSON AWS expects; for anything more elaborate, build the base statement here and hand-edit the condition block afterward, or paste your Resource/Action lists into a fresh statement per condition combination you need.
Nothing here calls any AWS API. The form assembles JSON locally and a light structural validator flags obviously incomplete statements before you copy the result out — that is the entire scope of what this page checks.