Amazon EKS 基于身份的策略示例 - Amazon EKS

Amazon EKS 基于身份的策略示例

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

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

当您创建 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 策略元素:条件

使用 Amazon EKS 控制台

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

重要

如果您在控制台中看到“加载命名空间时出错”的错误,或在 Overview(概览)Workloads(工作负载)选项卡上看不到任何内容,请参阅 无法查看工作负载或节点,并在 AWS Management Console 中收到错误 解决问题。如果您不解决此问题,您仍然可以在 Configuration(配置)选项卡上查看及管理 Amazon EKS 集群的各个方面。

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

重要

以下示例策略将允许您查看控制台中 Configuration(配置)选项卡上的信息。要在 AWS Management Console 中查看 Nodes(节点)Workloads(工作负载)上的信息,您需要额外的 IAM 权限以及 Kubernetes 权限。有关更多信息,请参阅此 在 AWS 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" } } } ] }

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

在 AWS Management Console 中查看所有集群的节点和工作负载

此示例展示您可以如何创建一个允许用户对所有集群进行 查看节点查看工作负载 的策略。

{ "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 configmap 中的 Kubernetes 用户或组的用户或角色。该用户或组必须是绑定到具有必要权限以查看 Kubernetes 资源的 Kubernetes roleclusterrolerolebindingclusterrolebinding 中的 subject。有关将 IAM 用户或角色添加到 aws-auth configmap 中的更多信息,请参阅 管理集群的用户或 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: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": "*" } ] }