Amazon EKS 节点 IAM 角色 - Amazon EKS

Amazon EKS 节点 IAM 角色

Amazon EKS 节点 kubelet 守护进程代表您调用 AWS API。节点通过 IAM 实例配置文件和关联的策略获得这些 API 调用的权限。您必须先为节点创建 IAM 角色以在启动它们时使用,然后才能启动这些节点并在集群中注册它们。此要求适用于通过由 Amazon 提供的 Amazon EKS 优化版 AMI 启动的节点,也适用于您打算使用的任何其他节点 AMI。此外,此要求适用于托管节点组和自行管理的节点。

注意

您不能使用创建任何集群时使用的相同角色。

必须先使用以下权限创建 IAM 角色,然后才能创建节点:

  • kubelet 描述 VPC 中 Amazon EC2 资源的权限,例如 AmazonEKSWorkerNodePolicy 策略提供的权限。该策略还为 Amazon EKS 容器组身份代理提供权限。

  • kubelet 使用来自 Amazon Elastic Container Registry(Amazon ECR)的容器映像的权限,例如 AmazonEC2ContainerRegistryReadOnly 策略提供的权限。使用来自 Amazon Elastic Container Registry(Amazon ECR)的容器映像的权限是必要条件,因为用于联网的内置附加组件运行的 Pod 使用来自 Amazon ECR 的容器映像。

  • (可选)Amazon EKS 容器组身份代理使用 eks-auth:AssumeRoleForPodIdentity 操作检索容器组凭证的权限。如果您不使用 AmazonEKSWorkerNodePolicy,那么除了使用 EKS 容器组身份的 EC2 权限外,您还必须提供此权限。

  • (可选)如果您不使用 IRSA 或 EKS 容器组身份向 VPC CNI 容器组授予权限,则必须为实例角色的 VPC CNI 提供权限。您可以使用 AmazonEKS_CNI_Policy 托管策略(如果使用 IPv4 系列创建集群)或您创建的 IPv6 策略(如果使用 IPv6 系列创建集群)。但是,我们建议您将策略附加到专门用于 Amazon VPC CNI 附加组件的单独角色,而不是附加到此角色。有关为 Amazon VPC CNI 附加组件创建单独角色的详细信息,请参阅 配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户(IRSA)

注意

在 2023 年 10 月 3 日之前,每个托管节点组的 IAM 角色上需要有 AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly

Amazon EC2 节点组必须具有与 Fargate 配置文件不同的 IAM 角色。有关更多信息,请参阅Amazon EKS Pod 执行 IAM 角色

检查现有节点角色

可以使用以下过程检查并查看您的账户是否已有 Amazon EKS 节点角色。

在 IAM 控制台中检查 eksNodeRole
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Roles(角色)

  3. 在角色列表中搜索 eksNodeRoleAmazonEKSNodeRoleNodeInstanceRole。如果其中一个名称的角色不存在,请参阅 创建 Amazon EKS 节点 IAM 角色 以创建该角色。如果包含 eksNodeRoleAmazonEKSNodeRoleNodeInstanceRole 的角色确实存在,请选择该角色以查看附加的策略。

  4. 选择权限

  5. 确保将 AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly 托管策略附加到此角色,或者使用最低权限附加自定义策略。

    注意

    如果 AmazonEKS_CNI_Policy 策略已附加到角色,我们建议删除此策略并改为将其附加到映射到 aws-node Kubernetes 服务账户的 IAM 角色。有关更多信息,请参阅配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户(IRSA)

  6. 选择 Trust relationships(信任关系),然后选择 Edit trust policy(编辑信任策略)。

  7. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel(取消)。如果信任关系不匹配,请将策略复制到 Edit trust policy(编辑信任策略)窗口并选择 Update policy(更新策略)。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

创建 Amazon EKS 节点 IAM 角色

您可以使用 AWS Management Console 或 AWS CLI 创建节点 IAM 角色。

AWS Management Console
在 IAM 控制台中创建您的Amazon EKS 节点角色
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Roles(角色)。

  3. Roles(角色)页面上,选择 Create role(创建角色)。

  4. Select trusted entity(选择受信任的实体)页面上,请执行以下操作:

    1. Trusted entity type(受信任的实体类型)部分中,选择 AWS service(服务)。

    2. Use case(使用案例)下,选择 EC2

    3. 选择下一步

  5. 添加权限页面上,附加自定义策略或执行以下操作:

    1. Filter policies (筛选器策略) 框中,输入 AmazonEKSWorkerNodePolicy

    2. 选中搜索结果中的 AmazonEKSWorkerNodePolicy 左侧的复选框。

    3. 请选择 Clear filters(清除筛选条件)。

    4. Filter policies (筛选器策略) 框中,输入 AmazonEC2ContainerRegistryReadOnly

    5. 选中搜索结果中的 AmazonEC2ContainerRegistryReadOnly 左侧的复选框。

      AmazonEKS_CNI_Policy 托管策略或您创建的 IPv6 策略还必须附加到此角色或映射到 aws-node Kubernetes 服务账户的其他角色。我们建议将策略分配到与 Kubernetes 服务账户关联的角色,而不是将其分配到此角色。有关更多信息,请参阅配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户(IRSA)

    6. 选择下一步

  6. Name, review, and create(命名、查看和创建)页面中,请执行以下操作:

    1. 对于 Role name(角色名称),请为角色输入唯一名称,例如 AmazonEKSNodeRole

    2. 对于 Description(说明),请将当前文本替换为描述性文本,例如 Amazon EKS - Node role

    3. 添加标签(可选)下,将标签作为键值对附加,以将元数据添加到角色。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源

    4. 选择 Create role(创建角色)。

AWS CLI
  1. 运行以下命令以创建 node-role-trust-relationship.json 文件。

    cat >node-role-trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
  2. 创建 IAM 角色。

    aws iam create-role \ --role-name AmazonEKSNodeRole \ --assume-role-policy-document file://"node-role-trust-relationship.json"
  3. 将两个所需的 IAM 托管策略附加到 IAM 角色。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name AmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name AmazonEKSNodeRole
  4. 根据创建集群时使用的 IP 系列,将以下 IAM policy 之一附加到 IAM 角色。该策略必须附加到此角色或与用于 Amazon VPC CNI plugin for Kubernetes 的 Kubernetes aws-node 服务账户关联的角色。我们建议将策略分配到与 Kubernetes 服务账户关联的角色。要将策略分配到与 Kubernetes 服务账户关联的角色,请参阅 配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户(IRSA)

    • IPv4

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSNodeRole
    • IPv6

      1. 复制以下文本并将其保存到名为 vpc-cni-ipv6-policy.json 的文件。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] }
      2. 创建 IAM policy。

        aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
      3. 将 IAM policy 附加到 IAM 角色。请将 111122223333 替换为您的账户 ID。

        aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSNodeRole