

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EKS 節點 IAM 角色
<a name="create-node-role"></a>

Amazon EKS `kubelet` 節點協助程式會代表您呼叫 AWS APIs。節點透過 IAM 執行個體描述檔和關聯的政策，取得這些 API 呼叫的許可。啟動節點並在叢集中註冊之前，您必須先為那些節點建立啟動時要使用的 IAM 角色。這項要求會套用到運用 Amazon 提供的 Amazon EKS 最佳化 AMI，或是任何其他您打算使用的節點 AMI 來啟動的節點。此外，此要求皆適用於受管節點群組和自我管理節點。

**注意**  
您無法使用用於建立任何叢集的相同角色。

建立節點之前，您必須先建立具有以下許可的 IAM 角色：
+ `kubelet` 描述 VPC 中之 Amazon EC2 資源的許可，例如 [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html) 政策提供的許可。此政策也為 Amazon EKS Pod 身分識別代理程式提供許可。
+ `kubelet` 使用 Amazon Elastic Container Registry (Amazon ECR) 中之容器映像的許可，例如 [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html) 政策提供的許可。由於用於聯網的內建附加元件會執行使用 Amazon ECR 容器映像的 Pod，因此需要 Amazon Elastic Container Registry (Amazon ECR) 容器映像的使用許可。
+ (選用) Amazon EKS Pod 身分識別代理程式使用 `eks-auth:AssumeRoleForPodIdentity` 動作擷取 Pod 憑證的許可。如果您不使用 [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html)，則除了 EC2 許可之外，您還必須提供此許可才能使用 EKS Pod 身分識別。
+ (選用) 如果您不使用 IRSA 或 EKS Pod 身分識別向 VPC CNI Pod 授予許可，則必須透過執行個體角色為 VPC CNI 提供許可。您可以使用 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html) 受管政策 (如果您使用 `IPv4` 系列建立叢集) 或[您建立的 IPv6 政策](cni-iam-role.md#cni-iam-role-create-ipv6-policy) (如果您使用 `IPv6` 系列建立叢集)。但是，我們建議您將政策連接至專門用於 Amazon VPC CNI 附加元件的單獨角色，而不是將政策連接至此角色。如需為 Amazon VPC CNI 附加元件建立單獨角色的更多資訊，請參閱 [設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。

**注意**  
Amazon EC2 節點群組的 IAM 角色必須與 Fargate 設定檔不同。如需詳細資訊，請參閱[Amazon EKS Pod 執行 IAM 角色](pod-execution-role.md)。

## 檢查現有的節點角色
<a name="check-worker-node-role"></a>

您可使用以下程序，檢查您的帳戶是否已有 Amazon EKS 節點角色。

1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 搜尋 `eksNodeRole`、`AmazonEKSNodeRole` 或 `NodeInstanceRole` 的角色清單。如果具有這些名稱之一的角色不存在，請參閱 [建立 Amazon EKS 節點 IAM 角色](#create-worker-node-role) 以建立角色。如果包含 `eksNodeRole`、`AmazonEKSNodeRole` 或 `NodeInstanceRole` 的角色存在，請選取角色以檢視連接的政策。

1. 選擇**許可**。

1. 請確定 **AmazonEKSWorkerNodePolicy** 和 **AmazonEC2ContainerRegistryPullOnly** 受管政策已連接到該角色，或具有最低許可的自訂政策已連接至該角色。
**注意**  
如果 **AmazonEKS\$1CNI\$1Policy** 政策已連接至角色，我們建議將其移除，並轉而將其連接到映射至 `aws-node` Kubernetes 服務帳戶的 IAM 角色。如需詳細資訊，請參閱[設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。

1. 選擇 **Trust Relationships** (信任關係)，然後選擇 **Edit trust policy** (編輯信任政策)。

1. 確認信任關係包含下列政策。如果信任關係符合下列政策，請選擇 **Cancel** (取消)。如果信任關係不符合，請將政策複製到**編輯信任政策**視窗中，然後選擇**更新政策**。

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

## 建立 Amazon EKS 節點 IAM 角色
<a name="create-worker-node-role"></a>

您可以使用 AWS 管理主控台 或 CLI 建立節點 IAM AWS 角色。

 AWS 管理主控台   

1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 在 **Roles** (角色) 頁面上，選擇 **Create role** (建立角色)。

1. 在 **Select trusted entity** (選取信任的實體) 頁面上，執行以下作業：

   1. 在**信任的實體類型**區段中，選擇** AWS 服務**。

   1. 在 **Use case** (使用案例) 下，選擇 **EC2**。

   1. 選擇**下一步**。

1. 在**新增許可**頁面上，連接自訂政策或執行下列動作：

   1. 在 **Filter policies** (篩選政策) 方塊中，輸入 `AmazonEKSWorkerNodePolicy`。

   1. 勾選搜尋結果中 **AmazonEKSWorkerNodePolicy** 左側的核取方塊。

   1. 選擇 **Clear filters** (清除篩選條件)。

   1. 在 **Filter policies** (篩選政策) 方塊中，輸入 `AmazonEC2ContainerRegistryPullOnly`。

   1. 勾選搜尋結果中 **AmazonEC2ContainerRegistryPullOnly** 左側的核取方塊。

      **AmazonEKS\$1CNI\$1Policy** 受管政策或您建立的 [IPv6 政策](cni-iam-role.md#cni-iam-role-create-ipv6-policy)也必須連接至此角色或映射至 `aws-node` Kubernetes 服務帳戶的其他角色。建議您將政策指派給與 Kubernetes 服務帳戶相關聯的角色，而不要將政策指派給這個角色。如需詳細資訊，請參閱[設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。

   1. 選擇**下一步**。

1. 在 **Name, review, and create** (命名、檢閱和建立) 頁面上，執行以下作業：

   1. 針對 **Role name** (角色名稱)，為您的角色輸入唯一名稱 (例如 `AmazonEKSNodeRole`)。

   1. 針對 **Description** (描述)，請以描述性文字 (例如 `Amazon EKS - Node role`) 取代目前的文字。

   1. 藉由連接標籤做為鍵值對，在**新增標籤 (選用)** 下將中繼資料新增至角色。如需有關在 IAM 中使用標籤的詳細資訊，請參閱《IAM 使用者指南》**中的[標記 IAM 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)。

   1. 選擇建**立角色**。

 AWS CLI  

1. 執行下列命令以建立 `node-role-trust-relationship.json` 檔案。

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

1. 建立 IAM 角色。

   ```
   aws iam create-role \
     --role-name AmazonEKSNodeRole \
     --assume-role-policy-document file://"node-role-trust-relationship.json"
   ```

1. 將兩個所需的受管 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/AmazonEC2ContainerRegistryPullOnly \
     --role-name AmazonEKSNodeRole
   ```

1. 根據您建立叢集所使用的 IP 系列，將以下 IAM 政策之一連接至 IAM 角色。政策必須連接到此角色或與 Kubernetes `aws-node` 服務帳戶相關聯的角色，且該帳戶可用於 Kubernetes 專用 Amazon VPC CNI 外掛程式。建議您將政策指派給與 Kubernetes 服務帳戶相關聯的角色。要將政策指派給與 Kubernetes 服務帳戶相關聯的角色，請參閱 [設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。
   + 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/*"
                    ]
                }
            ]
        }
        ```

     1. 建立 IAM 政策。

        ```
        aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
        ```

     1. 將 IAM 政策連接至 IAM 角色。使用您的帳戶 ID 取代 *111122223333*。

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