如何深入理解 EKS IRSA 的实现机制

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

一、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 的一个架构图大致如下:

如何深入理解 EKS 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值