AWS::EKS::PodIdentityAssociation
- Grants access to AWS Resources by Kubernetes Workloads
- It's a newer alternative to IRSA

EKS Pod Identity APIs
CreatePodIdentityAssociation: To create the connection between IAM role and SAAssumeRoleForPodIdentity: For a pod (via SDK) to assume a role
EKS Pod Identity webhook
- This webhook runs on the Amazon EKS cluster’s control plane,
- It intercepts any pods running with a given SA (that is associated with a IAM role) mutates the pod spec by adding some envs
AWS_CONTAINER_CREDENTIALS_FULL_URIAWS_CONTAINER_AUTHORIZATION_TOKEN_FILE- Theses envs are used by AWS SDK in order to authenticate with AWS. This search for the credentials is called
credential provider chain - Given the envs, the SDK calls the AWS_CONTAINER_CREDENTIALS_FULL_URI which runing on the
Amazon EKS Pod Identity Agentto get the temporary credentials
EKS Pod Identity Agent
- It is an addon Amazon EKS Pod Identity Agent, which runs a
eks-pod-identity-agentas DaemonSet in every node - This agent is exposed on the URI
AWS_CONTAINER_CREDENTIALS_FULL_URI - It calls the EKS Auth API
AssumeRoleForPodIdentityto exchange the projected token for temporary IAM credentials, which are then made available to the pod. - EKS Auth API (AssumeRoleForPodIdentity) decodes the JWT token and validates the role associations with the service account.
- If valid, it will also set
session tagssuch as - kubernetes-namespace
- kubernetes-service-account
- eks-cluster-arn
- eks-cluster-name
- kubernetes-pod-name
- kubernetes-pod-uid
# Install the agent via addons
eksctl create addon --name eks-pod-identity-agent --cluster foo
The agent runs in host network mode and gets its permissions from the "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy" managed policy that is attached to the worker roles
Association
- This connection is done using eksctl
- The API
CreatePodIdentityAssociationis used under the hood to perform the association of an IAM role with a SA - The same IAM role can be reused to associate with
multiple SAsacross namespaces within a cluster, or across EKS clusters within an AWS Account. - Use the command
eksctl create podidentityassociationto create the association betweenIAM RoleandService Account
IAM Trust Policy
The IAM role with this trust policy is automatically created with "eksctl create podidentityassociation"
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole",
"sts:TagSession"
],
"Principal": {
"Service": "pods.eks.amazonaws.com"
},
"Condition": {
"StringEquals": {
"aws:SourceAccount": "my-account-number" // optional
},
"ArnEquals": {
"aws:SourceArn": "arn-of-my-eks-cluster" // optional
}
}
}
]
}