AWS IAM Policy Analyzer (Explain, Wildcards and Escalation Risks)
Each statement in plain English, wildcards expanded, risky permissions found.
Try before you buy.
- Free preview: every count, the first statements and findings (up to 10 each), and the first lines of the rewrite and of a built policy (up to 20).
- Locked until you unlock it: download and copy.
- Unlock: Pro pass, ₹179 for 30 days or ₹79 for 1 week, a one-time payment that never renews. Unlock: Pro pass, $5.99 for 30 days or $2.99 for 1 week, a one-time payment that never renews.
Ways to unlock shows how to get the full result.
Printing this result is locked in the free preview.
A policy, or the output of aws iam get-policy-version, get-role, get-role-policy or aws s3api get-bucket-policy. Checked as you type; it stays in your browser.
Findings
Statements
Least-privilege rewrite
A suggestion to review, not a tested policy: it narrows wildcards and moves actions that support only "Resource": "*", and never guesses your ARNs.
Statements in the policy
Add a statement on the left: choose a service, its access levels or actions, the resources and any conditions.
Policy
Locked in the free preview. Opens the ways to unlock this result.
Locked in the free preview. Batch runs unlock with a pass.
Locked in the free preview. Query results unlock with a pass.
About the AWS IAM Policy Analyzer (Explain, Wildcards and Escalation Risks)
Paste an AWS IAM policy — an identity-based policy, a resource-based policy such as a bucket or key policy, a role trust policy or a service control policy — and read what it really allows:
- Every statement in plain English: “Allows s3:GetObject (Read) on arn:aws:s3:::example-assets/*, when the request uses HTTPS.” Wildcards such as
s3:Get*oriam:*AccessKey*are expanded to the real actions with their access levels (List, Read, Write, Permissions management, Tagging), taken from AWS’s machine-readable Service Authorization Reference;NotActionis counted as everything it does not exclude. - Findings in the four kinds IAM Access Analyzer uses — errors, security warnings, warnings and suggestions: full administrator access,
NotAction,NotResourceorNotPrincipalin an Allow,iam:PassRoleon every role, the published privilege-escalation combinations, policies and trust policies open to"Principal": "*", trust in a shared OIDC provider (GitHub Actions, GitLab, HCP Terraform, Buildkite, Pulumi and the others IAM lists) without the claim that names your organization, service principals withoutaws:SourceArn, unknown actions and condition keys, wrong operators and values, actions that can never match the resources listed (s3:ListBucketon…/*), and policies over the size limit. - A least-privilege rewrite for review: wildcards narrowed to the access levels you keep, and actions that support only
"Resource": "*"moved to a statement of their own. - A policy builder: choose a service, access levels or single actions, resources and conditions (MFA, HTTPS, source IP, organization, Region).
IAM Access Analyzer in your AWS account remains the authority: it checks a policy against your own account, resources and organization, which no page outside AWS can see. Everything here runs in your browser. Without a pass the analysis is a free preview: every count with the first statements and findings, and the first lines of the rewrite and of a built policy; the rest, the copies and the downloads unlock with a Pro pass.
How to use it
- Paste a policy, open a .json file, or choose an example. The output of
aws iam get-policy-version,get-role,get-role-policyandaws s3api get-bucket-policyworks as it is. - Check the Policy type: it is detected from the statements, but a service control policy looks like an identity-based policy, so choose SCP for one.
- Read the findings first, then each statement in plain English. Show selects the part of the policy a finding is about.
- Choose the access levels to keep and read the least-privilege rewrite and its notes; or switch to Build a policy to write one from scratch.
- With a Pro pass, or once the result is unlocked, copy or download the report, the rewrite and the built policy; the free preview shows their first parts and locks the copies and downloads.
Examples
{"Effect": "Allow", "Action": "s3:*", "Resource": "*"}Warning: s3:* on every resource — it allows every s3 action, including its permission-management actions such as s3:PutBucketPolicy. The rewrite keeps the List, Read and Write actions.
{"Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": "arn:aws:s3:::example-assets/*"}Warning: s3:ListBucket applies to buckets, not objects. Every resource here is an object ARN, so ListBucket is never allowed: add arn:aws:s3:::example-assets.
Trust policy: Principal Federated …/token.actions.githubusercontent.com, Condition StringEquals token.actions.githubusercontent.com:aud = sts.amazonaws.com
Security warning: GitHub Actions trust without a condition on token.actions.githubusercontent.com:sub or token.actions.githubusercontent.com:job_workflow_ref — workflows of other GitHub customers could assume the role. Limit it to your own, for example "repo:my-org/my-repo:ref:refs/heads/main".
IAM also refuses to save such a trust policy, as the IAM User Guide explains. A sub value such as "repo:*" is accepted by IAM, but it matches every organization: the page reports that too.
lambda:CreateFunction, lambda:InvokeFunction and iam:PassRole on "Resource": "*"
Security warning: Can raise its own access: iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction — create a Lambda function with a more privileged role and run it.
Common uses
- Reviewing a policy in a pull request before it reaches an account.
- Finding out what a managed or vendor policy with many wildcards really allows.
- Checking a bucket, queue or key policy for public access, and a trust policy for who can assume the role.
- Writing a first least-privilege policy for a workload, then tightening it with IAM Access Analyzer’s policy generation.
How the access levels and actions are known
The page carries a snapshot of AWS’s machine-readable service reference: every service prefix, every action, the resource types each action supports with their ARN formats, and each service’s condition keys. AWS publishes four properties per action; the level shown follows them: Permissions management when an action changes permissions or credentials, Tagging when it only changes tags, Write when it changes resources, List when it lists them, and Read otherwise. An action that AWS added after the snapshot is reported as unknown — check its name in the Service Authorization Reference before you remove it.
What the checks follow
- Grammar: the IAM JSON policy element reference — Version, Statement, Sid, Effect, Action and NotAction, Resource and NotResource, Principal and NotPrincipal, Condition — and the SCP syntax, in which Allow statements take only
"Resource": "*"and no Principal. - Conditions: the condition operators and the global condition keys with their data types and whether they hold several values (
ForAllValueswith a missing key is true, so an Allow should add aNullcheck). - Sizes: IAM quotas — 6,144 characters without white space for a managed policy, 2,048 for a role trust policy by default — and 10,240 for an SCP (AWS Organizations quotas).
- Finding kinds and names follow IAM Access Analyzer’s policy check reference; trust in shared OIDC providers follows IAM’s identity-provider controls: for GitHub Actions a condition on
suborjob_workflow_ref, for GitLab, HCP Terraform, Buildkite and most others onsub, for Pulumi Cloud, Vercel and Amazon Cognito onaud, which IAM requires before it saves a new or changed trust policy; a wildcard where your organization’s name belongs is reported too. - Privilege escalation: the permission combinations published by Rhino Security Labs, such as
iam:CreatePolicyVersionalone, oriam:PassRolewithec2:RunInstances.
Reading a least-privilege rewrite
The rewrite changes only what the snapshot can prove: a wildcard is replaced by the actions of the levels you keep — written as verb wildcards such as s3:Get* where every action they match is kept, and by name otherwise — and an action that supports only "Resource": "*" leaves a statement that names ARNs, where it never matched. It never narrows a Deny (that would allow more), never rewrites NotAction or "Action": "*", and never invents ARNs: the notes say where your resource names belong. Check the result with IAM Access Analyzer before you use it.
Limitations
- The page knows the policy, not your account: it cannot tell whether a role or bucket exists, whether another policy grants or denies the same thing, or whether an account ID is yours. IAM Access Analyzer in your account remains the authority.
- Actions, resource types and condition keys come from a snapshot of the Service Authorization Reference; ones added since are reported as unknown.
- Privilege-escalation checks look at the permissions this one policy allows, not at what the principal’s other policies, permission boundaries or SCPs allow.
- Condition keys of individual services are checked by name only; their data types are not.
Privacy
On this device: nothing is sent
Everything happens in your browser. What you enter or open here is not uploaded or stored by MySmartCoPilot.
Frequently asked questions
What do I get without a pass?
Without a pass, AWS IAM Policy Analyzer (Explain, Wildcards and Escalation Risks) shows every count, the first statements and findings (up to 10 each), and the first lines of the rewrite and of a built policy (up to 20). Until you unlock it, the result can’t be downloaded or copied. A Pro, Premium or Ultimate pass, a one-time payment that never renews, unlocks the full result. The pricing page lists the passes and their prices.
Is my policy uploaded?
No. The list of AWS actions is part of the page (it loads the first time you analyze a policy), and the analysis, the rewrite and the builder run in your browser.
How is this different from IAM Access Analyzer?
Access Analyzer runs inside your AWS account, so it can check a policy against your real resources and organization and find external access. This page needs no account: it explains each statement, expands wildcards with their access levels and points out risky patterns, which helps you understand and review a policy before it reaches Access Analyzer.
Why is an action I use reported as unknown?
Either the name is misspelled (actions are case-insensitive, but every letter counts), the permission is named differently from the API operation, or AWS added it after the page’s snapshot. Check the service’s page in the Service Authorization Reference.
Why does it detect my SCP as an identity-based policy?
An SCP looks exactly like an identity-based policy without a Principal. Choose “Service control policy (SCP)” in Policy type: the SCP rules then apply, for example that an Allow statement can name only "Resource": "*".
What does “Can raise its own access” mean?
The policy allows a combination of permissions that lets whoever has it grant themselves more access — for example iam:AttachUserPolicy (attach AdministratorAccess to yourself) or iam:PassRole with ec2:RunInstances (start an instance with a more privileged role). Limit those actions to resources that cannot lead to more access, or remove them.