管理访问条目 - Amazon EKS

帮助改进此页面

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

管理访问条目

先决条件
  • 熟悉 Amazon EKS 集群的集群访问选项。有关更多信息,请参阅 授予对 Kubernetes API 的访问权限

  • 现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。要使用访问条目并更改集群的身份验证模式,集群的平台版本必须与下表中所列的版本相同或更高,或者 Kubernetes 版本必须比下表中所列的版本更高。

    Kubernetes 版本 平台版本
    1.28 eks.6
    1.27 eks.10
    1.26 eks.11
    1.25 eks.12
    1.24 eks.15
    1.23 eks.17

    您可以通过将以下命令中的 my-cluster 替换为集群名称,然后运行修改后的命令 aws eks describe-cluster --name my-cluster --query 'cluster.{"Kubernetes Version": version, "Platform Version": platformVersion}' 来检查当前的 Kubernetes 和平台版本。

    重要

    在 Amazon EKS 将您的集群更新到表中列出的平台版本后,Amazon EKS 会为最初创建集群的 IAM 主体创建一个具有集群管理员权限的访问条目。如果您不希望该 IAM 主体拥有集群的管理员权限,请移除 Amazon EKS 创建的访问条目。

    对于平台版本早于上表所列版本的集群,集群创建者始终是集群管理员。无法从创建集群的 IAM 用户或角色中移除集群管理员权限。

  • 对您的集群具有以下权限的 IAM 主体:CreateAccessEntryListAccessEntriesDescribeAccessEntryDeleteAccessEntryUpdateAccessEntry。有关 Amazon EKS 权限的更多信息,请参阅《服务授权参考》中的 Amazon Elastic Kubernetes Service 定义的操作

  • 要为其创建访问条目的现有 IAM 主体,或者要更新或删除的现有访问条目。

设置访问条目

要开始使用访问条目,必须将集群的身份验证模式更改为 API_AND_CONFIG_MAPAPI 模式。这为访问条目添加了 API。

AWS Management Console
创建访问条目
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择要在其中创建访问条目的集群的名称。

  3. 选择访问选项卡。

  4. 身份验证模式显示集群的当前身份验证模式。如果模式显示 EKS API,您已经可以添加访问条目了,可以跳过其余的步骤。

  5. 选择管理访问

  6. 对于集群身份验证模式,请使用 EKS API 选择一种模式。请注意,您不能将身份验证模式更改回移除 EKS API 和访问条目的模式。

  7. 选择 Save changes(保存更改)。Amazon EKS 开始更新集群,集群的状态更改为 Updating,更改记录在更新历史记录选项卡中。

  8. 等待集群的状态恢复为 Active。当集群处于 Active 状态时,您可以按照 创建访问条目 中的步骤为 IAM 主体添加对集群的访问权限。

AWS CLI
先决条件

在您的设备上安装并配置了最新版本的 AWS CLI v1 或 AWS CloudShell。AWS CLI v2 已经有一段时间不支持新功能了。您可以使用 aws --version | cut -d / -f2 | cut -d ' ' -f1 检查您的当前版本。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI使用 aws configure 进行快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到您的主目录

  1. 运行以下命令。将 my-cluster 替换为您集群的名称。如果要永久禁用 ConfigMap 方法,请将 API_AND_CONFIG_MAP 替换为 API

    Amazon EKS 开始更新集群,集群的状态更改为 UPDATING,更改记录在 aws eks list-updates 中。

    aws eks update-cluster-config --name my-cluster --access-config authenticationMode=API_AND_CONFIG_MAP
  2. 等待集群的状态恢复为 Active。当集群处于 Active 状态时,您可以按照 创建访问条目 中的步骤为 IAM 主体添加对集群的访问权限。

创建访问条目

注意事项

在创建访问条目之前,请考虑以下事项:

  • 访问条目包含一个(且仅限一个)现有 IAM 主体的 Amazon 资源名称(ARN)。一个 IAM 主体不能包含在多个访问条目中。您指定的 ARN 的其他注意事项:

    • IAM 最佳实践建议使用具有短期凭证的 IAM 角色而不是具有长期凭证的 IAM 用户访问您的集群。有关更多信息,请参阅《IAM 用户指南》中的 要求人类用户使用带有身份提供者的联合身份验证才能使用临时凭证访问 AWS

    • 如果 ARN 适用于 IAM 角色,则可以包含路径。aws-auth ConfigMap 条目中的 ARN 不能包含路径。例如,您的 ARN 可以是 arn:aws:iam::111122223333:role/development/apps/my-rolearn:aws:iam::111122223333:role/my-role

    • 如果访问条目的类型不是 STANDARD(请参阅下文关于类型的注意事项),则 ARN 必须位于与您的集群相同的 AWS 账户。如果类型为 STANDARD,则 ARN 可以位于与您的集群所在的账户相同或不同的 AWS 账户。

    • 在创建访问条目后,您将无法更改 IAM 主体。

    • 如果您删除了具有此 ARN 的 IAM 主体,则访问条目不会自动删除。对于已删除的 IAM 主体,我们建议您删除具有 ARN 的访问条目。如果您不删除访问条目并重新创建 IAM 主体,即使该访问条目具有相同的 ARN,也将无法运行。这是因为尽管重新创建的 IAM 主体的 ARN 相同,但对于重新创建的 IAM 主体,roleIDuserID(您可以用 aws sts get-caller-identity AWS CLI 命令查看)与原始 IAM 主体不同。即使您看不到 IAM 主体的 roleIDuserID 访问条目,Amazon EKS 也会将其与访问条目一起存储。

  • 每个访问条目都有一种类型。您可以将 EC2 Linux(用于与 Linux 或 Bottlerocket 自行管理的节点一起使用的 IAM 角色)、EC2 Windows(用于与 Windows 自行管理的节点一起使用的 IAM 角色)、FARGATE_LINUX(用于与 AWS Fargate (Fargate) 一起使用的 IAM 角色)或 STANDARD 指定为一种类型。如果您不指定类型,则 Amazon EKS 会自动将类型设置为 STANDARD。无需为用于托管节点组或 Fargate 配置文件的 IAM 角色创建访问条目,因为无论您的集群处于哪个平台版本,Amazon EKS 都会将这些角色的条目添加到 aws-auth ConfigMap 中。

    在创建访问条目后,您将无法更改类型。

  • 如果访问条目的类型为 STANDARD,则可以为该访问条目指定用户名。如果您没有为用户名指定值,Amazon EKS 会根据访问条目的类型以及您指定的 IAM 主体是 IAM 角色还是 IAM 用户,为您设置以下值之一。除非您出于特定原因要指定自己的用户名,否则我们建议您不要指定用户名,而是让 Amazon EKS 为您自动生成用户名。如果您指定自己的用户名:

    • 不能以 system:eks:aws:amazon:iam: 开头。

    • 如果该用户名用于 IAM 角色,我们建议您在用户名的末尾添加 {{SessionName}}。如果您在用户名中添加 {{SessionName}},则该用户名必须在 {{SessionName}} 之前加一个冒号。如果分派此角色,则分派此角色时指定的会话名称将自动传递到集群,并显示在 CloudTrail 日志中。例如,您不能将用户名设置为 john{{SessionName}}。用户名必须是 :john{{SessionName}}jo:hn{{SessionName}}。冒号只能在 {{SessionName}} 前面。下表中由 Amazon EKS 生成的用户名包含一个 ARN。由于 ARN 包含冒号,因此符合此要求。如果用户名中未包含 {{SessionName}},则不需要使用冒号。

    IAM 主体类型 类型 Amazon EKS 自动设置的用户名值
    用户 STANDARD

    用户的 ARN。例如:arn:aws:iam::111122223333:user/my-user

    角色 STANDARD

    分派角色时此角色的 STS ARN。Amazon EKS 会将 {{SessionName}} 附加到该角色中。

    例如:arn:aws:sts::111122223333:assumed-role/my-role/{{SessionName}}

    如果您指定的角色的 ARN 包含路径,Amazon EKS 会在生成的用户名中将其移除。

    角色 EC2 LinuxEC2 Windows

    system:node:{{EC2PrivateDNSName}}

    角色 FARGATE_LINUX

    system:node:{{SessionName}}

    创建访问条目后,您可以更改用户名。

  • 如果访问条目的类型为 STANDARD,并且您想使用 Kubernetes RBAC 授权,则可以在访问条目中添加一个或多个组名。创建访问条目后,您可以添加和移除组名。要让 IAM 主体能够访问集群上的 Kubernetes 对象,您必须创建和管理 Kubernetes 基于角色的授权(RBAC)对象。在集群上创建 Kubernetes RoleBindingClusterRoleBinding 对象,将组名指定为 kind: Groupsubject。Kubernetes 授权 IAM 主体访问您在 Kubernetes RoleClusterRole 对象中指定的任何集群对象,这些对象也在绑定的 roleRef 中指定。如果您指定组名,我们建议您熟悉 Kubernetes 基于角色的授权(RBAC)对象。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权

    重要

    Amazon EKS 不会确认您的集群上存在的任何 Kubernetes RBAC 对象是否包含您指定的任何组名。

    或者除了 Kubernetes 授权 IAM 主体访问集群上的 Kubernetes 对象之外,您可以将 Amazon EKS 访问策略关联到访问条目。Amazon EKS 授权 IAM 主体使用访问策略中的权限访问您集群上的 Kubernetes 对象。您可以将访问策略的权限范围限定到您指定的 Kubernetes 命名空间。使用访问策略不需要您管理 Kubernetes RBAC 对象。有关更多信息,请参阅 将访问策略与访问条目关联和取消关联

  • 如果您创建类型为 EC2 LinuxEC2 Windows 的访问条目,则创建访问条目的 IAM 主体必须拥有 iam:PassRole 权限。有关更多信息,请参阅《IAM 用户指南》中的向用户授予权限以将角色传递给 AWS 服务

  • 与标准 IAM 行为类似,访问条目创建和更新最终是一致的,并且在初始 API 调用成功返回后可能需要几秒钟才能生效。您在设计应用程序时,必须考虑到这些可能的延迟。在应用程序的关键、高可用性代码路径中,我们不建议创建或更新访问条目。而应在不常运行的、单独的初始化或设置例程中进行 更改。另外,在生产工作流程依赖这些更改之前,请务必验证更改已传播。

  • 访问条目不支持服务相关角色。如果主体 ARN 是服务相关角色,则无法创建访问条目。您可以通过服务相关角色的 ARN(格式为 arn:aws:iam::*:role/aws-service-role/*)来识别它们。

您可以使用 AWS Management Console 或 AWS CLI 创建访问条目。

AWS Management Console
创建访问条目
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择要在其中创建访问条目的集群的名称。

  3. 选择访问选项卡。

  4. 选择创建访问条目

  5. 对于 IAM 主体,请选择现有的 IAM 角色或用户。IAM 最佳实践建议使用具有短期凭证的 IAM 角色而不是具有长期凭证的 IAM 用户访问您的集群。有关更多信息,请参阅《IAM 用户指南》中的 要求人类用户使用带有身份提供者的联合身份验证才能使用临时凭证访问 AWS

  6. 对于类型,如果访问条目是用于自行管理的 Amazon EC2 节点的节点角色,请选择 EC2 LinuxEC2 Windows。否则,请接受默认值(标准)。

  7. 如果您选择的类型标准,并且想要指定用户名,请输入用户名。

  8. 如果您选择的类型标准,并且您想对 IAM 主体使用 Kubernetes RBAC 授权,请为指定一个或多个名称。如果您未指定任何组名并想使用 Amazon EKS 授权,则可以在后续步骤中或创建访问条目之后关联访问策略。

  9. (可选)对于标签,为访问条目分配标签。例如,为了更轻松地查找所有具有相同标签的资源。

  10. 选择下一步

  11. 添加访问策略页面上,如果您选择的类型是标准,并且希望 Amazon EKS 授权 IAM 主体拥有对集群上 Kubernetes 对象的权限,请完成以下步骤。否则,请选择下一步

    1. 对于策略名称,选择访问策略。您无法查看访问策略的权限,但其包含的权限与 Kubernetes 面向用户的 ClusterRole 对象中的权限类似。有关更多信息,请参阅 Kubernetes 文档中的面向用户的角色

    2. 请选择以下选项之一:

      • 集群 – 如果您希望 Amazon EKS 授权 IAM 主体拥有集群上所有 Kubernetes 对象的访问策略权限,请选择此选项。

      • Kubernetes 命名空间 – 如果您希望 Amazon EKS 授权 IAM 主体拥有集群上特定 Kubernetes 命名空间内所有 Kubernetes 对象的访问策略权限,请选择此选项。对于命名空间,输入集群上 Kubernetes 命名空间的名称。如果要添加其他命名空间,请选择添加新命名空间并输入命名空间名称。

    3. 如果要添加其他策略,请选择添加策略。您可以对每个策略设定不同的范围,但每个策略只能添加一次。

    4. 选择下一步

  12. 查看访问条目的配置。如果有任何内容看起来不正确,请选择上一步以返回步骤并更正错误。如果配置正确,请选择创建

AWS CLI
先决条件

在您的设备上安装并配置了最新版本的 AWS CLI v1 或 AWS CloudShell。AWS CLI v2 已经有一段时间不支持新功能了。您可以使用 aws --version | cut -d / -f2 | cut -d ' ' -f1 检查您的当前版本。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI使用 aws configure 进行快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到您的主目录

创建访问条目

您可以使用以下任意示例来创建访问条目:

  • 为自行管理的 Amazon EC2 Linux 节点组创建访问条目。将 my-cluster 替换为您的集群名称,将 111122223333 替换为您的 AWS 账户 ID,将 EKS-my-cluster-self-managed-ng-1 替换为您的节点 IAM 角色的名称。如果您的节点组是 Windows 节点组,则将 EC2_Linux 替换为 EC2_Windows

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/EKS-my-cluster-self-managed-ng-1 --type EC2_Linux

    当您指定除 STANDARD 之外的类型时,不能使用 --kubernetes-groups 选项。您无法将访问策略与该访问条目相关联,因为其类型的值不是 STANDARD

  • 创建一个允许 IAM 角色的访问条目,该角色不用于 Amazon EC2 自行管理的节点组,您想要 Kubernetes 通过该角色授权访问您的集群。将 my-cluster 替换为您的集群的名称,将 111122223333 替换为您的 AWS 账户 ID,将 my-role 替换为您的 IAM 角色的名称。将 Viewers 替换为您在集群上的 Kubernetes RoleBindingClusterRoleBinding 对象中指定的组的名称。

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role --type STANDARD --user Viewers --kubernetes-groups Viewers
  • 创建允许 IAM 用户对集群进行身份验证的访问条目。之所以提供此示例,是因为尽管 IAM 最佳实践建议使用具有短期凭证的 IAM 角色而不是具有长期凭证的 IAM 用户访问集群,但这仍是可行的。有关更多信息,请参阅《IAM 用户指南》中的 要求人类用户使用带有身份提供者的联合身份验证才能使用临时凭证访问 AWS

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:user/my-user --type STANDARD --username my-user

    如果您希望此用户对您的集群拥有的访问权限超过 Kubernetes API 发现角色中的权限,则需要将访问策略与访问条目相关联,因为未使用 --kubernetes-groups 选项。有关更多信息,请参阅 Kubernetes 文档中的 将访问策略与访问条目关联和取消关联API 发现角色

更新访问条目

您可以使用 AWS Management Console 或 AWS CLI 更新访问条目。

AWS Management Console
更新访问条目
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择要在其中创建访问条目的集群的名称。

  3. 选择访问选项卡。

  4. 选择要更新的访问条目。

  5. 选择编辑

  6. 对于用户名,您可以更改现有值。

  7. 对于,您可以移除现有的组名称或添加新的组名称。如果存在以下组名称,请不要将其移除:system:nodessystem:bootstrappers。移除这些组可能会导致集群无法正常运行。如果您未指定任何组名称并想使用 Amazon EKS 授权,请在后续步骤中关联访问策略

  8. 对于标签,您可以为访问条目分配标签。例如,为了更轻松地查找所有具有相同标签的资源。您也可以移除现有标签。

  9. 选择 Save changes(保存更改)

  10. 如果要将访问策略与条目关联,请参阅 将访问策略与访问条目关联和取消关联

AWS CLI
先决条件

在您的设备或 AWS CloudShell 上安装和配置了 AWS Command Line Interface(AWS CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI,以及使用 aws configure 快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。如需更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到主目录

更新访问条目

my-cluster 替换为您的集群名称,将 111122223333 替换为您的 AWS 账户 ID,将 EKS-my-cluster-my-namespace-Viewers 替换为 IAM 角色的名称。

aws eks update-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/EKS-my-cluster-my-namespace-Viewers --kubernetes-groups Viewers

如果访问条目的类型值不是 STANDARD,则不能使用 --kubernetes-groups 选项。您也不能将访问策略与访问条目关联到 STANDARD 类型之外的访问条目。

删除访问条目

如果您发现自己误删了访问条目,则可以随时重新创建。如果您要删除的访问条目与任何访问策略相关联,则关联会自动删除。在删除访问条目之前,您不必取消访问策略与访问条目的关联。

您可以使用 AWS Management Console 或 AWS CLI 删除访问条目。

AWS Management Console
删除访问条目
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择要从中删除访问条目的集群的名称。

  3. 选择访问选项卡。

  4. 访问条目列表中,选择要删除的访问条目。

  5. 选择 Delete。

  6. 在确认对话框中,选择删除

AWS CLI
先决条件

在您的设备或 AWS CloudShell 上安装和配置了 AWS Command Line Interface(AWS CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI,以及使用 aws configure 快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。如需更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到主目录

删除访问条目

my-cluster 替换为您的集群名称,将 111122223333 替换为您的 AWS 账户 ID,将 my-role 替换为您不想再访问集群的 IAM 角色的名称。

aws eks delete-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role