

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 集群访问管理
<a name="cluster-access-management"></a>

有效的访问管理对于维护 Amazon EKS 集群的安全性和完整性至关重要。本指南探讨了 EKS 访问管理的各种选项，重点介绍如何使用 AWS IAM 身份中心（前身为 AWS SSO）。我们将比较不同的方法，讨论它们的权衡取舍，并重点介绍已知的局限性和注意事项。

## EKS 访问管理选项
<a name="_eks_access_management_options"></a>

**注意**  
ConfigMap已弃用基于集群访问管理 (aws-auth ConfigMap) 的访问管理 (aws-auth)，取而代之的是集群访问管理 (CAM) API。对于新的 EKS 集群，请实施 CAM API 来管理集群访问权限。对于使用 aws-auth 的现有集群 ConfigMap，请迁移到使用 CAM API。

## 选项 1：带有集群访问管理 (CAM) API 的 AWS IAM 身份中心
<a name="_option_1_aws_iam_identity_center_with_cluster_access_management_cam_api"></a>
+ 集中式用户和权限管理
+ 与现有身份提供商（例如 Microsoft AD、Okta 等）集成 PingId 
+ CAM API 使用访问条目将 AWS IAM 委托人（用户或角色）链接到 EKS 集群。这些条目可与 IAM Identity Center 的托管身份配合使用，允许管理员控制在 Identity Center 中定义的用户和群组的集群访问权限。

### EKS 集群身份验证流程：
<a name="_eks_cluster_authentication_flow"></a>

![\[EKS 集群身份验证流程\]](http://docs.aws.amazon.com/zh_cn/eks/latest/best-practices/images/eks-auth-flow.jpg)


1. 委托人（人类用户）或自动流程通过出示相应的 AWS 账户权限通过 AWS IAM 进行身份验证。在此步骤中，它们会映射到相应的 AWS IAM 委托人（角色或用户）。

1. 接下来，通过定义适当的访问策略（仅包含 Kubernetes 权限），EKS 访问条目将此 IAM 委托人映射到 Kubernetes RBAC 委托人（用户或群组）。

1. 当 Kubernetes 最终用户尝试访问集群时，其身份验证请求将由或 aws-iam-authenticator AWS EKS CLI 处理，并根据 kubeconfig 文件中的集群环境进行验证。

1. 最后，EKS 授权者验证与经过身份验证的用户的访问条目相关的权限，并相应地授予或拒绝访问权限。
   + API 使用特定于 Amazon EKS 的访问策略来定义每个访问条目的授权级别。这些策略可以映射到 IAM Identity Center 中设置的角色和权限，从而确保对 AWS 服务和 EKS 集群进行一致的访问控制。

### 与 ConfigMap基于基础的访问管理相比的优点：
<a name="_benefits_over_configmap_based_access_management"></a>

1.  **降低配置错误的风险**：基于 API 的直接管理可消除与手动编辑相关的常见错误。 ConfigMap 这有助于防止意外删除或语法错误，这些错误可能会将用户锁定在集群之外。

1.  **增强的最低权限原则**：不再需要集群创建者身份中的集群管理员权限，并允许进行更精细和适当的权限分配。您可以选择为破碎玻璃用例添加此权限。

1.  **增强的安全模型**：在应用访问条目之前提供对访问条目的内置验证。此外，还提供与 AWS IAM 更紧密的集成以进行身份验证。

1.  **简化操作**：通过 AWS 原生工具提供更直观的权限管理方式。

### 最佳实践：
<a name="_best_practices"></a>

1. 使用 AWS Organizations 管理多个账户并应用服务控制策略 (SCPs)。

1. 通过为不同的 EKS 角色（例如管理员、开发人员、只读）创建特定的权限集来实现最低权限原则。

1. 利用基于属性的访问控制 (ABAC)，根据用户属性为容器动态分配权限。

1. 定期审计和审查访问权限。

### 注意事项/限制：
<a name="_considerationslimitations"></a>

1. Identity Center ARNs 生成的角色具有随机后缀，因此很难在静态配置中使用。

1. Kubernetes 资源级别对细粒度权限的支持有限。自定义 Kubernetes RBAC 角色需要进行其他配置。除了 Kubernetes 原生 RBAC 之外，还可以考虑使用 Kyverno 在 EKS 集群中进行高级权限管理。

## 选项 2：AWS IAM Users/Roles 映射到 Kubernetes 群组
<a name="_option_2_aws_iam_usersroles_mapped_to_kubernetes_groups"></a>

### 优点：
<a name="_pros"></a>

1. 对 IAM 权限的精细控制。

1. 可预测和静态角色 ARNs

### 缺点：
<a name="_cons"></a>

1. 增加了用户账户的管理开销

1. 缺乏集中式身份管理

1. IAM 实体有可能激增

### 最佳实践：
<a name="_best_practices_2"></a>

1. 使用 IAM 角色代替 IAM 用户以提高安全性和可管理性

1. 为角色实施命名惯例，以确保一致性和易管理性

1. 利用 IAM 策略条件根据标签或其他属性限制访问权限。

1. 定期轮换访问密钥并查看权限。

### 注意事项/限制：
<a name="_considerationslimitations_2"></a>

1. 管理大量用户或角色时出现可扩展性问题

1. 没有内置的单点登录功能

## 选项 3：OIDC 提供商
<a name="_option_3_oidc_providers"></a>

### 优点：
<a name="_pros_2"></a>

1. 与现有身份管理系统集成

1. 减少了用户帐户的管理开销

### 缺点：
<a name="_cons_2"></a>

1. 额外的配置复杂性

1. 身份验证期间的延迟可能会增加

1. 对外部身份提供商的依赖

### 最佳实践：
<a name="_best_practices_3"></a>

1. 仔细配置 OIDC 提供商，以确保安全令牌验证。

1. 使用短期令牌并实现令牌刷新机制。

1. 定期审核和更新 OIDC 配置。

查看本指南，了解[将外部单点登录提供商与 Amazon EKS 集成的](https://aws.amazon.com/solutions/guidance/integrating-external-single-sign-on-providers-with-amazon-eks/)参考实现方法 

### 注意事项/限制：
<a name="_considerationslimitations_3"></a>

1. 与 IAM 相比，与 AWS 服务的本地集成有限。

1. OIDC 提供商的发行者 URL 必须可公开访问，EKS 才能发现签名密钥。

## 适用于工作负载的 AWS EKS Pod 身份与 IRSA
<a name="_aws_eks_pod_identity_vs_irsa_for_workloads"></a>

Amazon EKS 提供了两种向在 Amazon EKS 集群中运行的工作负载授予 AWS IAM 权限的方法：服务账户的 IAM 角色 (IRSA) 和 EKS Pod 身份。

虽然 IRSA 和 EKS Pod 身份都具有最低权限访问、凭据隔离和可审计性的优点，但 EKS Pod Identity 是向工作负载授予权限的推荐方式。

有关 EKS pod 的身份和凭证的详细指南，请参阅安全最佳实践中的[身份和凭证部分](https://docs.aws.amazon.com/eks/latest/best-practices/identity-and-access-management.html#_identities_and_credentials_for_eks_pods)。

## 建议
<a name="_recommendation"></a>

### 将 IAM 身份中心与 CAM API 相结合
<a name="_combine_iam_identity_center_with_cam_api"></a>
+  **简化管理**：通过将集群访问管理 API 与 IAM Identity Center 配合使用，管理员可以管理 EKS 集群访问权限以及其他 AWS 服务，从而减少了在不同界面之间切换或 ConfigMaps 手动编辑的需求。
+ 使用访问条目管理集群外的 IAM 主体的 Kubernetes 权限。您可以使用 EKS API、AWS 命令行界面、AWS、AWS 和 AWS SDKs 管理控制台来添加和管理对集群的访问权限。 CloudFormation这意味着您可以使用与创建集群相同的工具来管理用户。
+ 可以通过访问条目和访问策略将 Kubernetes 用户或群组映射到与 SSO 身份关联的 IAM 委托人，从而应用精细的 Kubernetes 权限。
+ 首先，请按照[更改身份验证模式使用访问条目](https://docs.aws.amazon.com/eks/latest/userguide/setting-up-access-entries.html#access-entries-setup-console)，然后按照[迁移现有的 aws-auth ConfigMap 条目来访问条目](https://docs.aws.amazon.com/eks/latest/userguide/migrating-access-entries.html)。