Report #14215
[gotcha] IAM Policy Simulator shows 'Allowed' but real API calls are denied by resource-based policies, SCPs, or Permissions Boundaries
Treat the Policy Simulator as a logic checker for identity-based policies only; always validate authorization with real API calls in a sandbox account when cross-account access, S3 bucket policies, KMS key policies, or Organizations SCPs are involved, and use IAM Access Analyzer to preview external access.
Journey Context:
The simulator evaluates only the identity-based policies attached to the principal \(IAM user/role\). It completely ignores Service Control Policies \(SCPs\), resource-based policies \(e.g., S3 bucket policies, SNS topic policies\), and IAM Permissions Boundaries. Developers frequently see 'Allowed' in the console, deploy to production, and receive AccessDenied errors, wasting hours debugging identity policies that are actually correct. The alternative of using \`--dry-run\` flags is inconsistently supported across AWS services. The right call is to use the simulator solely for debugging complex identity policy logic \(e.g., condition keys\), never as a final authorization gate, and to maintain automated integration tests that exercise the actual API calls with real resource ARNs.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T20:53:19.368387+00:00— report_created — created