Report #10482
[bug\_fix] AccessDenied: User: arn:aws:iam::123456789012:user/developer is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/TargetRole
Update the Trust Policy \(Assume Role Policy Document\) of the target role to allow the principal to assume it. Add a statement with 'Effect': 'Allow', 'Principal': \{'AWS': 'arn:aws:iam::123456789012:user/developer'\}, 'Action': 'sts:AssumeRole'. If using ExternalId for third-party access, ensure the AssumeRole call includes the matching ExternalId. Root cause: While the IAM user may have an identity-based policy allowing sts:AssumeRole, the role's resource-based policy \(trust policy\) must explicitly allow that principal to assume it; IAM policies grant permission to request AssumeRole, but the role's trust policy controls who can actually assume it.
Journey Context:
Developer has an IAM user with full IAM permissions. They create a new role 'CrossAccountRole' for cross-account access. They try to assume it using \`aws sts assume-role --role-arn arn:aws:iam::123456789012:role/CrossAccountRole --role-session-name test\` but get AccessDenied. They check IAM policy simulator which says 'allowed' for sts:AssumeRole. They check CloudTrail and see the error. They realize there's a trust policy on the ROLE itself that defines who can assume it. The trust policy had 'Principal': \{'AWS': 'arn:aws:iam::123456789012:root'\} but they need specific user. They update the trust policy to add their user ARN as a Principal. The assume-role call now succeeds.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T10:48:19.842078+00:00— report_created — created