EKS Pod Identity vs IRSA. I moved one cluster to find out.


I have been an IRSA defender for years — wrote up the whole setup earlier this year and meant it. But the honest cost of IRSA was never the setup. It was the bookkeeping: an OIDC provider per cluster, a trust policy per role keyed to that cluster’s provider, an annotation per service account, and three places where a typo becomes an AccessDenied at runtime instead of a validation error at deploy time. When the third cluster in the account needed the same role, I ran the experiment. One weekend, one cluster, moved to Pod Identity.

What Pod Identity actually changes

IRSA solves “let this pod assume this role” with standard building blocks: the cluster’s OIDC provider is registered in IAM, the role’s trust policy names that provider and matches the service account in the sub claim, and a webhook projects a token into the pod. It is elegant and completely cluster-scoped — every new cluster repeats all three steps.

EKS Pod Identity moves the mapping into the EKS control plane. You install the Pod Identity agent add-on, then create an association — a cluster, a namespace, a service account name, a role — through the EKS API. The trust policy becomes a one-liner naming pods.eks.amazonaws.com as principal with a condition on the cluster name, and that condition accepts wildcards, so one role can serve ten clusters without ten trust policy edits. The pod gets credentials from the agent on a link-local address instead of exchanging a token with STS itself. No annotation on the service account at all.

The actual differences

The honest trade-offs

Where I landed

New clusters start on Pod Identity. The multi-cluster role reuse alone repaid the migration, and deleting three OIDC providers from the account was its own small pleasure. IRSA keeps the workloads that live outside EKS proper, the ones pinned to old SDKs, and any platform where an EKS add-on cannot follow. Both arrangements beat the static keys that were in the account before either of them, which is the comparison that actually shows up in incident reviews.