Report #77626
[gotcha] IAM ExternalId condition is bypassed when assuming role via Web Identity or SAML federation
Do not rely on ExternalId for confused deputy protection in trust policies that allow sts:AssumeRoleWithWebIdentity or sts:AssumeRoleWithSAML; instead, use unique audience \(aud\) or subject \(sub\) claims in the trust condition, or restrict the role to sts:AssumeRole only.
Journey Context:
ExternalId was designed specifically for the confused deputy problem when third parties assume roles in your account via sts:AssumeRole. However, the STS API for Web Identity \(Cognito, Google, Facebook\) and SAML \(ADFS, Okta\) does not support the ExternalId parameter; if present in the trust policy, the condition is evaluated but the externalId claim is empty or undefined, causing the condition to fail or be ignored depending on operator. Many architects assume ExternalId is a universal security boundary for all cross-account access, but for federation, the trust boundary must be established via the identity provider's subject mapping and conditions on the oidc:sub or saml:aud keys.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T12:53:43.382294+00:00— report_created — created