

 **帮助改进此页面** 

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

# Amazon EKS 集群 IAM 角色
<a name="cluster-iam-role"></a>

每个集群都需要一个 Amazon EKS 集群 IAM 角色。由 Amazon EKS 管理的 Kubernetes 集群会使用此角色来管理节点，而[旧版云提供商](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/#legacy-cloud-provider)会使用此角色为服务创建带有 Elastic Load Balancing 的负载均衡器。

必须先使用以下任一 IAM policy 创建 IAM 角色，然后才能创建 Amazon EKS 集群：
+  [AmazonEKSClusterPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSClusterPolicy.html) 
+ 自定义 IAM policy。随后的最低权限允许 Kubernetes 集群管理节点，但不允许[旧版云提供商](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/#legacy-cloud-provider)创建带有 Elastic Load Balancing 的负载均衡器。您的自定义 IAM policy必须至少具有以下权限：

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "ec2:CreateTags"
        ],
        "Resource": "arn:aws:ec2:*:*:instance/*",
        "Condition": {
          "ForAnyValue:StringLike": {
            "aws:TagKeys": "kubernetes.io/cluster/*"
          }
        }
      },
      {
        "Effect": "Allow",
        "Action": [
          "ec2:DescribeInstances",
          "ec2:DescribeNetworkInterfaces",
          "ec2:DescribeVpcs",
          "ec2:DescribeDhcpOptions",
          "ec2:DescribeAvailabilityZones",
          "ec2:DescribeInstanceTopology",
          "kms:DescribeKey"
        ],
        "Resource": "*"
      }
    ]
  }
  ```

**注意**  
在 2023 年 10 月 3 日之前，每个集群的 IAM 角色都必须有 [AmazonEKSClusterPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSClusterPolicy.html)。  
在 2020 年 4 月 16 日之前，[AmazonEKSServicePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSServicePolicy.html) 和 [AmazonEKSClusterPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSClusterPolicy.html) 是必需的，建议的角色名称是 `eksServiceRole`。有了 `AWSServiceRoleForAmazonEKS` 服务相关角色后，在 2020 年 4 月 16 日或之后创建的集群将不再需要 [AmazonEKSServicePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSServicePolicy.html) 策略。

## 检查现有集群角色
<a name="check-service-role"></a>

可使用以下程序检查并确定您的账户是否已有 Amazon EKS 集群角色。

1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

1. 在左侧导航窗格中，选择 **角色**。

1. 在角色列表中搜索 `eksClusterRole`。如果不存在包含 `eksClusterRole` 的角色，请参阅 [创建 Amazon EKS 集群角色](#create-service-role) 来创建角色。如果包含 `eksClusterRole` 的角色确实存在，则选择角色以查看附加的策略。

1. 选择**权限**。

1. 确保将 **AmazonEKSClusterPolicy** 托管策略附加到此角色。如果附加该策略，则将正确配置 Amazon EKS 集群角色。

1. 选择 **Trust relationships**（信任关系），然后选择 **Edit trust policy**（编辑信任策略）。

1. 验证信任关系是否包含以下策略。如果信任关系符合以下策略，请选择 **Cancel**（取消）。如果信任关系不匹配，请将策略复制到**编辑信任策略**窗口并选择**更新策略**。

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

## 创建 Amazon EKS 集群角色
<a name="create-service-role"></a>

要创建集群角色，您可以使用 AWS 管理控制台 或 AWS CLI。

 AWS 管理控制台   

1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

1. 选择 **Roles**，然后选择 **Create role**。

1. 在**受信任的实体类型**下，选择 **AWS 服务**。

1. 从**其它 AWS 服务的使用案例**下拉列表中，选择 **EKS**。

1. 为您的使用案例选择 **EKS - Cluster**（EKS - 集群），然后选择 **Next**（下一步）。

1. 在 **Add permissions**（添加权限）选项卡上，选择 **Next**（下一步）。

1. 对于 **Role name**（角色名称），请为角色输入唯一名称，例如 `eksClusterRole`。

1. 对于 **Description**（说明），请输入描述性文本，例如 `Amazon EKS - Cluster role`。

1. 选择**创建角色**。

 AWS CLI  

1. 将以下内容复制到名为 *cluster-trust-policy.json* 的文件中。

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

1. 创建角色。您可以将 *eksClusterRole* 替换为您选择的任何名称。

   ```
   aws iam create-role \
     --role-name eksClusterRole \
     --assume-role-policy-document file://"cluster-trust-policy.json"
   ```

1. 将所需的 IAM policy 附加到角色。

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \
     --role-name eksClusterRole
   ```