创建访问条目 - Amazon EKS

创建访问条目

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

  • 身份验证模式设置正确。请参阅 更改身份验证模式以使用访问条目

  • 访问条目包含一个(且仅限一个)现有 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-role> arn: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 console 控制台

  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

  1. 按照《AWS 命令行界面用户指南》中的安装中所述安装 AWS CLI。

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

    • 为自行管理的 Amazon EC2 Linux 节点组创建访问条目。将 my-cluster 替换为您的集群名称,将 111122223333 替换为您的 AWS 账户 ID,将 EKS-my-cluster-self-managed-ng-1 替换为您的Amazon EKS 节点 IAM 角色节点 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 发现角色