【问题标题】:Kubernetes service account role using OIDC使用 OIDC 的 Kubernetes 服务帐户角色
【发布时间】:2020-03-26 19:48:12
【问题描述】:

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

  • 每个服务帐户都与不同的角色相关联,一个可以访问 SQS,另一个则不能访问。
  • 使用 eksutil 将 OIDC 提供程序与集群相关联,并使用 kubernetes 中的服务帐户创建了 iamserviceaccount,并使用附加的访问 SQS 的策略创建了角色(由 eksctl create iamserviceaccount 提供的具有 IAM 角色的服务帐户的隐式注释)。

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

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

【问题讨论】:

    标签: kubernetes openid-connect kubernetes-pod amazon-eks eksctl


    【解决方案1】:

    所以,要让 IRSA 工作,需要做一些事情:

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

    它与节点角色一起工作,因为没有满足上述要求之一,这意味着凭证链“落入”底层节点角色。

    【讨论】:

    • @asthsr 我相信第 1 点由 ekstcl utils associate oidc api 调用负责,2 和 3 由 eksctl create iamserviceaccount 负责。与第 4 点一样,我使用 java sdk
    • 手动验证您使用eksctl 的所有步骤。确保您的 pod 指定了 serviceAccountName。确保您的 Java SDK meets the minimum version requirement.
    • 你是对的。这确实是java sdk问题。我使用的是 1.11.573。升级版本后它就可以工作了。
    • @asthasr 谢谢。我无法使用 eksctl 创建 iamserviceaccount,因为 eks 集群不是使用 eksctl 创建的。只有你的帖子,特别是第 3 点才成功。我无法在任何地方找到该信息
    猜你喜欢
    • 2020-12-23
    • 2020-04-08
    • 2019-09-02
    • 2020-08-07
    • 2021-10-28
    • 2019-10-20
    • 2021-05-18
    • 2021-07-11
    • 2019-09-08
    相关资源
    最近更新 更多