使用 OIDC 的 Kubernetes 服务帐户角色



我正在尝试将部署到 EKS 中同一工作线程节点的 2 个 Pod 关联到不同服务帐户的功能。以下是步骤

  • 每个服务帐户都关联到不同的角色,一个角色有权访问 SQS,另一个角色没有访问权限。
  • 使用
  • eksutil 将 OIDC 提供者与集群相关联,并在 kubernetes 中创建了带有服务账户的 iamserviceaccount 和带有访问 SQS 的策略的角色(使用 eksctl 提供的 IAM 角色隐式注释服务账户创建 iamserviceaccount(。

但是,当我尝试启动将服务帐户绑定到具有 SQS 访问权限的角色的 pod 时,我被拒绝访问 SQS,但是如果我将 SQS 权限添加到工作节点实例角色,它工作正常。

我是否遗漏了任何步骤,我的理解是否正确?

因此,要使 IRSA 正常工作,需要做一些事情:

  1. 必须有一个与集群关联的 OIDC 提供程序,遵循此处的说明。
  2. IAM 角色必须与 OIDC 提供商建立信任关系,如此处的 AWS CLI 示例中所定义。
  3. 必须使用匹配的eks.amazonaws.com/role-arn对服务帐户进行批注。
  4. 根据 API 文档,Pod 必须在其spec中指定适当的服务帐户并serviceAccountName
  5. 应用的 SDK 需要支持AssumeRoleWithWebIdentityAPI 调用。奇怪的是,aws-sdk-go-v2SDK目前根本不支持它("旧"aws-sdk-go支持(。

它与节点角色一起使用,因为不满足上述要求之一,这意味着凭据链"落入"到基础节点角色。

最新更新