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