Recap: Kube2IAM vs. IRSA
Before diving into Pod Identity, here’s a quick comparison of earlier approaches:
Kube2IAM uses iptables rules to redirect 169.254.169.254 traffic to a proxy, which then fetches credentials based on pod annotations. IRSA introduced an OIDC identity provider and webhook that injects AWS_WEB_IDENTITY_TOKEN_FILE and AWS_ROLE_ARN into pod environments—trading complexity of iptables for OIDC setup.
Introducing Pod Identity
Pod Identity modernizes IRSA by embedding role-to-service-account mappings in the EKS control plane. Key benefits include:- No external OIDC provider
- No pod-level AWS annotations
- Local credential proxy via DaemonSet
- Support for tag-based access control (ABAC)
Architecture Overview
Pods continue calling the AWS SDK normally. A mutating webhook in the EKS control plane injects environment variables pointing to a local, node-hosted proxy. A privileged DaemonSet uses host networking to listen for SDK requests, then interacts with the EKS API to issue temporary credentials.

Role-to-Service-Account Association
With Pod Identity, you no longer annotate ServiceAccount objects. Instead, run an EKS CLI command:Tag-Based Credentials (ABAC)
Pod Identity fully supports AWS attribute-based access control. Tag your AWS resources (for example,Environment=dev on an S3 bucket) and reference those tags in your IAM policies. At credential time, EKS evaluates both:
- The service account ➔ IAM role mapping
- Any resource tags defined in IAM policies

Request Flow
- Submit a Pod spec referencing a ServiceAccount (no AWS annotations).
- EKS webhook mutates the Pod spec, injecting
AWS_ROLE_ARNandAWS_WEB_IDENTITY_TOKEN_FILEtoward a local IP (e.g.,169.254.x.x). - At runtime, the AWS SDK in the pod calls the local proxy.
- The proxy reads the service account token, contacts the EKS control plane, and requests credentials.
- EKS checks the service-account→role mapping and any tag-based policies, then issues temporary credentials.
- The proxy returns credentials to the SDK, which uses them for AWS API calls (e.g.,
PutObjectto S3).

Limitations & Coexistence
Pod Identity is exclusive to EKS. If you operate Kubernetes on EC2 without the EKS control plane, continue using Kube2IAM or similar solutions.
