了解 EKS 自动模式中的身份和访问权限 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

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

了解 EKS 自动模式中的身份和访问权限

本主题介绍使用 EKS 自动模式所需的 Identity and Access Management(IAM)角色和权限。EKS 自动模式使用两个主要 IAM 角色:一个集群 IAM 角色和一个节点 IAM 角色。这两个角色与 EKS 容器组身份和 EKS 访问条目配合使用,从而为 EKS 集群提供全面的访问管理。

配置 EKS 自动模式时,您需要设置这两个 IAM 角色,为其授予允许 Amazon 服务与集群资源交互所需的特定权限,包括管理计算资源、存储卷、负载均衡器和网络组件的权限。了解这些角色配置对于确保集群的正常运行和安全至关重要。

在 EKS 自动模式下,Amazon IAM 角色会自动通过 EKS 访问条目映射到 Kubernetes 权限,无需手动配置 aws-auth ConfigMaps 或自定义绑定。创建新的自动模式集群时,EKS 会使用访问条目自动创建相应的 Kubernetes 权限,从而确保 Amazon 服务和集群组件在 Amazon 和 Kubernetes 授权系统中都具有适当的访问权限级别。这种自动集成可减少配置的复杂性,有助于防止在管理 EKS 集群时常见的权限相关问题。

集群 IAM 角色

集群 IAM 角色是 Amazon EKS 用来管理 Kubernetes 集群权限的 Amazon Identity and Access Management(IAM)角色。此角色向 Amazon EKS 授予代表集群与其他 Amazon 服务进行交互的必要权限,并且使用 EKS 访问条目自动配置了 Kubernetes 权限。

  • 您必须将 Amazon IAM 策略附加到此角色。

  • EKS 自动模式使用 EKS 访问条目自动为此角色附加 Kubernetes 权限。

  • 使用 EKS 自动模式时,Amazon 建议为每个 Amazon 账户创建一个集群 IAM 角色。

  • Amazon 建议将此角色命名为 AmazonEKSAutoClusterRole

  • 此角色需要具有允许多个 Amazon 服务管理资源的权限,包括 EBS 卷、弹性负载均衡器和 EC2 实例等。

  • 此角色的建议配置包括与 EKS 自动模式的不同功能相关的多个 Amazon 托管式 IAM 策略。

    • AmazonEKSComputePolicy

    • AmazonEKSBlockStoragePolicy

    • AmazonEKSLoadBalancingPolicy

    • AmazonEKSNetworkingPolicy

    • AmazonEKSClusterPolicy

有关集群 IAM 角色和 Amazon 托管式 IAM 策略的更多信息,请参阅:

有关 Kubernetes 访问权限的更多信息,请参阅:

节点 IAM 角色

节点 IAM 角色是 Amazon EKS 用来管理 Kubernetes 集群中 Worker 节点权限的 Amazon Identity and Access Management(IAM)角色。此角色向作为 Kubernetes 节点运行的 EC2 实例授予与 Amazon 服务和资源进行交互所需的必要权限,并使用 EKS 访问条目自动配置 Kubernetes RBAC 权限。

  • 您必须将 Amazon IAM 策略附加到此角色。

  • EKS 自动模式使用 EKS 访问条目自动为此角色附加 Kubernetes RBAC 权限。

  • Amazon 建议将此角色命名为 AmazonEKSAutoNodeRole

  • 使用 EKS 自动模式时,Amazon 建议为每个 Amazon 账户创建一个节点 IAM 角色。

  • 此角色具有的权限较为有限。主要权限包括代入容器组身份角色以及从 ECR 中拉取映像的权限。

  • Amazon 建议使用以下 Amazon 托管式 IAM 策略:

    • AmazonEKSWorkerNodeMinimalPolicy

    • AmazonEC2ContainerRegistryPullOnly

有关集群 IAM 角色和 Amazon 托管式 IAM 策略的更多信息,请参阅:

有关 Kubernetes 访问权限的更多信息,请参阅:

服务相关角色

Amazon EKS 会使用一个服务相关角色(SLR)来执行某些操作。服务相关角色是一种独特类型的 IAM 角色,它与 Amazon EKS 直接相关。服务相关角色是由 Amazon EKS 预定义的,并包含服务代表您调用其它 Amazon 服务所需的所有权限。

Amazon 会自动创建和配置此 SLR。只有首先删除 SLR 的相关资源后才能将其删除。这将保护您的 Amazon EKS 资源,因为您不会无意中删除对资源的访问权限。

SLR 策略会向 Amazon EKS 授予观察和删除核心基础设施组件的权限:EC2 资源(实例、网络接口、安全组)、ELB 资源(负载均衡器、目标组)、CloudWatch 功能(日志记录和指标)以及带有“eks”前缀的 IAM 角色。此策略还支持通过 VPC/托管区关联来实现私有端点联网,并且包括 EventBridge 监控和清理带有 EKS 标签的资源的权限。

有关更多信息,请参阅:

EKS 自动模式资源的自定义 Amazon 标签

默认情况下,与 EKS 自动模式相关的托管式策略不允许将用户定义的标签应用于自动模式预置的 Amazon 资源。如果要将用户定义的标签应用于 Amazon 资源,则必须为集群 IAM 角色附加额外的权限,以提供在 Amazon 资源上创建和修改标签的充分权限。以下示例策略将允许不受限制的标记访问权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Compute", "Effect": "Allow", "Action": [ "ec2:CreateFleet", "ec2:RunInstances", "ec2:CreateLaunchTemplate" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}" }, "StringLike": { "aws:RequestTag/eks:kubernetes-node-class-name": "*", "aws:RequestTag/eks:kubernetes-node-pool-name": "*" } } }, { "Sid": "Storage", "Effect": "Allow", "Action": [ "ec2:CreateVolume", "ec2:CreateSnapshot" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:snapshot/*" ], "Condition": { "StringEquals": { "aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}" } } }, { "Sid": "Networking", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}" }, "StringLike": { "aws:RequestTag/eks:kubernetes-cni-node-name": "*" } } }, { "Sid": "LoadBalancer", "Effect": "Allow", "Action": [ "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:CreateTargetGroup", "elasticloadbalancing:CreateListener", "elasticloadbalancing:CreateRule", "ec2:CreateSecurityGroup" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}" } } }, { "Sid": "ShieldProtection", "Effect": "Allow", "Action": [ "shield:CreateProtection" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}" } } }, { "Sid": "ShieldTagResource", "Effect": "Allow", "Action": [ "shield:TagResource" ], "Resource": "arn:aws:shield::*:protection/*", "Condition": { "StringEquals": { "aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}" } } } ] }

访问策略参考

要详细了解 EKS 自动模式使用的 Kubernetes 权限,请参阅检查访问策略权限