EKS 容器组身份 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

EKS 容器组身份

Pod 的容器中的应用程序可以使用 AWS 开发工具包或 AWS CLI,以向使用 AWS Identity and Access Management(IAM)权限的 AWS 服务 发出 API 请求。应用程序必须通过 AWS 凭证签署 AWS API 请求。

Amazon EKS 容器组身份提供管理应用程序凭证的功能,类似于 Amazon EC2 实例配置文件为 Amazon EC2 实例提供凭证的方式。您可以将 IAM 角色与 Kubernetes 服务账户关联并配置 Pods 使用服务账户,而不是创建 AWS 凭证并将其分配到容器或使用 Amazon EC2 实例的角色。

每个 EKS 容器组身份关联都将角色映射到指定集群命名空间中的服务账户。如果您在多个集群中使用相同的应用程序,则可以在每个集群中进行相同的关联,而无需修改角色的信任策略。

如果某个容器组使用具有关联的服务账户,Amazon EKS 会在容器组的容器中设置环境变量。环境变量配置 AWS SDK(包括 AWS CLI)使用 EKS 容器组身份凭证。

EKS 容器组身份的优势

EKS 容器组身份具有以下优势:

  • 最低权限 – 您可以将 IAM 权限范围限定到服务账户,并且只有使用该服务账户的 Pods 可以访问这些权限。此功能还消除了对 kiamkube2iam 等第三方解决方案的需求。

  • 凭证隔离 – Pod's 的容器只能检索与该容器所使用服务账户关联的 IAM 角色的凭证。容器永远无法访问其他 Pods 中其他容器所使用的凭证。使用容器组身份时,Pod's 容器还具有分配给 Amazon EKS 节点 IAM 角色的权限,除非您阻止 Pod 访问 Amazon EC2 实例元数据服务(IMDS)。有关更多信息,请参阅限制对分配给工作节点的实例配置文件的访问

  • 可审计性:可通过 AWS CloudTrail 进行访问和事件日志记录,帮助确保追溯性审计。

EKS 容器组身份是一种比 服务账户的 IAM 角色 更简单的方法,因为此方法不使用 OIDC 身份提供者。EKS 容器组身份具有以下增强功能:

  • 独立操作:在许多组织中,不同的团队负责创建 OIDC 身份提供者,而不是管理 Kubernetes 集群。EKS 容器组身份有明确的职责分工,EKS 容器组身份关联的所有配置都在 Amazon EKS 中完成,而 IAM 权限的所有配置都在 IAM 中完成。

  • 可重用性:EKS 容器组身份使用单个 IAM 主体,而不是服务账户 IAM 角色使用的每个集群的单独主体。IAM 管理员将以下主体添加到任何角色的信任策略中,使其可供 EKS 容器组身份使用。

    "Principal": { "Service": "pods.eks.amazonaws.com" }
  • 可扩展性:每组临时凭证均由 EKS 容器组身份中的 EKS Auth 服务使用,而不是由每个容器组中运行的每个 AWS SDK 使用。然后,在每个节点上运行的 Amazon EKS 容器组身份代理向 SDK 发放凭证。因此,每个节点的负载减少至一次,而且不会在每个容器组中重复。有关该过程的更多详细信息,请参阅 EKS 容器组身份的工作原理

有关比较两种替代方案的更多信息,请参阅 使用 Kubernetes 服务账户授予 Kubernetes 工作负载访问 AWS 的权限

EKS 容器组身份设置概述

完成以下过程,打开 EKS 容器组身份:

  1. 设置 Amazon EKS 容器组身份代理 – 对于每个集群,您只需完成一次此步骤。

  2. 配置 Kubernetes 服务账户以使用 EKS 容器组身份分派 IAM 角色 – 针对您希望应用程序拥有的每组唯一权限完成此步骤。

  3. 配置 Pods 以使用 Kubernetes 服务账户 – 为需要访问 AWS 服务 的每个 Pod 完成此步骤。

  4. 使用支持的 AWS 开发工具包:确认工作负载使用支持版本的 AWS SDK,并且工作负载使用默认凭证链。

EKS 容器组身份注意事项

  • 您可以将一个 IAM 角色关联到每个集群中的每个 Kubernetes 服务账户。您可以编辑 EKS 容器组身份关联,来更改映射到服务账户的角色。

  • 只能关联与集群属于同一 AWS 账户 的角色。您可以将其他账户访问权限委派给此账户中的角色,也即您配置的供 EKS 容器组身份使用的角色。有关关于委派访问和 AssumeRole 的教程,请参阅 《IAM 用户指南》中的使用 IAM 角色委派 AWS 账户的访问

  • EKS 容器组身份代理是必需的。此代理作为 Kubernetes DaemonSet 在您的节点上运行,并且仅向其运行节点上的容器组提供凭证。有关 EKS 容器组身份代理兼容性的更多信息,请参阅以下部分 EKS 容器组身份限制

  • EKS 容器组身份代理使用节点的 hostNetwork,并使用节点上链路本地地址上的端口 80 和端口 2703。对于 IPv4,该地址是 169.254.170.23;对于 IPv6 集群,该地址是 [fd00:ec2::23]

    如果禁用 IPv6 地址或以其他方式阻止本地主机 IPv6 IP 地址,代理将无法启动。要在无法使用 IPv6 的节点上启动代理,请按照 在 EKS 容器组身份代理中禁用 IPv6 中的步骤禁用 IPv6 配置。

EKS 容器组身份集群版本

要使用 EKS 容器组身份,集群的平台版本必须与下表中所列的版本相同或更高,或者 Kubernetes 版本必须比下表中所列的版本更高。

Kubernetes 版本 平台版本
1.30 eks.2
1.29 eks.1
1.28 eks.4
1.27 eks.8
1.26 eks.9
1.25 eks.10
1.24 eks.13

与 EKS 容器组身份兼容的附加组件版本

重要

要将 EKS 容器组身份与 EKS 附加组件结合使用,必须手动创建 EKS 容器组身份关联。请勿在 AWS Management Console 的附加组件配置中选择 IAM 角色,该角色仅用于 IRSA。

需要 IAM 凭证的 Amazon EKS 附加组件以及自行管理的附加组件可以使用 EKS 容器组身份、IRSA 或实例角色。使用支持 EKS 容器组身份的 IAM 凭证的附加组件列表包括:

  • Amazon VPC CNI plugin for Kubernetes 1.15.5-eksbuild.1 或更高版本

  • AWS Load Balancer Controller 2.7.0 或更高版本。请注意,AWS Load Balancer Controller 不能作为 EKS 附加组件使用,但可以作为自行管理的附加组件使用。

EKS 容器组身份限制

EKS 容器组身份适用于:

EKS 容器组身份不适用于:

  • 中国区域

  • AWS GovCloud (US).

  • AWS Outposts.

  • Amazon EKS Anywhere。

  • 您在 Amazon EC2 上创建和运行的 Kubernetes 集群。EKS 容器组身份组件仅在 Amazon EKS 上可用。

您不能将 EKS 容器组身份用于:

  • 在 Linux Amazon EC2 实例之外的任何位置运行的容器组。不支持在 AWS Fargate (Fargate) 上运行的 Linux 和 Windows 容器组。不支持 Windows Amazon EC2 实例上运行的容器组。

  • 需要 IAM 凭证的 Amazon EKS 插件。EKS 插件只能使用服务账户的 IAM 角色。使用 IAM 凭证的 EKS 插件列表包括:

    • CSI 存储驱动程序:EBS CSI、EFS CSI、适用于 Lustre CSI 驱动程序的 Amazon FSx、适用于 NetApp ONTAP CSI 驱动程序的 Amazon FSx、适用于 OpenZFS CSI 驱动程序的 Amazon FSx、适用于 Kubernetes Secrets Store CSI 驱动程序的 AWS Secrets and Configuration Provider(ASCP)

    注意

    如果这些控制器、驱动程序和插件作为自我管理的插件而不是作为 EKS 插件安装,则只要其更新为使用最新的 AWS SDK,则支持 EKS 容器组身份。