Amazon EKS 节点 IAM 角色 - Amazon EKS

Amazon EKS 节点 IAM 角色

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

注意

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

检查现有节点角色

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

在 IAM 控制台中检查 eksNodeRole

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

  4. 请选择权限

  5. 确保将 AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly 托管策略附加到此角色。如果已经附加策略,则您的 Amazon EKS 节点已经正确配置。

    注意

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

  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. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. 角色页中,选择创建角色

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

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

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

    3. 选择 Next (下一步)

  5. Add permissions(添加权限)页面上,请执行以下操作:

    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 角色用于服务账户

    6. 选择 Next (下一步)

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

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

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

    3. Add tags (Optional)(添加标签(可选))下,通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 IAM 用户指南中的标记 IAM 实体

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

AWS CLI
  1. 将以下内容保存到名为 node-role-trust-relationship.json 的文件。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  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 角色用于服务账户

    • 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