一、aws-iam-token 的生成
1.1 token 生成
我们这里使用的 AWS 完全管理的 K8s 集群 EKS,并且通过如下命令创建了 iamserviceaccount [1]。
eksctl create iamserviceaccount --name alice --namespace default \
--cluster eks --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
--approve --override-existing-serviceaccounts
关于 IRSA 的一个架构图大致如下:

在由 API Server 创建一个 pod 后,由 Self-hosted Kubernetes setup [2] 所说,由于 IRSA 是基于 Service Account 的方式进行验证,其中,产生 Token 的行为由 API Server 在启动阶段的以下相关参数决定,以下参数通过 CloudWatch 获取到 API Server 的相关启动参数:
--service-account-key-file="[/etc/kubernetes/pki/sa.pub]"
--service-account-signing-key-file=“”
--service-account-issuer="https://oidc.eks.us-east-1.amazonaws.com/id/900B62D5EA15DC82EC523AD824232853"
因为 token 其实是由 controller manager 签署,sa 的私钥在其启动参数中,所以我们查看其启动参数如下:
--service-account-private-key-file="/etc/kubernetes/pki/sa.key"
在 token 签署完成后,会触发 eks-pod-identity-webhook,由 eks-pod-identity-webhook 协助将相关的 Token 信息以 Projected Volume [3] 的形式挂在到 Pod 中,并把 iam service account 中的 role-arn 和刚刚生成的 token 注入到 Pod 的环境变量中。
我可以通过查看 Pod 的 yaml 文件查看其相关信息:
spec:
containers:
- command:
- sh
- -c
- echo Hello Kubernetes! && sleep 360000
env:
- name: AWS_ROLE_ARN
value: arn:aws:iam::921283538843:role/eksctl-eks-addon-iamserviceacc

本文深入探讨了Amazon EKS集群中Pod的身份验证机制,特别是在使用IAM角色和服务帐户的情况下,如何生成和使用令牌访问AWS资源。详细解析了OIDC配置、STS服务的验证流程以及临时凭证的获取。
最低0.47元/天 解锁文章
254

被折叠的 条评论
为什么被折叠?



