

 **協助改進此頁面** 

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

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

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

# Amazon EKS 功能 IAM 角色
<a name="capability-role"></a>

EKS 功能需要設定功能 IAM 角色 （或功能角色）。功能會使用此角色在 AWS 服務上執行動作，並透過自動建立的存取項目存取叢集中的 Kubernetes 資源。

在建立功能期間指定功能角色之前，您必須使用適當的信任政策和功能類型的許可來建立 IAM 角色。建立此 IAM 角色後，它可以重複使用於任意數量的功能資源。

## 功能角色需求
<a name="_capability_role_requirements"></a>

功能角色必須符合下列要求：
+ 角色必須與叢集和功能資源位於相同的 AWS 帳戶中
+ 該角色必須具有信任政策，允許 EKS 功能服務擔任該角色
+ 角色必須具有適合 功能類型和使用案例需求的許可 （請參閱 [依功能類型列出的許可](#capability-permissions))

## 功能角色的信任政策
<a name="capability-trust-policy"></a>

所有功能角色都必須包含下列信任政策：

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

此信任政策允許 EKS：
+ 擔任角色以執行 AWS API 操作
+ 標記工作階段以進行稽核和追蹤

## 依功能類型列出的許可
<a name="capability-permissions"></a>

所需的 IAM 許可取決於您使用的功能和部署模型。

**注意**  
對於搭配 ACK 使用 IAM 角色選取器的生產部署，或在不使用 AWS 服務整合的情況下使用 kro 或 Argo CD 時，功能角色可能不需要信任政策以外的任何 IAM 許可。

 **kro (Kube Resource Orchestrator)**   
不需要 IAM 許可。您可以建立沒有連接政策的功能角色。 kro 只需要 Kubernetes RBAC 許可來建立和管理 Kubernetes 資源。

 ** AWS Kubernetes (ACK) 的控制器**   
ACK 支援兩種許可模型：  
+  **簡單設定 （開發/測試）**：將 AWS 服務許可直接新增至功能角色。這適用於入門、單一帳戶部署，或當所有使用者都需要相同的許可時。
+  **生產最佳實務**：使用 IAM 角色選取器實作最低權限存取。透過此方法，能力角色只需要擔任服務特定角色的`sts:AssumeRole`許可。您不會將 AWS 服務許可 （例如 S3 或 RDS) 新增至功能角色本身，這些許可會授予對應至特定命名空間的個別 IAM 角色。

  IAM 角色選取器啟用：
  + 命名空間層級許可隔離
  + 跨帳戶資源管理
  + 團隊特定的 IAM 角色
  + 最低權限安全模型

    IAM 角色選取器方法的功能角色政策範例：

    ```
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Resource": [
            "arn:aws:iam::111122223333:role/ACK-S3-Role",
            "arn:aws:iam::111122223333:role/ACK-RDS-Role",
            "arn:aws:iam::444455556666:role/ACKCrossAccountRole"
          ]
        }
      ]
    }
    ```

    如需包含 IAM 角色選取器的詳細 ACK 許可組態，請參閱 [設定 ACK 許可](ack-permissions.md)。

 **Argo CD**   
預設不需要 IAM 許可。可能需要下列選用許可：  
+  ** AWS Secrets Manager**：如果使用 Secrets Manager 存放 Git 儲存庫登入資料
+  ** AWS CodeConnections**：如果使用 CodeConnections for Git 儲存庫身分驗證

  Secrets Manager 和 CodeConnections 的政策範例：

  ```
  {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "secretsmanager:GetSecretValue",
          "secretsmanager:DescribeSecret"
        ],
        "Resource": "arn:aws:secretsmanager:region:account-id:secret:argocd/*"
      },
      {
        "Effect": "Allow",
        "Action": [
          "codeconnections:UseConnection",
          "codeconnections:GetConnection"
        ],
        "Resource": "arn:aws:codeconnections:region:account-id:connection/*"
      }
    ]
  }
  ```

  如需詳細的 Argo CD 許可需求，請參閱 [Argo CD 考量事項](argocd-considerations.md)。

## 檢查現有功能角色
<a name="check-capability-role"></a>

您可以使用下列程序來檢查您的帳戶是否已有適合您使用案例的功能 IAM 角色。

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

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

1. 搜尋您職能角色名稱的角色清單 （例如 `ACKCapabilityRole`或 `ArgoCDCapabilityRole`)。

1. 如果角色存在，請選取該角色以檢視連接的政策和信任關係。

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

1. 確認信任關係符合[功能信任政策](#capability-trust-policy)。如果不相符，請更新信任政策。

1. 選擇**許可**，並確認角色具有適合您功能類型和使用案例的適當許可。

## 建立功能 IAM 角色
<a name="create-capability-role"></a>

您可以使用 AWS 管理主控台 或 AWS CLI 來建立功能角色。

 ** AWS 管理主控台 **   

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

1. 選擇 **Roles (角色)**，然後選擇 **Create role (建立角色)**。

1. 在**信任的實體類型**下，選取**自訂信任政策**。

1. 將[功能信任政策](#capability-trust-policy)複製並貼到信任政策編輯器中。

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

1. 在**新增許可**索引標籤上，選取或建立適合您功能類型的政策 （請參閱 [依功能類型列出的許可](#capability-permissions))。對於 kro，您可以略過此步驟。

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

1. 針對**角色名稱**，輸入角色的唯一名稱，例如 `ACKCapabilityRole`、 `ArgoCDCapabilityRole`或 `kroCapabilityRole`。

1. 針對 **Description** (描述)，輸入描述性文字，如 `Amazon EKS - ACK capability role`。

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

 ** AWS CLI**   

1. 將[功能信任政策](#capability-trust-policy)複製到名為 的檔案`capability-trust-policy.json`。

1. 建立角色。將 取代`ACKCapabilityRole`為您所需的角色名稱。

   ```
   aws iam create-role \
     --role-name ACKCapabilityRole \
     --assume-role-policy-document file://capability-trust-policy.json
   ```

1. 將必要的 IAM 政策連接至角色。針對 ACK，為您要管理 AWS 的服務連接政策。針對 Argo CD，視需要連接 Secrets Manager 或 CodeConnections 的政策。對於 kro，您可以略過此步驟。

   具有 S3 許可的 ACK 範例：

   ```
   aws iam put-role-policy \
     --role-name ACKCapabilityRole \
     --policy-name S3Management \
     --policy-document file://s3-policy.json
   ```

## 疑難排解功能角色問題
<a name="troubleshooting-capability-role"></a>

 **功能建立失敗，並顯示「無效的 IAM 角色」**   
請驗證：  
+ 角色與叢集位於相同的帳戶中
+ 信任政策符合[功能信任政策](#capability-trust-policy) 
+ 您有 角色的`iam:PassRole`許可

 **功能顯示許可錯誤**   
請驗證：  
+ 角色具有 功能類型的必要 IAM 許可
+ 角色的 叢集上存在存取項目
+ 視需要設定其他 Kubernetes 許可 （請參閱 [其他 Kubernetes 許可](capabilities-security.md#additional-kubernetes-permissions))

 **ACK 資源失敗，並出現「許可遭拒」錯誤**   
請驗證：  
+ 角色具有使用案例所需的 IAM 許可
+ 對於參考秘密的 ACK 控制器，請確定您已將範圍為適當命名空間的`AmazonEKSSecretReaderPolicy`存取項目政策建立關聯。

如需更多故障診斷指引，請參閱 [EKS 功能的安全考量](capabilities-security.md)。