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

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

Amazon EKS 基于身份的策略示例

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

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

当您创建 Amazon EKS 集群时,IAM 实体用户或角色(如联合身份用户创建集群时,会自动授予system:masters权限中集群的 RBAC 配置中的控制平面。此 IAM 实体不会显示在 ConfigMap 或任何其他可见配置中,因此请确保跟踪最初创建了集群的 IAM 实体。授予额外的Amazon用户或角色与您的集群进行交互的能力,您必须编辑aws-auth库贝内特斯内的 ConfigMap。

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

策略最佳实践

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

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

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

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

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

使用亚马逊 EKS 控制台

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

重要

如果您看到加载名称空间时出错错误,或者在概述或者工作负载选项卡,请参阅无法看到工作负载或节点,并在Amazon Web Services Management Console解决问题。如果您不解决此问题,您仍然可以在配置选项卡。

为确保这些实体仍可以使用 Amazon EKS 控制台,请使用您自己的唯一名称创建一个策略,如AmazonEKSAdminPolicy。将策略附加到实体。有关更多信息,请参阅 。向用户添加权限中的IAM 用户指南

重要

以下示例策略将允许您查看配置选项卡中。查看有关节点工作负载中的Amazon Web Services Management Console,您需要额外的 IAM 权限以及库贝内特人权限。有关更多信息,请参阅 。查看Amazon Web Services Management Console示例策略。

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

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

查看Amazon Web Services Management Console

此示例说明了如何创建允许用户View 节点查看工作负载对于所有集群。

{ "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": "*" } ] }
重要

该策略必须附加到映射到 Kubernetes 用户或组的用户或角色aws-authConfigMap。用户或组必须是subjectrolebinding或者clusterrolebinding这是绑定到一个库贝内特人role或者clusterrole具有查看 Kubernetes 资源的必要权限。有关将 IAM 用户或角色添加到aws-auth配置映射,请参阅管理集群的用户或 IAM 角色。要创建角色和角色绑定,请参阅使用 RBAC 授权在 Kubernetes 文档中。您可以下载以下示例清单,这些清单创建clusterroleclusterrolebindingrolerolebinding

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

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

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

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws: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-cn:eks:*:<111122223333>:cluster/<dev>" } ] }

列出或描述所有集群

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

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