

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 创建访问条目
<a name="creating-access-entries"></a>

在创建访问条目之前，请考虑以下事项：
+ 身份验证模式设置正确。请参阅[更改身份验证模式以使用访问条目](setting-up-access-entries.md)。
+ *访问条目*包含一个（且仅限一个）现有 IAM 主体的 Amazon 资源名称（ARN）。一个 IAM 主体不能包含在多个访问条目中。您指定的 ARN 的其他注意事项：
  + IAM 最佳实践建议使用具有短期凭证的 IAM *角色*而不是具有长期凭证的 IAM *用户*访问您的集群。有关更多信息，请参阅《IAM 用户指南》中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 Amazon](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)**。
  + 如果 ARN 适用于 IAM 角色，则*可以*包含路径。`aws-auth` `ConfigMap` 条目中的 ARN *不能*包含路径。例如，您的 ARN 可以是 ` arn:aws-cn:iam::<111122223333>:role/<development/apps/my-role>` 或 ` arn:aws-cn:iam::<111122223333>:role/<my-role>`。
  + 如果访问条目的类型不是 `STANDARD`（请参阅下文关于类型的注意事项），则 ARN 必须位于与您的集群相同的 Amazon 账户。如果类型为 `STANDARD`，则 ARN 可以位于与您的集群所在的账户相同或不同的 Amazon 账户。
  + 在创建访问条目后，您将无法更改 IAM 主体。
  + 如果您删除了具有此 ARN 的 IAM 主体，则访问条目不会自动删除。对于已删除的 IAM 主体，我们建议您删除具有 ARN 的访问条目。如果您不删除访问条目并重新创建 IAM 主体，即使该访问条目具有相同的 ARN，也将无法运行。这是因为尽管重新创建的 IAM 主体的 ARN 相同，但对于重新创建的 IAM 主体，`roleID` 或 `userID`（您可以用 `aws sts get-caller-identity` Amazon CLI 命令查看）与原始 IAM 主体不同。即使您看不到 IAM 主体的 `roleID` 或 `userID` 访问条目，Amazon EKS 也会将其与访问条目一起存储。
+ 每个访问条目都有一种*类型*。访问条目的类型取决于与其关联的资源类型，并且不定义权限。如果不指定类型，Amazon EKS 会自动将类型设置为 `STANDARD` 
  +  `EC2_LINUX`：适用于与 Linux 或 Bottlerocket 自主管理型节点一起使用的 IAM 角色
  +  `EC2_WINDOWS`：适用于与 Windows 自主管理型节点一起使用的 IAM 角色
  +  `FARGATE_LINUX`：适用于与 Amazon Fargate（Fargate）一起使用的 IAM 角色
  +  `HYBRID_LINUX`：适用于与混合节点一起使用的 IAM 角色
  +  `STANDARD`：若未指定，则采用默认类型
  +  `EC2`：适用于 EKS 自动模式自定义节点类。有关更多信息，请参阅 [创建节点类访问条目](create-node-class.md#auto-node-access-entry)。
  + 在创建访问条目后，您将无法更改类型。
+ 无需为用于托管式节点组或 Fargate 配置文件的 IAM 角色创建访问条目。EKS 将创建访问条目（如果启用），或者更新身份验证配置映射（如果访问条目不可用）
+ 如果访问条目的类型为 `STANDARD`，则可以为该访问条目指定*用户名*。如果您没有为用户名指定值，Amazon EKS 会根据访问条目的类型以及您指定的 IAM 主体是 IAM 角色还是 IAM 用户，为您设置以下值之一。除非您出于特定原因要指定自己的用户名，否则我们建议您不要指定用户名，而是让 Amazon EKS 为您自动生成用户名。如果您指定自己的用户名：
  + 不能以 `system:`、`eks:`、`aws:`、`amazon:` 或 `iam:` 开头。
  + 如果该用户名用于 IAM 角色，我们建议您在用户名的末尾添加 `{{SessionName}}` 或 `{{SessionNameRaw}}`。如果您在用户名中添加 `{{SessionName}}` 或 `{{SessionNameRaw}}`，则该用户名必须在 \$1\$1SessionName\$1\$1 *之前*加一个冒号。如果担任此角色，则担任此角色时指定的 Amazon STS 会话名称将自动传递到集群，并显示在 CloudTrail 日志中。例如，您不能将用户名设置为 `john{{SessionName}}`。用户名必须是 `:john{{SessionName}}` 或 `jo:hn{{SessionName}}`。冒号只能在 `{{SessionName}}` 前面。下表中由 Amazon EKS 生成的用户名包含一个 ARN。由于 ARN 包含冒号，因此符合此要求。如果用户名中未包含 `{{SessionName}}`，则不需要使用冒号。请注意，会话名称 `{{SessionName}}` 中的特殊字符“@”已替换为“-”。`{{SessionNameRaw}}` 保留会话名称中的所有特殊字符。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/eks/latest/userguide/creating-access-entries.html)

    创建访问条目后，您可以更改用户名。
+ 如果访问条目的类型为 `STANDARD`，并且您想使用 Kubernetes RBAC 授权，则可以在访问条目中添加一个或多个*组名称*。创建访问条目后，您可以添加和移除组名。要让 IAM 主体能够访问集群上的 Kubernetes 对象，您必须创建和管理 Kubernetes 基于角色的授权（RBAC）对象。在集群上创建 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 对象，将组名称指定为 `kind: Group` 的 `subject`。Kubernetes 授权 IAM 主体访问您已在 Kubernetes `Role` 或 `ClusterRole` 对象中指定的任何集群对象（您也在绑定的 `roleRef` 中指定了这些对象）。如果指定组名称，建议熟悉 Kubernetes 基于角色的授权（RBAC）对象。有关更多信息，请参阅 Kubernetes 文档中的[使用 RBAC 授权](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。
**重要**  
Amazon EKS 不会确认您集群上存在的任何 Kubernetes RBAC 对象是否包含您指定的任何组名称。例如，假设您为某个当前不存在的组创建访问条目，EKS 将会创建该组而不是返回错误。

  除了 Kubernetes 授权 IAM 主体访问集群上的 Kubernetes 对象之外，您还可以将 Amazon EKS *访问策略*关联到访问条目。Amazon EKS 授权 IAM 主体使用访问策略中的权限访问您集群上的 Kubernetes 对象。您可以将访问策略的权限范围限定到自己指定的 Kubernetes 命名空间。使用访问策略不需要您管理 Kubernetes RBAC 对象。有关更多信息，请参阅 [将访问策略与访问条目关联起来](access-policies.md)。
+ 如果您创建类型为 `EC2_LINUX` 或 `EC2_Windows` 的访问条目，则创建访问条目的 IAM 主体必须拥有 `iam:PassRole` 权限。有关更多信息，请参阅 *IAM 用户指南*中的[向用户授予将角色传递给 Amazon 服务的权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_passrole.html)。
+ 与标准 [IAM 行为](https://docs.amazonaws.cn/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency)类似，访问条目创建和更新最终是一致的，并且在初始 API 调用成功返回后可能需要几秒钟才能生效。您在设计应用程序时，必须考虑到这些可能的延迟。在应用程序的关键、高可用性代码路径中，我们不建议创建或更新访问条目。而应在不常运行的、单独的初始化或设置例程中进行 更改。另外，在生产工作流程依赖这些更改之前，请务必验证更改已传播。
+ 访问条目不支持[服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html)。如果主体 ARN 是服务相关角色，则无法创建访问条目。您可以通过服务相关角色的 ARN（格式为 ` arn:aws-cn:iam::*:role/aws-service-role/*`）来识别它们。

您可以使用 Amazon Web Services 管理控制台或 Amazon CLI 创建访问条目。

## Amazon Web Services 管理控制台
<a name="access-create-console"></a>

1. 打开 [Amazon EKS 控制台](https://console.amazonaws.cn/eks/home#/clusters)。

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

1. 选择**访问**选项卡。

1. 选择**创建访问条目**。

1. 对于 **IAM 主体**，请选择现有的 IAM 角色或用户。IAM 最佳实践建议使用具有短期凭证的 IAM *角色*而不是具有长期凭证的 IAM *用户*访问您的集群。有关更多信息，请参阅《IAM 用户指南》中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 Amazon](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)**。

1. 对于**类型**，如果访问条目是用于自行管理的 Amazon EC2 节点的节点角色，请选择 **EC2 Linux** 或 **EC2 Windows**。否则，请接受默认值（**标准**）。

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

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

1. （可选）对于**标签**，为访问条目分配标签。例如，为了更轻松地查找所有具有相同标签的资源。

1. 选择**下一步**。

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

   1. 对于**策略名称**，选择访问策略。您无法查看访问策略的权限，但这些策略包含的权限与 Kubernetes 面向用户的 `ClusterRole` 对象中的权限类似。有关更多信息，请参阅 Kubernetes 文档中的[面向用户的角色](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)。

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

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

   1. 选择**下一步**。

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

## Amazon CLI
<a name="access-create-cli"></a>

1. 按照《Amazon 命令行界面用户指南》中的[安装](https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-install.html)中所述安装 Amazon CLI。

1. 创建访问条目 您可以使用以下任意示例来创建访问条目：
   + 为自行管理的 Amazon EC2 Linux 节点组创建访问条目。请将 *my-cluster* 替换为您的集群名称，将 *111122223333* 替换为您的 Amazon 账户 ID，将 *EKS-my-cluster-self-managed-ng-1* 替换为您的[节点 IAM 角色](create-node-role.md)的名称。如果节点组是 Windows 节点组，则将 *EC2\$1LINUX* 替换为 `EC2_Windows`。

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

     当您指定除 `STANDARD` 之外的类型时，不能使用 `--kubernetes-groups` 选项。您无法将访问策略与该访问条目相关联，因为其类型的值不是 `STANDARD`。
   + 创建一个允许 IAM 角色的访问条目，该角色不用于 Amazon EC2 自主管理型节点组，您想要 Kubernetes 通过该角色授权访问您的集群。将 *my-cluster* 替换为您的集群的名称，将 *111122223333* 替换为您的 Amazon 账户 ID，将 *my-role* 替换为您的 IAM 角色的名称。将 *Viewers* 替换为您在集群上的 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 对象中指定的组的名称。

     ```
     aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws-cn:iam::111122223333:role/my-role --type STANDARD --user Viewers --kubernetes-groups Viewers
     ```
   + 创建允许 IAM 用户对集群进行身份验证的访问条目。之所以提供此示例，是因为尽管 IAM 最佳实践建议使用具有短期凭证的 IAM *角色*而不是具有长期凭证的 IAM *用户*访问集群，但这仍是可行的。有关更多信息，请参阅《IAM 用户指南》中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 Amazon](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)**。

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

     如果您希望此用户对您的集群拥有的访问权限超过 Kubernetes API 发现角色中的权限，则需要将访问策略与访问条目相关联，因为未使用 `--kubernetes-groups` 选项。有关更多信息，请参阅[将访问策略与访问条目关联起来](access-policies.md)，以及 Kubernetes 文档中的 [API 发现角色](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#discovery-roles)。