

 **帮助改进此页面** 

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

# 向 IAM 用户和角色授予对 Kubernetes API 的访问权限
<a name="grant-k8s-access"></a>

集群有一个 Kubernetes API 端点。Kubectl 使用此 API。您可以使用两种类型的身份对此 API 进行身份验证：
+  **AWS Identity and Access Management（IAM）*主体*（角色或用户）**– 此类型需要对 IAM 进行身份验证。用户可以使用通过身份源提供的凭证以 [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 用户或[联合身份](https://aws.amazon.com/identity/federation/)登录到 AWS。如果您的管理员以前使用 IAM 角色设置了身份联合验证，则用户只能使用联合身份登录。当用户使用联合身份验证访问 AWS 时，他们就是在间接[分派角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/when-to-use-iam.html#security-iam-authentication-iamrole)。当用户使用此类身份时，您：
  + 可以为用户分配 Kubernetes 权限，以便他们使用集群上的 Kubernetes 对象。有关如何为 IAM 主体分配权限以便他们能够访问集群上的 Kubernetes 对象的更多信息，请参阅[使用 EKS 访问条目向 IAM 用户授予 Kubernetes 访问权限](access-entries.md)。
  + 可以为他们分配 IAM 权限，以便其使用 Amazon EKS API、AWS CLI、AWS、AWS 管理控制台 CloudFormation 或 `eksctl` 使用您的 Amazon EKS 集群及其资源。有关更多信息，请参阅《服务授权参考》中的 [Amazon Elastic Kubernetes Service 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html#amazonelastickubernetesservice-actions-as-permissions)。
  + 节点通过分派 IAM 角色加入您的集群。使用 IAM 主体访问集群的能力由[适用于 Kubernetes 的 AWS IAM 身份验证器](https://github.com/kubernetes-sigs/aws-iam-authenticator#readme)提供，该工具在 Amazon EKS 控制面板上运行。
+  **您自己的 OpenID Connect（OIDC）提供者中的用户** – 此类型需要对您的 [OIDC](https://openid.net/connect/) 提供者进行身份验证。有关使用 Amazon EKS 集群设置自己的 OIDC 提供者的更多信息，请参阅[通过外部 OIDC 提供者向用户授予 Kubernetes 访问权限](authenticate-oidc-identity-provider.md)。当用户使用此类身份时，您：
  + 可以为用户分配 Kubernetes 权限，以便他们使用集群上的 Kubernetes 对象。
  + 无法向他们分配 IAM 权限，使他们能够使用 Amazon EKS API、AWS CLI、AWS CloudFormation、AWS 管理控制台或 `eksctl` 使用您的 Amazon EKS 集群及其资源。

您可以在集群中使用这两种类型的身份。IAM 身份验证方法无法禁用。OIDC 身份验证方法是可选的。

## 将 IAM 身份与 Kubernetes 权限相关联
<a name="authentication-modes"></a>

[适用于 Kubernetes 的 AWS IAM 身份验证器](https://github.com/kubernetes-sigs/aws-iam-authenticator#readme)安装在集群的控制面板上。该工具使您允许的 [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)（IAM）主体（角色和用户）能够访问集群上的 Kubernetes 资源。您可以使用以下某一种方法，允许 IAM 主体访问集群上的 Kubernetes 对象：
+  **创建访问条目** – 如果集群的 Kubernetes 版本等于或高于[先决条件](access-entries.md)部分所列的平台版本，建议使用此选项。

  使用*访问条目*管理集群外的 IAM 主体的 Kubernetes 权限。您可以使用 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation 和 AWS 管理控制台来添加和管理对集群的访问权限。这意味着您可以使用与创建集群相同的工具来管理用户。

  首先[将身份验证模式改为使用访问条目](setting-up-access-entries.md)，然后[将现有 aws-auth ConfigMap 条目迁移到访问条目](migrating-access-entries.md)。
+  **向 `aws-auth` `ConfigMap` 中添加条目** – 如果集群的平台版本早于[先决条件](access-entries.md)部分中列出的版本，则必须使用此选项。对于集群的 Kubernetes 版本，如果集群的平台版本等于或高于[先决条件](access-entries.md)部分所列的平台版本，并且您已向 `ConfigMap` 添加了条目，建议将这些条目迁移到访问条目。但是，您无法迁移 Amazon EKS 添加到 `ConfigMap` 的条目，例如与托管节点组结合使用的 IAM 角色的条目或 Fargate 配置文件。有关更多信息，请参阅 [向 IAM 用户和角色授予对 Kubernetes API 的访问权限](#grant-k8s-access)。
  + 如果必须使用 `aws-auth` `ConfigMap` 选项，则可以使用 `eksctl create iamidentitymapping` 命令向 `ConfigMap` 中添加条目。有关更多信息，请参阅 `eksctl` 文档中的[管理 IAM 用户和角色](https://eksctl.io/usage/iam-identity-mappings/)。

## 设置集群身份验证模式
<a name="set-cam"></a>

每个集群都有一种*身份验证模式*。身份验证模式决定了您可以使用哪些方法来允许 IAM 主体访问集群上的 Kubernetes 对象。有三种身份验证模式。

**重要**  
一旦启用了访问条目方法，就无法将其禁用。  
如果在创建集群时未启用 `ConfigMap` 方法，则以后无法启用它。在引入访问条目之前创建的所有集群都启用了 `ConfigMap` 方法。  
如果您在集群中使用混合节点，则必须使用 `API` 或 `API_AND_CONFIG_MAP` 集群身份验证模式。

 **集群内部的 `aws-auth` `ConfigMap`**   
这是 Amazon EKS 集群的原始身份验证模式。创建集群的 IAM 主体是可以使用 `kubectl` 访问集群的初始用户。初始用户必须将其他用户添加到 `aws-auth` `ConfigMap` 中的列表中，并分配影响集群内其他用户的权限。这些其它用户无法管理或移除初始用户，因为 `ConfigMap` 中没有要管理的条目。

 **`ConfigMap` 和访问条目**   
使用这种身份验证模式，您可以使用这两种方法向集群添加 IAM 主体。请注意，每种方法都存储单独的条目；例如，如果您从 AWS CLI 中添加访问条目，`aws-auth` `ConfigMap` 则不会更新。

 **仅访问条目**   
使用这种身份验证模式，您可以使用 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation 和 AWS 管理控制台来管理 IAM 主体对集群的访问权限。  
每个访问条目都有一种*类型*，您可以使用*访问范围*将主体限制在特定的命名空间和*访问策略*的组合来设置预先配置且可重复使用的权限策略。您也可以使用 STANDARD 类型和 Kubernetes RBAC 组来分配自定义权限。


| 身份验证模式 | 方法 | 
| --- | --- | 
|   仅 `ConfigMap` (`CONFIG_MAP`)  |   `aws-auth` `ConfigMap`   | 
|  EKS API 和 `ConfigMap` (`API_AND_CONFIG_MAP`)  |  访问 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation AWS 管理控制台 和 `aws-auth` `ConfigMap` 中的条目   | 
|  仅 EKS API (`API`)  |  访问 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation 和 AWS 管理控制台中的条目   | 

**注意**  
Amazon EKS 自动模式需要使用访问条目。