我正在尝试将部署到 EKS 中同一工作线程节点的 2 个 Pod 关联到不同服务帐户的功能。以下是步骤
- 每个服务帐户都关联到不同的角色,一个角色有权访问 SQS,另一个角色没有访问权限。 使用
- eksutil 将 OIDC 提供者与集群相关联,并在 kubernetes 中创建了带有服务账户的 iamserviceaccount 和带有访问 SQS 的策略的角色(使用 eksctl 提供的 IAM 角色隐式注释服务账户创建 iamserviceaccount(。
但是,当我尝试启动将服务帐户绑定到具有 SQS 访问权限的角色的 pod 时,我被拒绝访问 SQS,但是如果我将 SQS 权限添加到工作节点实例角色,它工作正常。
我是否遗漏了任何步骤,我的理解是否正确?
因此,要使 IRSA 正常工作,需要做一些事情:
- 必须有一个与集群关联的 OIDC 提供程序,遵循此处的说明。
- IAM 角色必须与 OIDC 提供商建立信任关系,如此处的 AWS CLI 示例中所定义。
- 必须使用匹配的
eks.amazonaws.com/role-arn
对服务帐户进行批注。 - 根据 API 文档,Pod 必须在其
spec
中指定适当的服务帐户并serviceAccountName
。 - 应用的 SDK 需要支持
AssumeRoleWithWebIdentity
API 调用。奇怪的是,aws-sdk-go-v2
SDK目前根本不支持它("旧"aws-sdk-go
支持(。
它与节点角色一起使用,因为不满足上述要求之一,这意味着凭据链"落入"到基础节点角色。