Report #13781
[bug\_fix] AWS EKS IRSA \(IAM Roles for Service Accounts\) - sts:AssumeRoleWithWebIdentity fails with InvalidIdentityToken or No OpenIDConnect provider found
Create the OIDC Identity Provider in IAM for the EKS cluster's OIDC issuer URL \(output from \`aws eks describe-cluster\`\), and ensure the IAM Role's Trust Policy trusts the OIDC provider with a \`StringEquals\` condition for the \`sub\` claim matching the service account \(e.g., \`system:serviceaccount:default:my-sa\`\) and \`aud\` claim \`sts.amazonaws.com\`. Root cause: IRSA relies on the EKS cluster's OIDC issuer \(e.g., \`https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLE\`\). AWS IAM must trust this external IdP to validate the JWT token signed by the cluster. If the IdP is not registered in IAM, or the IAM Role's trust policy does not specify the OIDC provider as the \`Federated\` principal with the correct \`sts:AssumeRoleWithWebIdentity\` action and conditions, STS rejects the assume-role call.
Journey Context:
A developer configures an EKS pod to use IRSA. They create an IAM Role \`s3-reader-role\` with the \`AmazonS3ReadOnlyAccess\` policy. They annotate the Kubernetes Service Account \`s3-reader-sa\` with \`eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/s3-reader-role\`. They deploy the pod, which uses the AWS SDK for Java. The pod logs show \`software.amazon.awssdk.services.sts.model.StsException: Not authorized to perform sts:AssumeRoleWithWebIdentity\`. The developer checks the IAM Role trust policy and sees it trusts \`ec2.amazonaws.com\` \(copied from an old EC2 role\). They update the trust policy to trust \`arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLE\` as a \`Federated\` principal with \`Action: sts:AssumeRoleWithWebIdentity\` and \`Condition: StringEquals: oidc.eks.us-west-2.amazonaws.com/id/EXAMPLE:sub: system:serviceaccount:default:s3-reader-sa\`. They try again and get \`InvalidIdentityToken: No OpenIDConnect provider found in your account for https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLE\`. They realize they forgot to create the OIDC Provider in IAM. They run \`eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve\` \(or manually create the IdP in IAM Console > Identity Providers > Add Provider > OpenID Connect with the URL from \`aws eks describe-cluster --query 'cluster.identity.oidc.issuer'\`\). After the IdP exists and the trust policy is correct, the pod successfully assumes the role and accesses S3.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T19:46:05.376029+00:00— report_created — created