EKS Pod Identity 是解决 Pod 身份认证的机制,通过将 ServiceAccount 与 IAM 角色绑定并借助 OIDC 联合实现可信凭证分发,不负责 Kubernetes 内部鉴权;真正的 AWS 资源访问控制由 IAM 策略决定,集群资源访问则由 RBAC 管理,二者协同实现精细化权限控制。

在 Kubernetes 中,EKS Pod Identity 不是直接做“鉴权(Authorization)”的工具,而是解决工作负载身份认证(Authentication)问题——即让 Pod 安全、可信地以某个 IAM 角色访问 AWS 服务。真正的资源级鉴权(比如限制 Pod 能否调用 ec2:DescribeInstances 或 s3:GetObject),仍由 AWS IAM 策略控制,而 Kubernetes 内部的 RBAC 则负责集群资源(如 Pod、ConfigMap)的访问控制。两者分工明确,需协同配置才能实现“基于角色的精细化资源鉴权”。
理解 EKS Pod Identity 的定位
EKS Pod Identity(原 IRSA)本质是把 Kubernetes ServiceAccount 和 AWS IAM 角色绑定起来,通过 OIDC 身份联合完成信任链传递。它不替代 Kubernetes RBAC,也不修改 API Server 的鉴权逻辑,只负责为 Pod 提供合法的 AWS 凭据。
- Pod 启动时,kubelet 挂载 ServiceAccount 的 token(带 audience 和 issuer 声明)
- Pod 访问 AWS SDK 时,自动向 STS
AssumeRoleWithWebIdentity请求临时凭证 - 该请求是否成功,取决于 IAM 角色的信任策略是否允许该 ServiceAccount 的 OIDC 身份
配置 ServiceAccount 与 IAM 角色的绑定
这是打通身份链的关键一步,必须确保 ServiceAccount 的注解、IAM 角色的信任策略、以及集群 OIDC 提供方三者严格匹配。
- 创建 ServiceAccount 时添加注解:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-app-role - 对应 IAM 角色的信任策略中,
Condition必须校验:"aud": "sts.amazonaws.com"(固定值)"sub": "system:serviceaccount:default:my-app-sa"(格式为system:serviceaccount:<ns>:<name>)"iss": "https://oidc.eks.<region>.amazonaws.com/id/ABCD1234567890ABCDEF1234567890AB"(来自aws eks describe-cluster输出) - 部署 Pod 时显式指定
serviceAccountName: my-app-sa,否则默认使用default
定义最小权限的 IAM 策略并附加到角色
精细化鉴权的核心在于 IAM 策略粒度——不是给角色加 AdministratorAccess,而是按需声明具体服务、资源 ARN、条件键。
- 例如,只允许读取特定 S3 存储桶下的日志前缀:
"Resource": ["arn:aws:s3:::my-app-logs-bucket/logs/app1/*"]"Condition": {"StringLike": {"s3:prefix": ["logs/app1/*"]}} - 限制 EC2 接口调用范围:
"Action": ["ec2:DescribeInstances"]"Resource": ["*"](EC2 描述类操作通常不限制资源 ARN,但可加ec2:Region条件) - 避免使用通配符
"Resource": ["*"],除非策略本身已用Condition收敛作用域
配合 Kubernetes RBAC 控制集群内资源访问
如果 Pod 内应用还需访问 Kubernetes API(如监听自身 ConfigMap 变更),则需额外配置 RBAC,与 EKS Pod Identity 并行生效。
- 创建 Role 或 ClusterRole,明确声明允许的
apiGroups、resources、verbs - 用 RoleBinding 将该 Role 绑定到同一个 ServiceAccount:
subjects:
- kind: ServiceAccount
name: my-app-sa
namespace: default - 这样,Pod 同时拥有:AWS IAM 凭据(对外) + Kubernetes ServiceAccount Token(对内),各自受独立策略约束


















