Amazon EKS 基于身份的策略示例 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Amazon EKS 基于身份的策略示例

默认情况下,IAM 用户和角色没有创建或修改 Amazon EKS 资源的权限。它们还无法使用 AWS 管理控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,为用户和角色授予权限,以便对他们所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅 中的在 JSON 选项卡上创建策略。IAM 用户指南

当您创建 Amazon EKS 集群时,将在控制层面内集群的 RBAC 配置中自动为 IAM 实体用户或角色(例如,创建集群的联合身份用户)授予 system:masters 权限。此 IAM 实体不会出现在 ConfigMap 或任何其他可见配置中,因此请确保保持跟踪哪个 IAM 实体最初创建了集群。要授予其他 AWS 用户或角色与您的集群进行交互的能力,您必须编辑 Kubernetes 内的 aws-auth ConfigMap。

有关使用 ConfigMap 的更多信息,请参阅管理集群的用户或 IAM 角色

策略最佳实践

基于身份的策略非常强大。它们确定某个人是否可以创建、访问或删除您账户中的 Amazon EKS 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下准则和建议:

  • 开始使用 AWS 托管策略 – 要快速开始使用 Amazon EKS,请使用 AWS 托管策略,为您的员工授予他们所需的权限。这些策略已在您的账户中提供,并由 AWS 维护和更新。有关更多信息,请参阅 IAM 用户指南 中的利用 AWS 托管策略开始使用权限

  • 授予最低权限 – 创建自定义策略时,仅授予执行任务所需的许可。最开始只授予最低权限,然后根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。有关更多信息,请参阅 IAM 用户指南 中的授予最小权限

  • 为敏感操作启用 MFA – 为增强安全性,要求 IAM 用户使用多重身份验证 (MFA) 来访问敏感资源或 API 操作。有关更多信息,请参阅 IAM 用户指南 中的在 AWS 中使用多重身份验证 (MFA)

  • 使用策略条件来增强安全性 – 在切实可行的范围内,定义基于身份的策略在哪些情况下允许访问资源。例如,您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件,以便仅允许指定日期或时间范围内的请求,或者要求使用 SSL 或 MFA。有关更多信息,请参阅 IAM 用户指南 中的 IAM JSON 策略元素:Condition

使用 Amazon EKS 控制台

要访问 Amazon EKS 控制台,您必须拥有一组最低的权限。这些权限必须允许您列出和查看有关您的 AWS 账户中的 Amazon EKS 资源的详细信息。如果创建比必需的最低权限更为严格的基于身份的策略,对于附加了该策略的实体(IAM 用户或角色),控制台将无法按预期正常运行。

重要

如果您在控制台中看到 Error loading Namespaces 错误,或者未在 OverviewWorkloads 选项卡上看到任何内容,请参阅看不到工作负载或节点并在 AWS 管理控制台 中收到错误以解决该问题。如果您未解决问题,则仍可在 Amazon EKSConfiguration (配置) 选项卡上查看和管理 集群的各个方面。

要确保这些实体仍然可以使用 Amazon EKS 控制台,请创建具有您自己的唯一名称的策略,例如 AmazonEKSAdminPolicy。 将策略附加到实体。有关更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console 中的向用户添加权限IAM 用户指南。

重要

以下示例策略将允许您在 控制台的 Configuration 选项卡上查看信息。要查看 中有关节点工作负载AWS 管理控制台的信息,您需要额外的 IAM 权限以及 Kubernetes 权限。有关更多信息,请参阅 查看 AWS 管理控制台 中所有集群的节点和工作负载 示例策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "eks.amazonaws.com" } } } ] }

对于只需要调用 AWS CLI 或 AWS API 的用户,您无需为其提供最低控制台权限。相反,只允许访问与您尝试执行的 API 操作相匹配的操作。

查看 AWS 管理控制台 中所有集群的节点和工作负载

此示例演示如何创建一个策略,该策略允许用户对所有集群执行 查看节点查看工作负载 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeNodegroup", "eks:ListNodegroups", "eks:DescribeCluster", "eks:ListClusters", "eks:AccessKubernetesApi", "ssm:GetParameter", "eks:ListUpdates", "eks:ListFargateProfiles" ], "Resource": "*" } ] }
重要

该策略必须附加到映射到 aws-auth 配置映射中的 Kubernetes 用户或组的用户或角色。用户或组必须是绑定到 Kubernetes subjectrolebinding(具有查看 Kubernetes 资源所需的权限)的 clusterrolebinding 中的 roleclusterrole有关向 IAM 配置映射添加 aws-auth 用户或角色的更多信息,请参阅管理集群的用户或 IAM 角色。要创建角色和角色绑定,请参阅 Kubernetes 文档中的使用 RBAC 授权。您可以下载以下创建 clusterroleclusterrolebindingrolerolebinding 的示例清单:

  • 查看所有命名空间中的 Kubernetes 资源 – 文件中的组名称是 eks-console-dashboard-full-access-group,这是 IAM 用户或角色需要在 aws-auth configmap 中映射到的组。如果需要,您可以在将组的名称应用到集群之前更改组的名称,然后在 configmap 中将 IAM 用户或角色映射到该组。要下载文件,请为您的集群所在的区域选择适当的链接。

  • 查看特定命名空间中的 Kubernetes 资源 – 此文件中的命名空间是 default,因此,如果您想指定其他命名空间,请在将文件应用到集群之前对其进行编辑。文件中的组名称是 eks-console-dashboard-restricted-access-group,这是 IAM 用户或角色需要在 aws-auth configmap 中映射到的组。如果需要,您可以在将组的名称应用到集群之前更改组的名称,然后在 configmap 中将 IAM 用户或角色映射到该组。要下载文件,请为您的集群所在的区域选择适当的链接。

允许用户查看他们自己的权限

此示例显示您可以如何创建策略,以便允许 IAM 用户查看附加到其用户身份的内联和托管策略。此策略包括在控制台上完成此操作或者以编程方式使用 AWS CLI 或 AWS API 所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws-cn:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

更新 Kubernetes 集群

此示例显示如何创建一个策略,该策略允许用户在任何区域为一个账号更新任何 dev 集群的 Kubernetes 版本。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "eks:UpdateClusterVersion", "Resource": "arn:aws:eks:*:<111122223333>:cluster/<dev>" } ] }

列出或描述所有集群

此示例显示如何创建一个策略,该策略允许用户拥有只读访问权限以列出或描述所有集群。账户必须能够列出和描述集群才能使用 update-kubeconfig AWS CLI 命令。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListClusters" ], "Resource": "*" } ] }