

 **帮助改进此页面** 

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

# Amazon EKS 自动模式集群 IAM 角色
<a name="auto-cluster-iam-role"></a>

每个集群都需要一个 Amazon EKS 集群 IAM 角色。由 Amazon EKS 管理的 Kubernetes 集群使用此角色来自动执行存储、联网和计算自动扩缩等方面的例行任务。

在创建 Amazon EKS 集群之前，必须首先使用 EKS 自动模式必需的策略创建一个 IAM 角色。您可以附加建议的 Amazon IAM 托管式策略，也可以创建具有等效权限的自定义策略。
+  [AmazonEKSComputePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSComputePolicy) 
+  [AmazonEKSBlockStoragePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSBlockStoragePolicy) 
+  [AmazonEKSLoadBalancingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSLoadBalancingPolicy) 
+  [AmazonEKSNetworkingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSNetworkingPolicy) 
+  [AmazonEKSClusterPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-amazoneksclusterpolicy) 

## EKS 自动模式资源的自定义 Amazon 标签
<a name="tag-prop"></a>

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

### 查看自定义标签策略示例
<a name="auto-tag-policy"></a>

```
{
    "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}"
                }
            }
        }
    ]
}
```

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

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

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

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

1. 在角色列表中搜索 `AmazonEKSAutoClusterRole`。如果不存在包含 `AmazonEKSAutoClusterRole` 的角色，请参阅下一部分的说明以创建该角色。如果包含 `AmazonEKSAutoClusterRole` 的角色确实存在，则选择角色以查看附加的策略。

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",
           "sts:TagSession"
         ]
       }
     ]
   }
   ```

**注意**  
 Amazon 不要求此角色使用名称 `AmazonEKSAutoClusterRole`。

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

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

### Amazon Web Services 管理控制台
<a name="auto-cluster-iam-role-console"></a>

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

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

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

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

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

1. 在**添加权限**选项卡上，选择相关策略，然后选择**下一步**。
   +  [AmazonEKSComputePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSComputePolicy) 
   +  [AmazonEKSBlockStoragePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSBlockStoragePolicy) 
   +  [AmazonEKSLoadBalancingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSLoadBalancingPolicy) 
   +  [AmazonEKSNetworkingPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEKSNetworkingPolicy) 
   +  [AmazonEKSClusterPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-amazoneksclusterpolicy) 

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

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

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

### Amazon CLI
<a name="auto-cluster-iam-role-cli"></a>

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

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

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

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

1. 将所需的 IAM 策略附加到角色：

 **AmazonEKSClusterPolicy**：

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

 **AmazonEKSComputePolicy**：

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws-cn:iam::aws:policy/AmazonEKSComputePolicy
```

 **AmazonEKSBlockStoragePolicy**：

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws-cn:iam::aws:policy/AmazonEKSBlockStoragePolicy
```

 **AmazonEKSLoadBalancingPolicy**：

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws-cn:iam::aws:policy/AmazonEKSLoadBalancingPolicy
```

 **AmazonEKSNetworkingPolicy**：

```
aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws-cn:iam::aws:policy/AmazonEKSNetworkingPolicy
```