

 **協助改進此頁面** 

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

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

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

# 授予 IAM 使用者和角色對 Kubernetes APIs存取權
<a name="grant-k8s-access"></a>

您的叢集具有 Kubernetes API 端點。Kubectl 會使用此 API。您可以使用兩種類型的身分來驗證此 API：
+  ** AWS Identity and Access Management (IAM) *主體* （角色或使用者）** – 此類型需要對 IAM 進行身分驗證。使用者可以 AWS 使用透過身分來源提供的憑證，以 [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) [使用者身分或使用聯合](https://aws.amazon.com/identity/federation/)身分登入 。如果管理員先前已設定使用 IAM 角色的聯合身分，則使用者只能夠以聯合身分登入。當使用者使用聯合 AWS 存取 時，他們間接[擔任角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/when-to-use-iam.html#security-iam-authentication-iamrole)。當使用者使用此類身分時，您：
  + 可以為其指派 Kubernetes 許可，從而讓其能夠使用您叢集上的 Kubernetes 物件。如需如何向 IAM 主體指派許可以便相應主體能夠存取您叢集上的 Kubernetes 物件的詳細資訊，請參閱 [使用 EKS 存取項目授予 IAM 使用者 Kubernetes 的存取權](access-entries.md)。
  + 可以指派 IAM 許可給他們，讓他們可以使用 Amazon EKS API、 AWS CLI AWS 管理主控台、 AWS CloudFormation 或 與您的 Amazon EKS 叢集及其資源搭配使用`eksctl`。如需詳細資訊，請參閱《服務授權參考》中的 [Amazon Elastic Kubernetes Service 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html#amazonelastickubernetesservice-actions-as-permissions)一節。
  + 節點透過承擔 IAM 角色來加入叢集。[適用於 Kubernetes 的AWS IAM 驗證器](https://github.com/kubernetes-sigs/aws-iam-authenticator#readme)在 Amazon EKS 控制平面上執行，讓使用者能夠使用 IAM 主體存取您的叢集。
+  **您自己的 OpenID Connect (OIDC) 提供商中的使用者**：此類型需要向 [OIDC](https://openid.net/connect/) 提供商進行身分驗證。如需向 Amazon EKS 叢集設定您自己的 OIDC 提供商的詳細資訊，請參閱 [透過外部 OIDC 提供商授予使用者存取 Kubernetes 的權限](authenticate-oidc-identity-provider.md)。當使用者使用此類身分時，您：
  + 可以為其指派 Kubernetes 許可，從而讓其能夠使用您叢集上的 Kubernetes 物件。
  + 無法為他們指派 IAM 許可，讓他們可以使用 Amazon EKS API、 AWS CLI AWS 管理主控台、 AWS CloudFormation 或 來使用您的 Amazon EKS 叢集及其資源`eksctl`。

您可以在叢集中使用這兩種類型的身分。IAM 身分驗證方法無法停用。OIDC 身分驗證方法為選用。

## 建立 IAM 身分與 Kubernetes 許可的關聯
<a name="authentication-modes"></a>

[適用於 Kubernetes 的AWS IAM 驗證器](https://github.com/kubernetes-sigs/aws-iam-authenticator#readme)安裝在叢集的控制平面上。它啟用您允許存取叢集上的 Kubernetes 資源的 [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) (IAM) 主體 (角色和使用者)。您可以使用以下方法之一允許 IAM 主體存取叢集上的 Kubernetes 物件：
+  **建立存取項目**：如果叢集版本等於或高於叢集 Kubernetes 版本[先決條件](access-entries.md)部分中列出的平台版本，則建議您使用此選項。

  使用*存取項目*，從叢集外部管理 IAM 主體的 Kubernetes 許可。您可以使用 EKS API、 AWS 命令列界面、 AWS SDKs、 AWS CloudFormation 和 來新增和管理對叢集的存取 AWS 管理主控台。這意味著您可以使用建立叢集時使用的工具來管理使用者。

  若要開始使用，請依照[變更身分驗證模式來使用存取項目](setting-up-access-entries.md)，然後[遷移現有的 aws-auth ConfigMap 項目來存取項目](migrating-access-entries.md)。
+  **新增項目到 `aws-auth` `ConfigMap`**：如果叢集的平台版本低於[先決條件](access-entries.md)部分中列出的版本，則必須使用此選項。如果叢集的平台版本等於或高於叢集 Kubernetes 版本[先決條件](access-entries.md)部分中列出的平台版本，並且您已將項目新增至 `ConfigMap`，則建議您將這些項目移轉到存取項目。但是，您無法移轉 Amazon EKS 新增至 `ConfigMap` 的項目，例如用於受管節點群組或 Fargate 設定檔的 IAM 角色項目。如需詳細資訊，請參閱[授予 IAM 使用者和角色對 Kubernetes APIs存取權](#grant-k8s-access)。
  + 如果必須使用 `aws-auth` `ConfigMap` 選項，則可以使用 `eksctl create iamidentitymapping` 命令將項目新增至 `ConfigMap`。如需詳細資訊，請參閱 `eksctl` 文件中的 [Manage IAM users and roles](https://eksctl.io/usage/iam-identity-mappings/) 一節。

## 設定叢集驗證模式
<a name="set-cam"></a>

每個叢集都有自己的*身分驗證模式*。身分驗證模式決定您可以使用哪些方法來允許 IAM 主體存取叢集上的 Kubernetes 物件。身分驗證模式有 3 種。

**重要**  
啟用存取項目方法後，即無法將其停用。  
如果在叢集建立期間未啟用 `ConfigMap` 方法，則稍後無法啟用。在引入存取項目之前建立的所有叢集均已啟用 `ConfigMap` 方法。  
如果您搭配叢集使用混合節點，則必須使用 `API` 或 `API_AND_CONFIG_MAP` 叢集身分驗證模式。

 **叢集內的 `aws-auth` `ConfigMap`**   
這是 Amazon EKS 叢集的原始身分驗證模式。建立叢集的 IAM 主體是可以使用 `kubectl` 存取叢集的初始使用者。初始使用者必須將其他使用者新增至 `aws-auth` `ConfigMap` 的清單中，並為這些使用者指派相應許可。其他使用者無法管理或移除初始使用者，因為 `ConfigMap` 中沒有要管理的項目。

 **`ConfigMap` 和存取項目**   
使用這種身分驗證模式時，您可以使用這兩種方法將 IAM 主體新增至叢集。請注意，每個方法都會存放個別的項目；例如，如果您從 AWS CLI 新增存取項目，`aws-auth``ConfigMap`則不會更新 。

 **僅存取項目**   
透過此身分驗證模式，您可以使用 EKS API、 AWS 命令列界面、 AWS SDKs、 AWS CloudFormation 和 AWS 管理主控台 來管理 IAM 主體對叢集的存取。  
每個存取項目都有一個*類型*，您可以使用*存取範圍*的組合將主體限制為特定命名空間，並使用*存取政策*來設定預先設定的可重複使用許可政策。您也可以使用 STANDARD 類型和 Kubernetes RBAC 群組來指派自訂許可。


| 身分驗證方式 | 方法 | 
| --- | --- | 
|   僅 `ConfigMap` (`CONFIG_MAP`)  |   `aws-auth` `ConfigMap`   | 
|  EKS API 和 `ConfigMap` (`API_AND_CONFIG_MAP`)  |  EKS API、 AWS 命令列界面、 AWS SDKs、 AWS CloudFormation 和 AWS 管理主控台 中的存取項目 `aws-auth` `ConfigMap`   | 
|  僅 EKS API (`API`)  |  EKS API、 AWS 命令列界面、 AWS SDKs、 AWS CloudFormation 和 中的存取項目 AWS 管理主控台   | 

**注意**  
Amazon EKS 自動模式需要存取項目。

# 使用 EKS 存取項目授予 IAM 使用者 Kubernetes 的存取權
<a name="access-entries"></a>

本節旨在說明如何使用存取項目與政策，管理 Amazon Elastic Kubernetes Service (EKS) 中 IAM 主體對 Kubernetes 叢集的存取權。您將找到有關變更驗證模式、從舊版 `aws-auth` ConfigMap 項目移轉、建立、更新、刪除存取項目、將政策與項目關聯、檢閱預先定義政策許可，以及安全存取管理之重要先決條件與考量事項的詳細資訊。

## 概觀
<a name="_overview"></a>

EKS 存取項目是授予使用者存取 Kubernetes API 的最佳方式。例如，您可使用存取項目授予開發人員使用 kubectl 的權限。本質上，EKS 存取項目會將一組 Kubernetes 許可與 IAM 身分 (如 IAM 角色) 建立關聯。例如，開發人員可擔任某個 IAM 角色，並使用該角色向 EKS 叢集進行身分驗證。

## 功能
<a name="_features"></a>
+  **集中式身分驗證與授權**：直接透過 Amazon EKS API 控制對 Kubernetes 叢集的存取，無需在 AWS 和 Kubernetes API 之間切換，以管理使用者許可。
+  **精細許可管理**：使用存取項目與政策為 AWS IAM 主體定義精細許可，包括修改或撤銷建立者的叢集管理員存取權。
+  **IaC 工具整合**：支援 AWS CloudFormation、Terraform 與 AWS CDK 等基礎結構即程式碼工具，以便在叢集建立期間定義存取組態。
+  **錯誤設定復原**：可透過 Amazon EKS API 復原叢集存取權，無需直接存取 Kubernetes API。
+  **降低負擔並增強安全性**：集中化作業以降低管理負擔，同時運用 AWS IAM 功能 (如 CloudTrail 稽核日誌與多因素驗證)。

## 附加許可的方式
<a name="_how_to_attach_permissions"></a>

您可透過兩種方式將 Kubernetes 許可附加至存取項目：
+ 使用存取政策。存取政策是由 AWS 維護的預先定義 Kubernetes 許可範本。如需詳細資訊，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。
+ 引用 Kubernetes 群組。若您將 IAM 身分與 Kubernetes 群組建立關聯，即可建立授予該群組許可的 Kubernetes 資源。如需詳細資訊，請參閱 Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。

## 考量事項
<a name="_considerations"></a>

在現有叢集上啟用 EKS 存取項目時，請留意下列事項：
+  **舊版叢集行為**：對於在存取項目引入前建立的叢集 (其初始平台版本早於[平台版本需求](https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html)中指定的版本)，EKS 會自動建立反映既有許可的存取項目。此項目包含了最初建立叢集的 IAM 身分，以及在叢集建立期間授予該身分的管理許可。
+  **處理舊版 `aws-auth` ConfigMap**：若您的叢集依賴舊版 `aws-auth` ConfigMap 進行存取管理，則在啟用存取項目時，僅會自動建立原叢集建立者的存取項目。新增至 ConfigMap 的其他角色或許可 (如供開發人員或服務使用的自訂 IAM 角色) 不會自動移轉。為了解決這個問題，請手動建立對應的存取項目。

## 開始使用
<a name="_get_started"></a>

1. 確定您要使用的 IAM 身分和存取政策。
   +  [檢閱存取政策許可](access-policy-permissions.md) 

1. 在您的叢集上啟用 EKS 存取項目。確認您擁有受支援的平台版本。
   +  [變更驗證模式以使用存取項目](setting-up-access-entries.md) 

1. 建立存取項目，將 IAM 身分與 Kubernetes 許可建立關聯。
   +  [建立存取項目](creating-access-entries.md) 

1. 使用該 IAM 身分向叢集進行驗證。
   +  [設定 AWS CLI](install-awscli.md) 
   +  [設定 `kubectl` 和 `eksctl`](install-kubectl.md) 

# 將存取政策與存取項目建立關聯
<a name="access-policies"></a>

您可以向*類型*為 `STANDARD` 的*存取項目*指派一個或多個存取政策。Amazon EKS 會自動向其他類型的存取項目授予在叢集中正常運作所需的許可。Amazon EKS 存取政策包含 Kubernetes 許可，而不是 IAM 許可。在將存取政策與存取項目關聯之前，請確認您熟悉每個存取政策中包含的 Kubernetes 許可。如需詳細資訊，請參閱[檢閱存取政策許可](access-policy-permissions.md)。如果沒有一個存取政策符合您的要求，則不要將存取政策與存取項目關聯。而是為存取項目指定一個或多個*群組名稱*，並建立和管理 Kubernetes 角色型存取控制物件。如需詳細資訊，請參閱[建立存取項目](creating-access-entries.md)。
+ 現有的存取項目。若要建立服務角色，請參閱[建立存取項目](creating-access-entries.md)。
+ Identity AWS and Access Management 角色或具有下列許可的使用者：`ListAccessEntries`、`DescribeAccessEntry`、`UpdateAccessEntry``ListAccessPolicies`、、 `AssociateAccessPolicy`和 `DisassociateAccessPolicy`。如需詳細資訊，請參閱《*服務授權參考*》中的 [Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html#amazonelastickubernetesservice-actions-as-permissions) 定義的動作一節。

在將存取政策與存取項目關聯之前，請考量以下要求：
+ 每個存取項目可以關聯多個存取政策，但只能將每個政策與一個存取項目關聯一次。如果您將一個存取項目與多個存取政策關聯，則該存取項目的 IAM 主體擁有所有關聯的存取政策中包含的所有許可。
+ 您可以將存取政策的適用範圍限定為叢集上的所有資源，或透過指定一個或多個 Kubernetes 命名空間的名稱來限制其適用範圍。您可以將萬用字元用於命名空間名稱。例如，如果要將存取政策的適用範圍限定為以 `dev-` 開頭的所有命名空間，則可以指定 `dev-*` 作為命名空間名稱。確認叢集上存在相應命名空間，並且拼字與叢集上的實際命名空間名稱相符。Amazon EKS 不會確認叢集上命名空間的拼字或命名空間是否存在。
+ 將存取政策關聯到存取項目後，您可以變更存取政策的*存取範圍*。如果您已將存取政策的適用範圍限定為 Kubernetes 命名空間，則可以根據需要新增和移除關聯的命名空間。
+ 如果您將存取政策關聯到也指定了*群組名稱*的存取項目，則相應 IAM 主體擁有所有關聯存取政策中的所有許可。它還擁有在指定群組名稱的任何 `Role` 和 `RoleBinding` 物件中指定的任何 `Role` 或 `ClusterRole` 物件中的所有許可。
+ 如果您執行 `kubectl auth can-i --list` 命令，您不會看到與您在執行該命令時所使用的 IAM 主體的存取項目關聯的存取政策指派的任何 Kubernetes 許可。只有當您已在繫結至為存取項目指定的群組名稱或使用者名稱的 Kubernetes `Role` 或 `ClusterRole` 物件中授予 Kubernetes 許可時，此命令才會顯示相應許可。
+ 如果您在與叢集上的 Kubernetes 物件互動時模擬 Kubernetes 使用者或群組，例如將 `kubectl` 命令與 `--as username ` 或 `--as-group group-name ` 結合使用，則將強制使用 RBAC 授權。因此，相應 IAM 主體沒有與相應存取項目關聯的任何存取政策指派的許可。相應 IAM 主體模擬的使用者或群組擁有的 Kubernetes 許可，僅限於您在繫結到該群組名稱或使用者名稱的 Kubernetes `Role` 或 `ClusterRole` 物件中授予的 Kubernetes 許可。為了讓相應 IAM 主體擁有關聯的存取政策中的許可，請勿模擬 Kubernetes 使用者或群組。相應 IAM 主體還將擁有您在繫結至為存取項目指定的群組名稱或使用者名稱的 Kubernetes `Role` 或 `ClusterRole` 物件中授予的任何許可。如需詳細資訊，請參閱 Kubernetes 文件中的[使用者模擬](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation)一節。

您可以使用 AWS 管理主控台 或 AWS CLI 將存取政策與存取項目建立關聯。

## AWS 管理主控台
<a name="access-associate-console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 選擇要將存取政策關聯到的存取項目所在的叢集的名稱。

1. 選擇**存取**索引標籤。

1. 如果存取項目的類型為**標準**，則可以將 Amazon EKS**存取政策**與之關聯或取消關聯。如果存取項目的類型不為**標準**，則此選項不可用。

1. 選擇**關聯存取政策**。

1. 對於**政策名稱**，選取具有您希望相應 IAM 主體擁有的許可的政策。若要查看每個政策包含的許可，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。

1. 對於**存取範圍**，選擇存取範圍。如果您選擇**叢集**，則該存取政策中的許可將授予相應 IAM 主體對所有 Kubernetes 命名空間中的資源的存取權。如果您選擇 **Kubernetes 命名空間**，則可以選擇**新增命名空間**。在顯示的**命名空間**欄位中，您可以輸入叢集上的 Kubernetes 命名空間的名稱。如果您希望相應 IAM 主體擁有跨多個命名空間的許可，則可以輸入多個命名空間。

1. 選擇**新增存取政策**。

## AWS CLI
<a name="access-associate-cli"></a>

1. 在您的裝置或 AWS CloudShell 上安裝和設定的 AWS 命令列界面 (AWS CLI) 版本 `1.27.160` `2.12.3`或更新版本。若要檢查您目前的版本，請使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。適用於 macOS 的 `yum`、 `apt-get`或 Homebrew 等套件管理員通常是最新版本 CLI AWS 後面的幾個版本。若要安裝最新版本，請參閱《 * AWS 命令列界面使用者指南*》中的使用 aws 設定[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和快速組態。 [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)在 AWS CloudShell 中安裝的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它，請參閱《CloudShell [AWS 使用者指南》中的將 CLI 安裝到您的主目錄](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。 * AWS CloudShell *

1. 檢視可用的存取政策。

   ```
   aws eks list-access-policies --output table
   ```

   範例輸出如下。

   ```
   ---------------------------------------------------------------------------------------------------------
   |                                          ListAccessPolicies                                           |
   +-------------------------------------------------------------------------------------------------------+
   ||                                           accessPolicies                                            ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ||                                 arn                                 |             name              ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSAdminPolicy        |  AmazonEKSAdminPolicy         ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy |  AmazonEKSClusterAdminPolicy  ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSEditPolicy         |  AmazonEKSEditPolicy          ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSViewPolicy         |  AmazonEKSViewPolicy          ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ```

   若要查看每個政策包含的許可，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。

1. 檢視現有的存取項目。使用您叢集的名稱取代 *my-cluster*。

   ```
   aws eks list-access-entries --cluster-name my-cluster
   ```

   範例輸出如下。

   ```
   {
       "accessEntries": [
           "arn:aws: iam::111122223333:role/my-role",
           "arn:aws: iam::111122223333:user/my-user"
       ]
   }
   ```

1. 將存取政策與存取項目關聯。以下範例將 `AmazonEKSViewPolicy` 存取政策與一個存取項目關聯。每當 *my-role* IAM 角色嘗試存取叢集上的 Kubernetes 物件時，Amazon EKS 將授權該角色使用政策中的許可來存取且僅存取 *my-namespace1* 和 *my-namespace2* Kubernetes 命名空間中的 Kubernetes 物件。將 *my-cluster* 取代為您的叢集名稱、將 *111122223333* 取代為您的 AWS 帳戶 ID，並將 *my-role* 取代為您希望 Amazon EKS 授權存取 Kubernetes 叢集物件的 IAM 角色名稱。

   ```
   aws eks associate-access-policy --cluster-name my-cluster --principal-arn arn:aws: iam::111122223333:role/my-role \
       --access-scope type=namespace,namespaces=my-namespace1,my-namespace2 --policy-arn arn:aws: eks::aws:cluster-access-policy/AmazonEKSViewPolicy
   ```

   如果您希望相應 IAM 主體擁有適用於整個叢集的許可，請用 `type=cluster` 取代 `type=namespace,namespaces=my-namespace1,my-namespace2 `。如果要將多個存取政策關聯到該存取項目，請多次執行該命令，並每次使用不同的存取政策。每個關聯的存取政策都有自身的適用範圍。
**注意**  
如果您稍後想要變更關聯的存取政策的適用範圍，請再次執行先前的命令並指定新的適用範圍。例如，如果您想要移除 *my-namespace2*，則只需使用 `type=namespace,namespaces=my-namespace1 ` 再次執行命令。如果您想將適用範圍從 `namespace` 變更為 `cluster`，您需要使用 `type=cluster` 再次執行該命令，而不使用 `type=namespace,namespaces=my-namespace1,my-namespace2 `。

1. 確定哪些存取政策與某個存取項目關聯。

   ```
   aws eks list-associated-access-policies --cluster-name my-cluster --principal-arn arn:aws: iam::111122223333:role/my-role
   ```

   範例輸出如下。

   ```
   {
       "clusterName": "my-cluster",
       "principalArn": "arn:aws: iam::111122223333",
       "associatedAccessPolicies": [
           {
               "policyArn": "arn:aws: eks::aws:cluster-access-policy/AmazonEKSViewPolicy",
               "accessScope": {
                   "type": "cluster",
                   "namespaces": []
               },
               "associatedAt": "2023-04-17T15:25:21.675000-04:00",
               "modifiedAt": "2023-04-17T15:25:21.675000-04:00"
           },
           {
               "policyArn": "arn:aws: eks::aws:cluster-access-policy/AmazonEKSAdminPolicy",
               "accessScope": {
                   "type": "namespace",
                   "namespaces": [
                       "my-namespace1",
                       "my-namespace2"
                   ]
               },
               "associatedAt": "2023-04-17T15:02:06.511000-04:00",
               "modifiedAt": "2023-04-17T15:02:06.511000-04:00"
           }
       ]
   }
   ```

   在前面的範例中，相應存取項目的 IAM 主體擁有相應叢集上所有命名空間的檢視許可，以及兩個 Kubernetes 命名空間的管理員許可。

1. 將存取政策與存取項目取消關聯。在此範例中，`AmazonEKSAdminPolicy` 政策與存取項目取消關聯。但是，相應 IAM 主體保留 `AmazonEKSViewPolicy` 存取政策中對 *my-namespace1* 和 *my-namespace2* 命名空間中物件的許可，因為該存取政策並未與該存取項目取消關聯。

   ```
   aws eks disassociate-access-policy --cluster-name my-cluster --principal-arn arn:aws: iam::111122223333:role/my-role \
       --policy-arn arn:aws: eks::aws:cluster-access-policy/AmazonEKSAdminPolicy
   ```

要列出所有可用的存取政策，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。

# 遷移現有 `aws-auth ConfigMap` 項目至存取項目
<a name="migrating-access-entries"></a>

如果您已將項目新增至叢集上的 `aws-auth` `ConfigMap`，則建議您為 `aws-auth` `ConfigMap` 中的現有項目建立存取項目。建立存取項目後，您可以從 `ConfigMap` 中移除對應項目。您無法將[存取政策](access-policies.md)與 `aws-auth` `ConfigMap` 中的項目建立關聯。如果您想要將存取政策與 IAM 主體相關聯，則請建立存取項目。

**重要**  
當叢集處於 `API_AND_CONFIGMAP` 身分驗證模式，且在 `aws-auth` `ConfigMap` 和存取項目中具有相同 IAM 角色的映射時，該角色將會使用存取項目的映射進行身分驗證。存取項目的優先順序高於相同 IAM 主體的 `ConfigMap` 項目。
在將 Amazon EKS 為[受管節點群組](managed-node-groups.md)或 [Fargate 設定檔](fargate-profile.md)建立的現有 `aws-auth` `ConfigMap` 項目移除至您的叢集之前，請仔細檢查 Amazon EKS 叢集中是否存在這些特定資源的正確存取項目。如果您在沒有相同存取項目的情況下移除 Amazon EKS 在 `ConfigMap` 中建立的項目，叢集將無法正常運作。

## 先決條件
<a name="migrating_access_entries_prereq"></a>
+ 熟悉存取項目和存取政策。如需詳細資訊，請參閱[使用 EKS 存取項目授予 IAM 使用者 Kubernetes 的存取權](access-entries.md)及[將存取政策與存取項目建立關聯](access-policies.md)。
+ 現有叢集的平台版本等於或高於 [使用 EKS 存取項目授予 IAM 使用者 Kubernetes 的存取權](access-entries.md) 物件主題之「先決條件」部分中列出的版本。
+ 裝置或 AWS CloudShell 上安裝的`eksctl`命令列工具版本 `0.215.0`或更新版本。如需有關安裝或更新 `eksctl` 的指示，請參閱 `eksctl` 文件中的[安裝](https://eksctl.io/installation)一節。
+ 修改 `kube-system` 命名空間中的 `aws-auth` `ConfigMap` 的 Kubernetes 許可。
+ Identity AWS and Access Management 角色或具有下列許可的使用者： `CreateAccessEntry`和 `ListAccessEntries`。如需詳細資訊，請參閱《服務授權參考》中的 [Amazon Elastic Kubernetes Service 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html#amazonelastickubernetesservice-actions-as-permissions)一節。

## `eksctl`
<a name="migrating_access_entries_eksctl"></a>

1. 檢視 `aws-auth ConfigMap` 中的現有項目。使用您叢集的名稱取代 *my-cluster*。

   ```
   eksctl get iamidentitymapping --cluster my-cluster
   ```

   範例輸出如下。

   ```
   ARN                                                                                             USERNAME                                GROUPS                                                  ACCOUNT
   arn:aws: iam::111122223333:role/EKS-my-cluster-Admins                                            Admins                                  system:masters
   arn:aws: iam::111122223333:role/EKS-my-cluster-my-namespace-Viewers                              my-namespace-Viewers                    Viewers
   arn:aws: iam::111122223333:role/EKS-my-cluster-self-managed-ng-1                                 system:node:{{EC2PrivateDNSName}}       system:bootstrappers,system:nodes
   arn:aws: iam::111122223333:user/my-user                                                          my-user
   arn:aws: iam::111122223333:role/EKS-my-cluster-fargateprofile1                                   system:node:{{SessionName}}             system:bootstrappers,system:nodes,system:node-proxier
   arn:aws: iam::111122223333:role/EKS-my-cluster-managed-ng                                        system:node:{{EC2PrivateDNSName}}       system:bootstrappers,system:nodes
   ```

1.  為在上一個輸出中傳回的您建立的任何 `ConfigMap` 項目的 [建立存取項目](creating-access-entries.md)。建立存取項目時，請確保為 `ARN`、`USERNAME`、`GROUPS` 和 `ACCOUNT` 指定與輸出中傳回的值相同的值。在範例輸出中，您將為最後兩個項目之外的所有項目建立存取項目，因為這些項目是由 Amazon EKS 為 Fargate 描述檔和受管節點群組建立的。

1. 從 `ConfigMap` 中刪除您建立的任何存取項目對應的項目。如果您沒有從 `ConfigMap` 中刪除對應項目，則對應 IAM 主體 ARN 的存取項目的設定將覆寫 `ConfigMap` 項目。將 *111122223333* 取代為 AWS 您的帳戶 ID，並將 *EKS-my-cluster-my-namespace-Viewers* 取代為 中項目中角色的名稱`ConfigMap`。如果您要移除的項目用於 IAM 使用者而不是 IAM 角色，請用 `user` 取代 `role`，並用使用者名稱取代 *EKS-my-cluster-my-namespace-Viewers*。

   ```
   eksctl delete iamidentitymapping --arn arn:aws: iam::111122223333:role/EKS-my-cluster-my-namespace-Viewers --cluster my-cluster
   ```

# 檢閱存取政策許可
<a name="access-policy-permissions"></a>

存取政策包含 `rules`，其中包含 Kubernetes `verbs` (許可) 和 `resources`。存取政策不包含 IAM 許可或資源。與 Kubernetes `Role` 和 `ClusterRole` 物件類似，存取政策僅包含 `allow` `rules`。您無法修改存取政策的內容。您無法建立自己的存取政策。如果存取政策中的許可無法滿足您的需求，您可以建立 Kubernetes RBAC 物件並為存取項目指定*群組名稱*。如需詳細資訊，請參閱[建立存取項目](creating-access-entries.md)。存取政策中包含的許可類似於 Kubernetes 面向使用者之叢集角色中的許可。如需詳細資訊，請參閱 Kubernetes 文件中的 [User-facing roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) 一節。

## 列出所有政策
<a name="access-policies-cli-command"></a>

使用此頁面列出的任一存取政策，或使用 CLI AWS 擷取所有可用存取政策的清單：

```
aws eks list-access-policies
```

預期輸出應如下所示 (為簡潔起見已省略部分內容)：

```
{
    "accessPolicies": [
        {
            "name": "AmazonAIOpsAssistantPolicy",
            "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonAIOpsAssistantPolicy"
        },
        {
            "name": "AmazonARCRegionSwitchScalingPolicy",
            "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonARCRegionSwitchScalingPolicy"
        },
        {
            "name": "AmazonEKSAdminPolicy",
            "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy"
        },
        {
            "name": "AmazonEKSAdminViewPolicy",
            "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminViewPolicy"
        },
        {
            "name": "AmazonEKSAutoNodePolicy",
            "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAutoNodePolicy"
        }
        // Additional policies omitted
    ]
}
```

## AmazonEKSAdminPolicy
<a name="access-policy-permissions-amazoneksadminpolicy"></a>

此存取政策包含向相應 IAM 主體授予對資源的大部分許可的許可。當將之與某個存取項目關聯時，其存取範圍通常是一個或多個 Kubernetes 命名空間。如果您希望相應 IAM 主體對叢集上的所有資源具有管理員存取權，請將 [AmazonEKSClusterAdminPolicy](#access-policy-permissions-amazoneksclusteradminpolicy) 存取政策與相應存取項目關聯。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSAdminPolicy` 


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|   `apps`   |   `daemonsets`, `deployments`, `deployments/rollback`, `deployments/scale`, `replicasets`, `replicasets/scale`, `statefulsets`, `statefulsets/scale`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `apps`   |   `controllerrevisions`, `daemonsets`, `daemonsets/status`, `deployments`, `deployments/scale`, `deployments/status`, `replicasets`, `replicasets/scale`, `replicasets/status`, `statefulsets`, `statefulsets/scale`, `statefulsets/status`   |   `get`, `list`, `watch`   | 
|   `authorization.k8s.io`   |   `localsubjectaccessreviews`   |   `create`   | 
|   `autoscaling`   |   `horizontalpodautoscalers`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `autoscaling`   |   `horizontalpodautoscalers`, `horizontalpodautoscalers/status`   |   `get`, `list`, `watch`   | 
|   `batch`   |   `cronjobs`, `jobs`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `batch`   |   `cronjobs`, `cronjobs/status`, `jobs`, `jobs/status`   |   `get`, `list`, `watch`   | 
|   `discovery.k8s.io`   |   `endpointslices`   |   `get`, `list`, `watch`   | 
|   `extensions`   |   `daemonsets`, `deployments`, `deployments/rollback`, `deployments/scale`, `ingresses`, `networkpolicies`, `replicasets`, `replicasets/scale`, `replicationcontrollers/scale`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `extensions`   |   `daemonsets`, `daemonsets/status`, `deployments`, `deployments/scale`, `deployments/status`, `ingresses`, `ingresses/status`, `networkpolicies`, `replicasets`, `replicasets/scale`, `replicasets/status`, `replicationcontrollers/scale`   |   `get`, `list`, `watch`   | 
|   `networking.k8s.io`   |   `ingresses`, `ingresses/status`, `networkpolicies`   |   `get`, `list`, `watch`   | 
|   `networking.k8s.io`   |   `ingresses`, `networkpolicies`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `policy`   |   `poddisruptionbudgets`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `policy`   |   `poddisruptionbudgets`, `poddisruptionbudgets/status`   |   `get`, `list`, `watch`   | 
|   `rbac.authorization.k8s.io`   |   `rolebindings`, `roles`   |   `create`, `delete`, `deletecollection`, `get`, `list`, `patch`, `update`, `watch`   | 
|  |   `configmaps`, `endpoints`, `persistentvolumeclaims`, `persistentvolumeclaims/status`, `pods`, `replicationcontrollers`, `replicationcontrollers/scale`, `serviceaccounts`, `services`, `services/status`   |   `get`,`list`, `watch`   | 
|  |   `pods/attach`, `pods/exec`, `pods/portforward`, `pods/proxy`, `secrets`, `services/proxy`   |   `get`, `list`, `watch`   | 
|  |   `configmaps`, `events`, `persistentvolumeclaims`, `replicationcontrollers`, `replicationcontrollers/scale`, `secrets`, `serviceaccounts`, `services`, `services/proxy`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|  |   `pods`, `pods/attach`, `pods/exec`, `pods/portforward`, `pods/proxy`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|  |   `serviceaccounts`   |   `impersonate`   | 
|  |   `bindings`, `events`, `limitranges`, `namespaces/status`, `pods/log`, `pods/status`, `replicationcontrollers/status`, `resourcequotas`, `resourcequotas/status`   |   `get`, `list`, `watch`   | 
|  |   `namespaces`   |   `get`,`list`, `watch`   | 

## AmazonEKSClusterAdminPolicy
<a name="access-policy-permissions-amazoneksclusteradminpolicy"></a>

此存取政策包含授予相應 IAM 主體對叢集的管理員存取權的許可。當將之與某個存取項目關聯時，其存取範圍通常是叢集，而不是某個 Kubernetes 命名空間。如果您希望限制相應 IAM 主體的管理範圍，請考慮將 [AmazonEKSAdminPolicy](#access-policy-permissions-amazoneksadminpolicy) 存取政策與相應存取項目關聯。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy` 


| Kubernetes API 群組 | Kubernetes nonResourceURLs | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | --- | 
|   `*`   |  |   `*`   |   `*`   | 
|  |   `*`   |  |   `*`   | 

## AmazonEKSAdminViewPolicy
<a name="access-policy-permissions-amazoneksadminviewpolicy"></a>

此存取政策包含授予相應 IAM 主體在叢集中列出/檢視所有資源的許可。請注意，這包含 [Kubernetes 秘密。](https://kubernetes.io/docs/concepts/configuration/secret/)

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSAdminViewPolicy` 


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|   `*`   |   `*`   |   `get`, `list`, `watch`   | 

## AmazonEKSEditPolicy
<a name="access-policy-permissions-amazonekseditpolicy"></a>

此存取政策包含允許相應 IAM 主體編輯大多數 Kubernetes 資源的許可。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSEditPolicy` 


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|   `apps`   |   `daemonsets`, `deployments`, `deployments/rollback`, `deployments/scale`, `replicasets`, `replicasets/scale`, `statefulsets`, `statefulsets/scale`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `apps`   |   `controllerrevisions`, `daemonsets`, `daemonsets/status`, `deployments`, `deployments/scale`, `deployments/status`, `replicasets`, `replicasets/scale`, `replicasets/status`, `statefulsets`, `statefulsets/scale`, `statefulsets/status`   |   `get`, `list`, `watch`   | 
|   `autoscaling`   |   `horizontalpodautoscalers`, `horizontalpodautoscalers/status`   |   `get`, `list`, `watch`   | 
|   `autoscaling`   |   `horizontalpodautoscalers`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `batch`   |   `cronjobs`, `jobs`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `batch`   |   `cronjobs`, `cronjobs/status`, `jobs`, `jobs/status`   |   `get`, `list`, `watch`   | 
|   `discovery.k8s.io`   |   `endpointslices`   |   `get`, `list`, `watch`   | 
|   `extensions`   |   `daemonsets`, `deployments`, `deployments/rollback`, `deployments/scale`, `ingresses`, `networkpolicies`, `replicasets`, `replicasets/scale`, `replicationcontrollers/scale`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `extensions`   |   `daemonsets`, `daemonsets/status`, `deployments`, `deployments/scale`, `deployments/status`, `ingresses`, `ingresses/status`, `networkpolicies`, `replicasets`, `replicasets/scale`, `replicasets/status`, `replicationcontrollers/scale`   |   `get`, `list`, `watch`   | 
|   `networking.k8s.io`   |   `ingresses`, `networkpolicies`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `networking.k8s.io`   |   `ingresses`, `ingresses/status`, `networkpolicies`   |   `get`, `list`, `watch`   | 
|   `policy`   |   `poddisruptionbudgets`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|   `policy`   |   `poddisruptionbudgets`, `poddisruptionbudgets/status`   |   `get`, `list`, `watch`   | 
|  |   `namespaces`   |   `get`, `list`, `watch`   | 
|  |   `pods/attach`, `pods/exec`, `pods/portforward`, `pods/proxy`, `secrets`, `services/proxy`   |   `get`, `list`, `watch`   | 
|  |   `serviceaccounts`   |   `impersonate`   | 
|  |   `pods`, `pods/attach`, `pods/exec`, `pods/portforward`, `pods/proxy`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|  |   `configmaps`, `events`, `persistentvolumeclaims`, `replicationcontrollers`, `replicationcontrollers/scale`, `secrets`, `serviceaccounts`, `services`, `services/proxy`   |   `create`, `delete`, `deletecollection`, `patch`, `update`   | 
|  |   `configmaps`, `endpoints`, `persistentvolumeclaims`, `persistentvolumeclaims/status`, `pods`, `replicationcontrollers`, `replicationcontrollers/scale`, `serviceaccounts`, `services`, `services/status`   |   `get`, `list`, `watch`   | 
|  |   `bindings`, `events`, `limitranges`, `namespaces/status`, `pods/log`, `pods/status`, `replicationcontrollers/status`, `resourcequotas`, `resourcequotas/status`   |   `get`, `list`, `watch`   | 

## AmazonEKSViewPolicy
<a name="access-policy-permissions-amazoneksviewpolicy"></a>

此存取政策包含允許相應 IAM 主體檢視大多數 Kubernetes 資源的許可。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSViewPolicy` 


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|   `apps`   |   `controllerrevisions`, `daemonsets`, `daemonsets/status`, `deployments`, `deployments/scale`, `deployments/status`, `replicasets`, `replicasets/scale`, `replicasets/status`, `statefulsets`, `statefulsets/scale`, `statefulsets/status`   |   `get`, `list`, `watch`   | 
|   `autoscaling`   |   `horizontalpodautoscalers`, `horizontalpodautoscalers/status`   |   `get`, `list`, `watch`   | 
|   `batch`   |   `cronjobs`, `cronjobs/status`, `jobs`, `jobs/status`   |   `get`, `list`, `watch`   | 
|   `discovery.k8s.io`   |   `endpointslices`   |   `get`, `list`, `watch`   | 
|   `extensions`   |   `daemonsets`, `daemonsets/status`, `deployments`, `deployments/scale`, `deployments/status`, `ingresses`, `ingresses/status`, `networkpolicies`, `replicasets`, `replicasets/scale`, `replicasets/status`, `replicationcontrollers/scale`   |   `get`, `list`, `watch`   | 
|   `networking.k8s.io`   |   `ingresses`, `ingresses/status`, `networkpolicies`   |   `get`, `list`, `watch`   | 
|   `policy`   |   `poddisruptionbudgets`, `poddisruptionbudgets/status`   |   `get`, `list`, `watch`   | 
|  |   `configmaps`, `endpoints`, `persistentvolumeclaims`, `persistentvolumeclaims/status`, `pods`, `replicationcontrollers`, `replicationcontrollers/scale`, `serviceaccounts`, `services`, `services/status`   |   `get`, `list`, `watch`   | 
|  |   `bindings`、`events`、`limitranges`、`namespaces/status`、`pods/log`、`pods/status`、`replicationcontrollers/status`、`resourcequotas`、r`esourcequotas/status`   |   `get`, `list`, `watch`   | 
|  |   `namespaces`   |   `get`, `list`, `watch`   | 

## AmazonEKSSecretReaderPolicy
<a name="_amazonekssecretreaderpolicy"></a>

此存取政策包含允許 IAM 主體讀取 [Kubernetes 秘密的許可。](https://kubernetes.io/docs/concepts/configuration/secret/)

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSSecretReaderPolicy` 


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|  |   `secrets`   |   `get`, `list`, `watch`   | 

## AmazonEKSAutoNodePolicy
<a name="_amazoneksautonodepolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSAutoNodePolicy` 

此政策包含下列許可，這些許可能讓 Amazon EKS 元件完成下列任務：
+  `kube-proxy` – 監控網路端點和服務，並管理相關事件。這可啟用整個叢集的網路代理功能。
+  `ipamd` – 管理 AWS VPC 聯網資源和容器網路介面 (CNI)。這可讓 IP 位址管理常駐程式處理 Pod 聯網。
+  `coredns` – 存取端點與服務等服務探索資源。這可在叢集內啟用 DNS 解析。
+  `ebs-csi-driver` – 使用 Amazon EBS 磁碟區的儲存相關資源。這允許持續性磁碟區的動態佈建與附加。
+  `neuron` – 監控 AWS Neuron 裝置的節點和 Pod。這可讓您管理 AWS Inferentia 和 Trainium 加速器。
+  `node-monitoring-agent` – 存取節點診斷與事件。這實現了叢集運作狀態監控與診斷收集。

每個元件都使用專用服務帳戶，且僅限於其特定功能所需的許可。

如果您在 NodeClass 中手動指定節點 IAM 角色，則需要建立將新節點 IAM 角色與此存取政策建立關聯的存取項目。

## AmazonEKSBlockStoragePolicy
<a name="_amazoneksblockstoragepolicy"></a>

**注意**  
此政策僅針對 AWS 服務連結角色指定，無法與客戶受管角色搭配使用。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSBlockStoragePolicy` 

此政策包含允許 Amazon EKS 管理儲存操作的領導者選擇和協調資源的許可：
+  `coordination.k8s.io` – 建立和管理用於領導者選擇的租約物件。這使得 EKS 儲存元件能夠透過領導者選擇機制在整個叢集中協調其活動。

該政策的範圍限定於 EKS 儲存元件使用的特定租約資源，避免與叢集中其他協調資源發生存取衝突。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保區塊儲存功能正常運作所需的許可到位。

## AmazonEKSLoadBalancingPolicy
<a name="_amazoneksloadbalancingpolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSLoadBalancingPolicy` 

此政策包含允許 Amazon EKS 管理領導者選擇資源以進行負載平衡的許可：
+  `coordination.k8s.io` – 建立和管理用於領導者選擇的租約物件。此功能可讓 EKS 負載平衡元件透過選擇領導者，協調多個複本間的活動。

此政策範圍專門針對負載平衡租約資源，確保協調運作順暢，同時防止存取叢集中的其他租約資源。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保聯網功能正常運作所需的許可到位。

## AmazonEKSNetworkingPolicy
<a name="_amazoneksnetworkingpolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSNetworkingPolicy` 

此政策包含允許 Amazon EKS 管理領導者選擇資源以進行聯網的許可：
+  `coordination.k8s.io` – 建立和管理用於領導者選擇的租約物件。這可讓 EKS 聯網元件可透過選擇領導者來協調 IP 位址分配活動。

此政策範圍專門針對聯網租約資源，確保協調運作順暢，同時防止存取叢集中的其他租約資源。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保聯網功能正常運作所需的許可到位。

## AmazonEKSComputePolicy
<a name="_amazonekscomputepolicy"></a>

**注意**  
此政策僅針對 AWS 服務連結角色指定，無法與客戶受管角色搭配使用。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSComputePolicy` 

此政策包含允許 Amazon EKS 管理領導者選擇資源以進行運算操作的許可：
+  `coordination.k8s.io` – 建立和管理用於領導者選擇的租約物件。這讓 EKS 運算元件能透過選擇領導者來協調節點擴展活動。

政策範圍專門針對運算管理租約資源，同時允許叢集中所有租約資源的基本讀取權限 (`get`、`watch`)。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保聯網功能正常運作所需的許可到位。

## AmazonEKSBlockStorageClusterPolicy
<a name="_amazoneksblockstorageclusterpolicy"></a>

**注意**  
此政策僅針對 AWS 服務連結角色指定，無法與客戶受管角色搭配使用。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSBlockStorageClusterPolicy` 

此政策會授予 Amazon EKS 自動模式的區塊儲存功能所需的許可。它能有效管理 Amazon EKS 叢集內的區塊儲存資源。政策包含下列許可：

CSI 驅動程式管理：
+ 建立、讀取、更新和刪除 CSI 驅動程式，特別是區塊儲存。

磁碟區管理：
+ 列出、監看、建立、更新、修補及刪除持續性磁碟區。
+ 列出、監看及更新持續性磁碟區宣告。
+ 修補持續性磁碟區宣告狀態。

節點與 Pod 互動：
+ 讀取節點與 Pod 資訊。
+ 管理與儲存操作相關的事件。

儲存類別與屬性：
+ 讀取儲存類別與 CSI 節點。
+ 讀取磁碟區屬性類別。

磁碟區連接：
+ 列出、監看及修改磁碟區連接及其狀態。

快照操作：
+ 管理磁碟區快照、快照內容及快照類別。
+ 處理磁碟區群組快照及相關資源的操作。

此政策旨在為執行於自動模式的 Amazon EKS 叢集提供全面的區塊儲存管理支援。它結合了區塊儲存磁碟卷的佈建、連接、調整大小與快照等多種操作許可。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保區塊儲存功能正常運作所需的許可到位。

## AmazonEKSComputeClusterPolicy
<a name="_amazonekscomputeclusterpolicy"></a>

**注意**  
此政策僅針對 AWS 服務連結角色指定，無法與客戶受管角色搭配使用。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSComputeClusterPolicy` 

此政策會授予 Amazon EKS 自動模式的運算管理功能所需的許可。它能高效協同運作與擴展 Amazon EKS 叢集內的運算資源。政策包含下列許可：

節點管理：
+ 建立、讀取、更新、刪除及管理 NodePools 與 NodeClaims 的狀態。
+ 管理 NodeClass，包括建立、修改與刪除。

排程與資源管理：
+ 對 Pod、節點、持續性磁碟區、持續性磁碟區宣告、複寫控制器和命名空間的讀取權限。
+ 對儲存類別、CSI 節點及磁碟區連接的讀取權限。
+ 列出及監看部署、常駐程式集、複本集與有狀態集。
+ 讀取 Pod 中斷預算。

事件處理：
+ 建立、讀取及管理叢集事件。

節點解除佈建與 Pod 移出：
+ 更新、修補及刪除節點。
+ 必要時建立 Pod 移出及刪除 Pod。

自訂資源定義 (CRD) 管理：
+ 建立新 CRD。
+ 管理與節點管理相關的特定 CRD (NodeClasses、NodePools、NodeClaims 及 NodeDiagnostics)。

此政策旨在為執行於自動模式的 Amazon EKS 叢集提供全面的運算管理支援。它結合了節點佈建、排程、擴展與資源最佳化等多種操作的許可。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保運算管理功能正常運作所需的許可到位。

## AmazonEKSLoadBalancingClusterPolicy
<a name="_amazoneksloadbalancingclusterpolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSLoadBalancingClusterPolicy` 

此政策會授予 Amazon EKS 自動模式的負載平衡功能所需的許可。它能實現 Amazon EKS 叢集內負載平衡資源的高效管理與組態。政策包含下列許可：

事件與資源管理：
+ 建立與修補事件。
+ 對 Pod、節點、端點及命名空間的讀取權限。
+ 更新 Pod 狀態。

服務與傳入管理：
+ 服務及其狀態的完整管理。
+ 全面控制傳入及其狀態。
+ 端點配量與傳入類別的讀取權限。

目標群組連結：
+ 建立與修改目標群組連結及其狀態。
+ 對傳入類別參數的讀取權限。

自訂資源定義 (CRD) 管理：
+ 建立與讀取所有 CRD。
+ targetgroupbindings.eks.amazonaws.com 與 ingressclassparams.eks.amazonaws.com CRD 的特定管理。

Webhook 組態：
+ 建立與讀取變動及驗證 Webhook 組態。
+ 管理 eks-load-balancing-webhook 組態。

此政策旨在為執行於自動模式的 Amazon EKS 叢集提供全面的負載平衡管理支援。它結合了各種操作的許可，包括服務公開、輸入路由，以及與 AWS 負載平衡服務的整合。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保負載平衡功能正常運作所需的許可到位。

## AmazonEKSNetworkingClusterPolicy
<a name="_amazoneksnetworkingclusterpolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSNetworkingClusterPolicy` 

AmazonEKSNetworkingClusterPolicy

此政策會授予 Amazon EKS 自動模式的聯網功能所需的許可。它能實現 Amazon EKS 叢集內聯網資源的高效管理與組態。政策包含下列許可：

節點與 Pod 管理：
+ 對 NodeClass 及其狀態的讀取權限。
+ 對 NodeClaims 及其狀態的讀取權限。
+ 對 Pod 的讀取權限。

CNI 節點管理：
+ 對 CNINodes 及其狀態的許可，包含建立、讀取、更新、刪除及修補。

自訂資源定義 (CRD) 管理：
+ 建立與讀取所有 CRD。
+ 對 cninodes.eks.amazonaws.com CRD 的特定管理 (更新、修補、刪除)。

管理事件：
+ 建立與修補事件。

此政策旨在為執行於自動模式的 Amazon EKS 叢集提供全面的聯網管理支援。它結合了節點聯網組態、CNI (容器網路介面) 管理及相關自訂資源處理等多種操作的許可。

此政策允許聯網元件與節點相關資源互動、管理 CNI 特定的節點組態，並處理叢集中聯網操作關鍵的自訂資源。

當啟用自動模式時，Amazon EKS 會自動為叢集 IAM 角色建立帶有此存取政策的存取項目，以確保聯網功能正常運作所需的許可到位。

## AmazonEKSHybridPolicy
<a name="access-policy-permissions-amazonekshybridpolicy"></a>

**注意**  
此政策僅針對 AWS 服務連結角色指定，無法與客戶受管角色搭配使用。

此存取政策包含了授予 EKS 存取叢集節點的許可。當將之與某個存取項目關聯時，其存取範圍通常是叢集，而不是某個 Kubernetes 命名空間。此政策供 Amazon EKS 混合節點使用。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSHybridPolicy` 


| Kubernetes API 群組 | Kubernetes nonResourceURLs | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | --- | 
|   `*`   |  |   `nodes`   |   `list`   | 

## AmazonEKSClusterInsightsPolicy
<a name="access-policy-permissions-AmazonEKSClusterInsightsPolicy"></a>

**注意**  
此政策僅針對 AWS 服務連結角色指定，無法與客戶受管角色搭配使用。

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSClusterInsightsPolicy` 

此政策授予 Amazon EKS Cluster Insights 功能的唯讀許可。政策包含下列許可：

節點存取：- 列出與檢視叢集節點 - 讀取節點狀態資訊

DaemonSet 存取：- 對 kube-proxy 組態的讀取權限

此政策由 EKS 服務為 Cluster Insights 自動管理。如需詳細資訊，請參閱[利用叢集洞見為 Kubernetes 版本升級做好準備，並為錯誤組態進行故障診斷](cluster-insights.md)。

## AWSBackupFullAccessPolicyForBackup
<a name="_awsbackupfullaccesspolicyforbackup"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AWSBackupFullAccessPolicyForBackup` 

AWSBackupFullAccessPolicyForBackup

此政策授予 AWS Backup 管理和建立 EKS 叢集備份所需的許可。此政策包含以下許可：


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|   `*`   |   `*`   |   `list`, `get`   | 

## AWSBackupFullAccessPolicyForRestore
<a name="_awsbackupfullaccesspolicyforrestore"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AWSBackupFullAccessPolicyForRestore` 

AWSBackupFullAccessPolicyForRestore

此政策授予 AWS Backup 管理和還原 EKS 叢集備份所需的許可。此政策包含以下許可：


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|   `*`   |   `*`   |   `list`, `get`, `create`   | 

## AmazonEKSACKPolicy
<a name="_amazoneksackpolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSACKPolicy` 

此政策授予 AWS Controllers for Kubernetes (ACK) 功能從 Kubernetes 管理 AWS 資源所需的許可。政策包含下列許可：

ACK 自訂資源管理：
+ 完整存取 50\$1 個服務中的所有 ACK AWS 服務自訂資源，包括 S3、RDS、DynamoDB、Lambda、EC2 等。
+ 建立、讀取、更新和刪除 ACK 自訂資源定義。

命名空間存取：
+ 資源組織的命名空間讀取存取權。

領導者選擇：
+ 建立和讀取領導者選擇的協調租用。
+ 更新和刪除特定 ACK 服務控制器租用。

管理事件：
+ 建立和修補 ACK 操作的事件。

此政策旨在支援透過 Kubernetes APIs全面的 AWS 資源管理。Amazon EKS 會自動為您在建立 ACK 功能時提供的功能 IAM 角色建立具有此存取政策的存取項目。


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|  |   `namespaces`   |   `get`, `watch`, `list`   | 
|   `services.k8s.aws`, `acm.services.k8s.aws`, `acmpca.services.k8s.aws`, `apigateway.services.k8s.aws`, `apigatewayv2.services.k8s.aws`, `applicationautoscaling.services.k8s.aws`, `athena.services.k8s.aws`, `bedrock.services.k8s.aws`, `bedrockagent.services.k8s.aws`, `bedrockagentcorecontrol.services.k8s.aws`, `cloudfront.services.k8s.aws`, `cloudtrail.services.k8s.aws`, `cloudwatch.services.k8s.aws`, `cloudwatchlogs.services.k8s.aws`, `codeartifact.services.k8s.aws`, `cognitoidentityprovider.services.k8s.aws`, `documentdb.services.k8s.aws`, `dynamodb.services.k8s.aws`, `ec2.services.k8s.aws`, `ecr.services.k8s.aws`, `ecrpublic.services.k8s.aws`, `ecs.services.k8s.aws`, `efs.services.k8s.aws`, `eks.services.k8s.aws`, `elasticache.services.k8s.aws`, `elbv2.services.k8s.aws`, `emrcontainers.services.k8s.aws`, `eventbridge.services.k8s.aws`, `iam.services.k8s.aws`, `kafka.services.k8s.aws`, `keyspaces.services.k8s.aws`, `kinesis.services.k8s.aws`, `kms.services.k8s.aws`, `lambda.services.k8s.aws`, `memorydb.services.k8s.aws`, `mq.services.k8s.aws`, `networkfirewall.services.k8s.aws`, `opensearchservice.services.k8s.aws`, `organizations.services.k8s.aws`, `pipes.services.k8s.aws`, `prometheusservice.services.k8s.aws`, `ram.services.k8s.aws`, `rds.services.k8s.aws`, `recyclebin.services.k8s.aws`, `route53.services.k8s.aws`, `route53resolver.services.k8s.aws`, `s3.services.k8s.aws`, `s3control.services.k8s.aws`, `sagemaker.services.k8s.aws`, `secretsmanager.services.k8s.aws`, `ses.services.k8s.aws`, `sfn.services.k8s.aws`, `sns.services.k8s.aws`, `sqs.services.k8s.aws`, `ssm.services.k8s.aws`, `wafv2.services.k8s.aws`   |   `*`   |   `*`   | 
|   `coordination.k8s.io`   |   `leases`   |   `create`, `get`, `list`, `watch`   | 
|   `coordination.k8s.io`   |   `leases` （僅限特定 ACK 服務控制器租用）  |   `delete`, `update`, `patch`   | 
|  |   `events`   |   `create`, `patch`   | 
|   `apiextensions.k8s.io`   |   `customresourcedefinitions`   |   `*`   | 

## AmazonEKSArgoCDClusterPolicy
<a name="_amazoneksargocdclusterpolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSArgoCDClusterPolicy` 

此政策會授予 Argo CD 功能所需的叢集層級許可，以探索資源和管理叢集範圍物件。政策包含下列許可：

命名空間管理：
+ 建立、讀取、更新和刪除應用程式命名空間管理的命名空間。

自訂資源定義管理：
+ 管理 Argo CD 特定 CRDs（應用程式、AppProjects、ApplicationSets)。

API 探索：
+ 用於資源探索的 Kubernetes API 端點讀取存取權。

此政策旨在支援叢集層級 Argo CD 操作，包括命名空間管理和 CRD 安裝。Amazon EKS 會自動為您在建立 Argo CD 功能時提供的功能 IAM 角色建立具有此存取政策的存取項目。


| Kubernetes API 群組 | Kubernetes nonResourceURLs | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | --- | 
|  |  |   `namespaces`   |   `create`, `get`, `update`, `patch`, `delete`   | 
|   `apiextensions.k8s.io`   |  |   `customresourcedefinitions`   |   `create`   | 
|   `apiextensions.k8s.io`   |  |   `customresourcedefinitions` （僅限 Argo CD CRDs)  |   `get`, `update`, `patch`, `delete`   | 
|  |   `/api`, `/api/*`, `/apis`, `/apis/*`   |  |   `get`   | 

## AmazonEKSArgoCDPolicy
<a name="_amazoneksargocdpolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSArgoCDPolicy` 

此政策會授予 Argo CD 功能部署和管理應用程式所需的命名空間層級許可。政策包含下列許可：

秘密管理：
+ 完整存取 Git 登入資料和叢集秘密的秘密。

ConfigMap 存取：
+ 如果客戶嘗試使用不支援的 Argo CD ConfigMaps，請讀取 ConfigMaps 的存取權以傳送警告。

管理事件：
+ 讀取和建立事件以進行應用程式生命週期追蹤。

Argo CD 資源管理：
+ 應用程式、ApplicationSets 和 AppProjects 的完整存取權。
+ 管理 Argo CD 資源的最終處理者和狀態。

此政策旨在支援命名空間層級的 Argo CD 操作，包括應用程式部署和管理。Amazon EKS 會自動為您在 Argo CD 功能建立範圍為 Argo CD 命名空間時提供的功能 IAM 角色建立具有此存取政策的存取項目。


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|  |   `secrets`   |   `*`   | 
|  |   `configmaps`   |   `get`, `list`, `watch`   | 
|  |   `events`   |   `get`, `list`, `watch`, `patch`, `create`   | 
|   `argoproj.io`   |   `applications`, `applications/finalizers`, `applications/status`, `applicationsets`, `applicationsets/finalizers`, `applicationsets/status`, `appprojects`, `appprojects/finalizers`, `appprojects/status`   |   `*`   | 

## AmazonEKSKROPolicy
<a name="_amazonekskropolicy"></a>

 **ARN** – ` arn:aws: eks::aws:cluster-access-policy/AmazonEKSKROPolicy` 

此政策授予 kro (Kube Resource Orchestrator) 功能建立和管理自訂 Kubernetes APIs 所需的許可。政策包含下列許可：

kro 資源管理：
+ 完整存取所有 kro 資源，包括 ResourceGraphDefinitions 和自訂資源執行個體。

自訂資源定義管理：
+ 為 ResourceGraphDefinitions 定義的自訂 APIs建立、讀取、更新和刪除 CRDs。

領導者選擇：
+ 建立和讀取領導者選擇的協調租用。
+ 更新和刪除 kro 控制器租用。

管理事件：
+ 建立和修補 kro 操作的事件。

此政策旨在透過 kro 支援全面的資源合成和自訂 API 管理。Amazon EKS 會自動為您在建立 kro 功能時提供的功能 IAM 角色建立具有此存取政策的存取項目。


| Kubernetes API 群組 | Kubernetes 資源 | Kubernetes 動詞 (許可) | 
| --- | --- | --- | 
|   `kro.run`   |   `*`   |   `*`   | 
|   `apiextensions.k8s.io`   |   `customresourcedefinitions`   |   `*`   | 
|   `coordination.k8s.io`   |   `leases`   |   `create`, `get`, `list`, `watch`   | 
|   `coordination.k8s.io`   |   `leases` （僅限 Kro 控制器租用）  |   `delete`, `update`, `patch`   | 
|  |   `events`   |   `create`, `patch`   | 

## 存取政策更新
<a name="access-policy-updates"></a>

檢視有關存取政策更新 (自引進以來) 的詳細資訊。如需有關此頁面變更的自動提醒，請訂閱 [文件歷史紀錄](doc-history.md) 中的 RSS 摘要。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
|  新增 EKS 功能的政策  |  發佈 `AmazonEKSACKPolicy`、`AmazonEKSArgoCDPolicy`、 `AmazonEKSArgoCDClusterPolicy`和 `AmazonEKSKROPolicy`以管理 EKS 功能  |  2025 年 11 月 22 日  | 
|  加 `AmazonEKSSecretReaderPolicy`   |  為秘密的唯讀存取新增新政策  |  2025 年 11 月 6 日  | 
|  新增 EKS Cluster Insights 政策  |  發布 `AmazonEKSClusterInsightsPolicy`   |  2024 年 12 月 2 日  | 
|  新增 Amazon EKS 混合政策  |  發布 `AmazonEKSHybridPolicy`   |  2024 年 12 月 2 日  | 
|  新增 Amazon EKS 自動模式政策  |  這些存取政策提供叢集 IAM 角色和節點 IAM 角色呼叫 Kubernetes APIs許可。 AWS 使用這些許可來自動化儲存、運算和聯網資源的例行任務。  |  2024 年 12 月 2 日  | 
|  加 `AmazonEKSAdminViewPolicy`   |  新增用於擴展檢視存取權限的新政策，包含如 Secrets 等資源。  |  2024 年 4 月 23 日  | 
|  引進存取政策。  |  Amazon EKS 引進了存取政策。  |  2023 年 5 月 29 日  | 

# 變更驗證模式以使用存取項目
<a name="setting-up-access-entries"></a>

若要開始使用存取項目，您必須將叢集的身分驗證模式變更為 `API_AND_CONFIG_MAP` 或 `API` 模式。這會新增用於存取項目的 API。

## AWS 主控台
<a name="access-entries-setup-console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 選擇要在其中建立存取項目的叢集名稱。

1. 選擇**存取**索引標籤。

1. **身分驗證模式**顯示叢集目前的身分驗證模式。如果模式顯示 EKS API，則表示您已經可以新增存取項目，您可以略過餘下步驟。

1. 選擇**管理存取**。

1. 對於**叢集身分驗證模式**，請選取帶有 EKS API 的模式。請注意，您無法將身分驗證模式變更回移除 EKS API 和存取項目的模式。

1. 選擇**儲存變更**。Amazon EKS 開始更新叢集，叢集的狀態變更為「正在更新」，並且將變更記錄在**更新歷史記錄**索引標籤中。

1. 等待叢集狀態變回「作用中」。當叢集的狀態為「作用中」時，您可以依照 [建立存取項目](creating-access-entries.md) 中的步驟為 IAM 主體新增對叢集的存取權。

## AWS CLI
<a name="access-setup-cli"></a>

1. 依據《*AWS 命令列介面使用者指南*》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)內容所述，安裝 AWS CLI。

1. 執行下列命令。使用您叢集的名稱取代 *my-cluster*。如果您想永久停用 `ConfigMap` 方法，則請用 `API` 取代 `API_AND_CONFIG_MAP`。

   Amazon EKS 開始更新叢集，叢集的狀態變更為「正在更新」，並且變更記錄在 **aws eks list-updates** 中。

   ```
   aws eks update-cluster-config --name my-cluster --access-config authenticationMode=API_AND_CONFIG_MAP
   ```

1. 等待叢集狀態變回「作用中」。當叢集的狀態為「作用中」時，您可以依照 [建立存取項目](creating-access-entries.md) 中的步驟為 IAM 主體新增對叢集的存取權。

## 要求使用的平台版本
<a name="_required_platform_version"></a>

如需使用*存取項目*，叢集的平台版本必須與下表所列版本相同或更新，或是晚於表格中列出版本的 Kubernetes 版本。若未列示 Kubernetes 版本，則所有平台版本皆支援這些存取項目。


| Kubernetes 版本 | 平台版本 | 
| --- | --- | 
|  未列示  |  全部支援  | 
|   `1.30`   |   `eks.2`   | 
|   `1.29`   |   `eks.1`   | 
|   `1.28`   |   `eks.6`   | 

如需詳細資訊，請參閱 [platform-versions](https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html)。

# 建立存取項目
<a name="creating-access-entries"></a>

在建立存取項目之前，請考慮以下事項：
+ 正確設定的身分驗證模式。請參閱 [變更驗證模式以使用存取項目](setting-up-access-entries.md)。
+ *存取項目*包含一個 (且僅一個) 現有 IAM 主體的 Amazon Resource Name (ARN)。一個 IAM 主體不能包含在多個存取項目中。對於您指定的 ARN 的其他考量：
  + IAM 最佳實務建議使用具有短期憑證的 IAM *角色*存取叢集，而不是使用具有長期憑證的 IAM *使用者*進行存取。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者搭配身分提供者使用聯合功能，以便使用暫時性憑證存取 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。
  + 如果 ARN 用於 IAM 角色，則它*可以*包含路徑。`aws-auth` `ConfigMap` 項目中的 ARN 則*不能*包含路徑。例如， ARN 可以是 ` arn:aws:iam::<111122223333>:role/<development/apps/my-role>` 或 ` arn:aws:iam::<111122223333>:role/<my-role>`。
  + 如果存取項目的類型不是 `STANDARD` (請參閱與類型有關的下一個考量)，則 ARN 必須與叢集位於相同 AWS 帳戶中。如果類型為 `STANDARD`，則 ARN 可以與叢集所在之帳戶位於相同或不同的 AWS 帳戶中。
  + 建立存取項目後，您無法變更該 IAM 主體。
  + 如果您刪除具有此 ARN 的 IAM 主體，則存取項目並不會自動刪除。建議您刪除帶有您刪除之 IAM 主體的 ARN 的存取項目。如果您在不刪除存取項目的情況下重新建立 IAM 主體，則即使它具有相同的 ARN，存取項目也將無法運作。這是因為，儘管重新建立的 IAM 主體的 ARN 與此前的主體相同，但重新建立的 IAM 主體的 `roleID` 或 `userID` (您可以使用 `aws sts get-caller-identity` AWS CLI 命令查看) 與原始 IAM 主體的不同。即使您看不到存取項目的 IAM 主體 `roleID` 或 `userID`，Amazon EKS 也會將其與存取項目一起儲存。
+ 每個存取項目都有一種*類型*。存取項目的類型取決於與其關聯的資源類型，並不定義許可。如果您不指定類型，則 Amazon EKS 會自動將類型設為 `STANDARD` 
  +  `EC2_LINUX` - 用於與 Linux 或 Bottlerocket 自我管理的節點搭配使用的 IAM 角色
  +  `EC2_WINDOWS` - 用於與 Windows 自我管理的節點搭配使用的 IAM 角色
  +  `FARGATE_LINUX` - 用於與 AWS Fargate (Fargate) 搭配使用的 IAM 角色
  +  `HYBRID_LINUX` - 用於與混合節點搭配使用的 IAM 角色
  +  `STANDARD` - 未指定類型時為預設類型
  +  `EC2` - 適用於 EKS 自動模式自訂節點類別。如需詳細資訊，請參閱 [建立節點類別存取項目](create-node-class.md#auto-node-access-entry)。
  + 建立存取項目後，您無法變更類型。
+ 無需為用於受管節點群組或 Fargate 設定檔的 IAM 角色建立存取項目。EKS 將建立存取項目 (如果啟用)，或更新身分驗證組態映射 (如果存取項目不可用)
+ 如果某個存取項目的類型為 `STANDARD`，則可以為其指定一個使用者名稱**。如果您沒有指定使用者名稱的值，Amazon EKS 會根據存取項目的類型以及您指定的 IAM 主體是 IAM 角色還是 IAM 使用者，設定下列其中一個值。除非您有特定原因需要自己指定使用者名稱，否則建議您不要指定使用者名稱，而是讓 Amazon EKS 自動為您產生該使用者名稱。如果您自己指定使用者名稱：
  + 該名稱不能以 `system:`、`eks:`、`aws:`、`amazon:` 或 `iam:` 開頭。
  + 如果該使用者名稱用於 IAM 角色，則建議您在末尾新增 `{{SessionName}}` 或 `{{SessionNameRaw}}`。如果將 `{{SessionName}}` 或 `{{SessionNameRaw}}` 新增至使用者名稱，則必須在 \$1\$1SessionName\$1\$1 *之前*必須有冒號。該角色被擔任時，指定的 AWS STS 工作階段名稱會自動傳遞到叢集，並將顯示在 CloudTrail 日誌中。例如，使用者名稱不能為 `john{{SessionName}}`。使用者名稱必須為 `:john{{SessionName}}` 或 `jo:hn{{SessionName}}`。冒號只需位於 `{{SessionName}}` 之前。以下資料表中 Amazon EKS 產生的使用者名稱包含 ARN。由於 ARN 包含冒號，因此它符合此項要求。如果使用者名稱中不包含 `{{SessionName}}`，則不需要冒號。請注意，在 `{{SessionName}}` 中，特殊字元 "@" 在工作階段名稱中會被取代為 "-"。`{{SessionNameRaw}}` 會保留工作階段名稱中的所有特殊字元。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/creating-access-entries.html)

    建立存取項目後，您可以對使用者名稱進行變更。
+ 如果某個存取項目的類型為 `STANDARD`，且您希望使用 Kubernetes RBAC 授權，則可以在該存取項目中新增一個或多個*群組名稱*。建立存取項目後，您可以新增和移除群組名稱。為了使 IAM 主體能夠存取叢集上的 Kubernetes 物件，您必須建立和管理 Kubernetes 角色型授權 (RBAC) 物件。在您的叢集上建立 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 物件，並將群組名稱指定為 `kind: Group` 的 `subject`。Kubernetes 會授權 IAM 主體存取您在 Kubernetes `Role` 或 `ClusterRole` 物件中指定的任何叢集物件，這些物件您也在繫結的 `roleRef` 中指定了。如果您指定群組名稱，則建議您熟悉 Kubernetes role-based 角色型授權 (RBAC) 物件。如需詳細資訊，請參閱 Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。
**重要**  
Amazon EKS 不會確認叢集上存在的任何 Kubernetes RBAC 物件是否包含您指定的任何群組名稱。例如，如果您為目前不存在的群組建立存取項目，EKS 將會建立該群組，而不是傳回錯誤。

  您可以將 Amazon EKS *存取政策*關聯到存取項目，而不是讓 Kubernetes 授權 IAM 主體存取叢集上的 Kubernetes 物件。Amazon EKS 授權 IAM 主體使用存取政策中的許可存取叢集上的 Kubernetes 物件。您可以將存取政策的許可範圍限定為您指定的 Kubernetes 命名空間。使用存取政策無需您管理 Kubernetes RBAC 物件。如需詳細資訊，請參閱 [將存取政策與存取項目建立關聯](access-policies.md)。
+ 如果您建立類型為 `EC2_LINUX` 或 `EC2_Windows` 的存取項目，則建立該存取項目的 IAM 主體必須具有 `iam:PassRole` 許可。如需詳細資訊，請參閱《IAM 使用者指南》**中的[授予使用者將角色傳遞至 AWS 服務的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。
+ 與標準 [IAM 行為](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency)類似，存取項目的建立和更新採用最終一致模式，在初始 API 呼叫成功返回後可能需要幾秒鐘才能生效。您設計的應用程式必須能夠處理這些可能的延遲問題。建議您不要在應用程式的關鍵、高可用性程式碼路徑中包含存取項目建立或更新動作。而應在不常運作的、單獨的初始化或設定常式中進行 更改。另外，在生產工作流程套用這些變更之前，請務必確認變更已傳播完畢。
+ 存取項目不支援[服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。您無法建立主體 ARN 是服務連結角色的存取項目。您可以透過其 ARN 識別服務連結角色，其格式為 ` arn:aws:iam::*:role/aws-service-role/*`。

您可以使用 AWS 管理主控台 或 AWS CLI 建立存取項目。

## AWS 管理主控台
<a name="access-create-console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 選擇要在其中建立存取項目的叢集名稱。

1. 選擇**存取**索引標籤。

1. 選擇**建立存取項目**。

1. 對於 **IAM 主體**，選取現有 IAM 角色或使用者。IAM 最佳實務建議使用具有短期憑證的 IAM *角色*存取叢集，而不是使用具有長期憑證的 IAM *使用者*進行存取。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者搭配身分提供者使用聯合功能，以便使用暫時性憑證存取 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

1. 對於**類型**，如果存取項目針對用於自我管理 Amazon EC2 節點的節點角色，請選取 **EC2 Linux** 或 **EC2 Windows**。否則，請接受預設值 (**標準**)。

1. 如果您選擇的**類型**是**標準**並且您想要指定**使用者名稱**，則請輸入使用者名稱。

1. 如果您選擇的**類型**是**標準**並且您想要對 IAM 主體使用 Kubernetes RBAC 授權，則請為**群組**指定一個或多個名稱。如果不指定任何群組名稱並希望使用 Amazon EKS 授權，則您可以在後續步驟中或在建立存取項目後關聯存取政策。

1. (選用) 您可以使用**標籤**為存取項目指派標籤。例如，為了更輕鬆地找到具有相同標籤的所有資源而指定標籤。

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

1. 在**新增存取政策**頁面上，如果您選擇的類型是**標準**並且希望 Amazon EKS 授予該 IAM 主體對叢集上的 Kubernetes 物件的許可，請完成下列步驟。否則請選擇 **Next (下一步)**。/

   1. 對於**政策名稱**，請選擇存取政策。您無法檢視存取政策的許可，但其包含與 Kubernetes 面向使用者之 `ClusterRole` 物件中的許可類似的許可。如需詳細資訊，請參閱 Kubernetes 文件中的 [User-facing roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) 一節。

   1. 請選擇下列其中一個選項：
      +  **叢集**：如果您希望 Amazon EKS 授予該 IAM 主體存取政策中針對叢集上所有 Kubernetes 物件的許可，請選擇此選項。
      +  **Kubernetes 命名空間**：如果您希望 Amazon EKS 授予該 IAM 主體存取政策中針對叢集上特定 Kubernetes 命名空間中所有 Kubernetes 物件的許可，則請選擇此選項。對於**命名空間**，請輸入叢集上 Kubernetes 命名空間的名稱。如果要新增其他命名空間，則請選擇**新增命名空間**並輸入命名空間名稱。

   1. 如果要新增其他政策，則請選擇**新增政策**。您可以對每個政策設定不同的範圍，但每個政策只能新增一次。

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

1. 檢查存取項目的組態。如果有任何內容看起來不正確，請選擇**上一步**以返回上一步並修正錯誤。如果組態正確，請選擇**建立**。

## AWS CLI
<a name="access-create-cli"></a>

1. 依據《AWS 命令列介面使用者指南》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)內容所述，安裝 AWS CLI。

1. 要建立存取項目，您可以使用以下任何範例來建立存取項目：
   + 為自我管理的 Amazon EC2 Linux 節點群組建立存取項目。用您的叢集名稱取代 *my-cluster*，用您的 AWS 帳戶 ID 取代 *111122223333*，並用您的[節點 IAM 角色](create-node-role.md)的名稱取代 *EKS-my-cluster-self-management-ng-1*。如果節點群組是 Windows 節點群組，請用 `EC2_Windows` 取代 *EC2\$1LINUX*。

     ```
     aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/EKS-my-cluster-self-managed-ng-1 --type EC2_LINUX
     ```

     當指定 `STANDARD` 以外的類型時，則不能使用 `--kubernetes-groups` 選項。您無法將存取政策與此存取項目關聯，因為其類型是 `STANDARD` 以外的值。
   + 建立這樣的一個存取項目：允許一個未用於 Amazon EC2 自我管理節點群組且您希望 Kubernetes 透過其授予對叢集的存取權的 IAM 角色。用您的叢集名稱取代 *my-cluster*，用您的 AWS 帳戶 ID 取代 *111122223333*，並用您的 IAM 角色名稱取代 *my-role*。用您在叢集上的 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 物件中指定的群組名稱取代 *Viewers*。

     ```
     aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role --type STANDARD --user Viewers --kubernetes-groups Viewers
     ```
   + 建立一個允許 IAM 使用者向叢集進行身分驗證的存取項目。在此提供此範例只是為了說明這種可能性。IAM 最佳實務建議使用具有短期憑證的 IAM *角色*存取叢集，而不是使用具有長期憑證的 IAM *使用者*進行存取。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者搭配身分提供者使用聯合功能，以便使用暫時性憑證存取 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

     ```
     aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:user/my-user --type STANDARD --username my-user
     ```

     如果您希望此使用者對叢集的存取許可高於 Kubernetes API 探索角色中的許可，則您需要將存取政策關聯到該存取項目，因為不使用 `--kubernetes-groups` 選項。如需詳細資訊，請參閱 Kubernetes 文件中的 [將存取政策與存取項目建立關聯](access-policies.md) 以及 [API discovery roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#discovery-roles) 兩節。

# 更新存取項目
<a name="updating-access-entries"></a>

您可以使用 AWS 管理主控台 或 AWS CLI 來更新存取項目。

## AWS 管理主控台
<a name="access-update-console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 選擇要在其中建立存取項目的叢集名稱。

1. 選擇**存取**索引標籤。

1. 選擇要更新的存取項目。

1. 選擇**編輯**。

1. 對於**使用者名稱**，您可以變更現有值。

1. 對於**群組**，您可以移除現有群組名稱或新增群組名稱。如果存在以下群組名稱，請勿將其移除：**system:nodes** 或 **system:bootstrappers**。移除這些群組可能會導致叢集無法正常運作。如果您不指定任何群組名稱並希望使用 Amazon EKS 授權，請在後續步驟中關聯[存取政策](access-policies.md)。

1. 您可以使用**標籤**為存取項目指派標籤。例如，為了更輕鬆地找到具有相同標籤的所有資源而指定標籤。您也可以移除現有的標籤。

1. 選擇**儲存變更**。

1. 如果您想要將存取政策關聯到項目，請參閱 [將存取政策與存取項目建立關聯](access-policies.md)。

## AWS CLI
<a name="access-update-cli"></a>

1. 依據《AWS 命令列介面使用者指南》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)內容所述，安裝 AWS CLI。

1. 如需更新存取項目，使用您的叢集名稱取代 *my-cluster*，使用您的 AWS 帳戶 ID 取代 *111122223333*，並使用您的 IAM 角色名稱取代 *EKS-my-cluster-my-namespace-Viewers*。

   ```
   aws eks update-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/EKS-my-cluster-my-namespace-Viewers --kubernetes-groups Viewers
   ```

   如果存取項目類型是 `STANDARD` 以外的值，則不能使用 `--kubernetes-groups` 選項。您也無法將存取政策與 `STANDARD` 以外的類型的存取項目關聯。

# 刪除存取項目
<a name="deleting-access-entries"></a>

如果您發現某個存取項目被錯誤刪除，則您可以隨時重新建立。如果您要刪除的存取項目與任何存取政策關聯，則這些關聯將自動刪除。在刪除存取項目之前，您不必取消其與存取政策的關聯。

您可以使用 AWS 管理主控台 或 AWS CLI 刪除存取項目。

## AWS 管理主控台
<a name="access-delete-console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 選擇要從中刪除存取項目之叢集的名稱。

1. 選擇**存取**索引標籤。

1. 在**存取項目**清單中，選擇要刪除的存取項目。

1. 選擇 Delete (刪除)。

1. 在確認對話方塊中，選擇 **Delete** (刪除)。

## AWS CLI
<a name="access-delete-cli"></a>

1. 依據《AWS 命令列介面使用者指南》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)內容所述，安裝 AWS CLI。

1. 要刪除存取項目，用您的叢集名稱取代 *my-cluster*，用您的 AWS 帳戶 ID 取代 *111122223333*，並用您不想再讓其存取叢集的 IAM 角色的名稱取代 *my-role*。

   ```
   aws eks delete-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role
   ```

# 針對 EKS 存取項目設定自訂使用者名稱
<a name="set-custom-username"></a>

針對 Amazon EKS 建立存取項目時，您可使用自動生成的使用者名稱，或者指定自訂使用者名稱。此頁面詳細說明了這兩種選項，並引導您設定自訂使用者名稱。

## 概觀
<a name="_overview"></a>

存取項目中的使用者名稱用於辨識 Kubernetes 日誌與稽核線索中的 IAM 主體。Amazon EKS 預設會依據 IAM 身分的 ARN，來生成使用者名稱，但您可根據需要指定自訂使用者名稱。

## 預設使用者名稱生成
<a name="_default_username_generation"></a>

若您未指定使用者名稱的值，Amazon EKS 會依據 IAM 身分自動生成使用者名稱：
+  **對於 IAM 使用者**：
  + EKS 將 Kubernetes 使用者名稱設定為 IAM 使用者的 ARN
  + 範例：

    ```
    {arn-aws}iam::<111122223333>:user/<my-user>
    ```
+  **對於 IAM 角色**：
  + EKS 依據 IAM 角色 ARN 來設定 Kubernetes 使用者名稱
  + 角色被擔任時的 STS ARN。Amazon EKS 將 `{{SessionName}}` 附加到角色。如果您指定的角色的 ARN 包含路徑，則 Amazon EKS 會將其從產生的使用者名稱中移除。
  + 範例：

    ```
    {arn-aws}sts::<111122223333>:assumed-role/<my-role>/{{SessionName}}
    ```

除非您有特定原因需要自己指定使用者名稱，否則建議您不要指定使用者名稱，而是讓 Amazon EKS 自動為您產生該使用者名稱。

## 設定自訂使用者名稱
<a name="_setting_a_custom_username"></a>

建立存取項目後，您可藉助 `--username` 參數來指定自訂使用者名稱：

```
aws eks create-access-entry --cluster-name <cluster-name> --principal-arn <iam-identity-arn> --type STANDARD --username <custom-username>
```

### 自訂使用者名稱要求
<a name="_requirements_for_custom_usernames"></a>

若指定自訂使用者名稱：
+ 使用者名稱的開頭不能為 `system:`、`eks:`、`aws:`、`amazon:` 或 `iam:`。
+ 如果該使用者名稱用於 IAM 角色，則建議您在末尾新增 `{{SessionName}}` 或 `{{SessionNameRaw}}`。
  + 如果將 `{{SessionName}}` 或 `{{SessionNameRaw}}` 新增至使用者名稱，則必須在 \$1\$1SessionName\$1\$1 *之前*必須有冒號。

# 使用存取政策與 AWS CLI 為 IAM 角色或使用者建立存取項目
<a name="create-standard-access-entry-policy"></a>

建立 Amazon EKS 存取項目，這些項目使用 AWS 受管 EKS 存取政策，以授予 IAM 身分標準化許可來存取和管理 Kubernetes 叢集。

## 概觀
<a name="_overview"></a>

Amazon EKS 中的存取項目會定義了 IAM 身分 (使用者和角色) 如何存取您的 Kubernetes 叢集並與其互動。透過建立具有 EKS 存取政策的存取項目，您可以：
+ 授予特定 IAM 使用者或角色存取 EKS 叢集的許可
+ 使用 AWS 管理的 EKS 存取政策來控制許可，這些政策提供標準化的預先定義許可集
+ 將許可範圍限定於特定命名空間或整個叢集
+ 簡化存取管理，無需修改 `aws-auth` ConfigMap 或建立 Kubernetes RBAC 資源
+ 使用 AWS 整合的方法進行 Kubernetes 存取控制，涵蓋常見的使用案例，同時維護安全性最佳實踐

此方法適用於大多數使用案例，因為它提供了 AWS 管理的標準化許可，而無需手動設定 Kubernetes RBAC。EKS 存取政策無需手動設定 Kubernetes RBAC 資源，並提供涵蓋常見使用案例的預定義許可集。

## 先決條件
<a name="_prerequisites"></a>
+ 您的叢集*身分驗證模式*必須設定為啟用*存取項目*。如需詳細資訊，請參閱 [變更驗證模式以使用存取項目](setting-up-access-entries.md)。
+ 依據《AWS 命令列介面使用者指南》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)內容所述，安裝與設定 AWS CLI。

## 步驟 1：定義存取項目
<a name="ap1-s1"></a>

1. 尋找您要授予許可的 IAM 身分的 ARN，如使用者或角色。
   + 每個 IAM 身分只能有一個 EKS 存取項目。

1. 確定您希望 Amazon EKS 存取政策許可僅適用於特定的 Kubernetes 命名空間，還是跨整個叢集。
   + 如果您想將許可限制在特定命名空間，請記下命名空間名稱。

1. 為 IAM 身分選擇所需的 EKS 存取政策。此政策授予叢集內許可。記下政策的 ARN。
   + 有關政策列表，請參閱[可用的存取政策](access-policy-permissions.md)。

1. 判斷自動產生的使用者名稱是否適合該存取項目，或者您是否需要手動指定使用者名稱。
   +  AWS 會根據 IAM 身分自動產生此值。您可設定自訂使用者名稱。這在 Kubernetes 日誌中可見。
   + 如需詳細資訊，請參閱 [針對 EKS 存取項目設定自訂使用者名稱](set-custom-username.md)。

## 步驟 2：建立存取項目
<a name="ap1-s2"></a>

規劃存取項目之後，使用 AWS CLI 來建立該項目。

以下範例涵蓋大多數使用案例。[檢視全部組態選項的 CLI 參考](https://docs.aws.amazon.com/cli/latest/reference/eks/create-access-entry.html)。

您將在下一步驟中附加存取政策。

```
aws eks create-access-entry --cluster-name <cluster-name> --principal-arn <iam-identity-arn> --type STANDARD
```

## 步驟 3：關聯存取政策
<a name="_step_3_associate_access_policy"></a>

根據您是否希望政策限制於指定的 Kubernetes 命名空間，指令會有所不同。

您需要存取政策的 ARN。檢視[可用的存取政策](access-policy-permissions.md)。

### 建立無命名空間範圍的政策
<a name="_create_policy_without_namespace_scope"></a>

```
aws eks associate-access-policy --cluster-name <cluster-name> --principal-arn <iam-identity-arn> --policy-arn <access-policy-arn>
```

### 使用命名空間範圍建立
<a name="_create_with_namespace_scope"></a>

```
aws eks associate-access-policy --cluster-name <cluster-name> --principal-arn <iam-identity-arn> \
    --access-scope type=namespace,namespaces=my-namespace1,my-namespace2 --policy-arn <access-policy-arn>
```

## 後續步驟
<a name="_next_steps"></a>
+  [建立 kubeconfig，以便您可以將 kubectl 與 IAM 身分搭配使用](create-kubeconfig.md) 

# 透過 AWS CLI 使用 Kubernetes 群組建立存取項目
<a name="create-k8s-group-access-entry"></a>

建立使用 Kubernetes 群組進行授權且需要手動 RBAC 組態的 Amazon EKS 存取項目。

**注意**  
對於大多數使用案例，我們建議使用 EKS 存取政策，而非本頁所述的 Kubernetes 群組方法。EKS 存取政策提供更簡單、更加整合 AWS 的方法來管理存取，無需手動 RBAC 組態。僅當您需要比 EKS 存取政策提供更精細的控制時，才使用 Kubernetes 群組方法。

## 概觀
<a name="_overview"></a>

存取項目定義了 IAM 身分 (使用者和角色) 如何存取您的 Kubernetes 叢集。Kubernetes 群組方法透過標準 Kubernetes RBAC 群組，授予 IAM 使用者或角色存取 EKS 叢集的許可。此方法需建立並管理 Kubernetes RBAC 資源 (Role、RoleBinding、ClusterRole 及 ClusterRoleBinding)，建議在下列情境使用：需要高度自訂的許可集合、有複雜的授權需求，或希望在混合式 Kubernetes 環境中維持一致的存取控制模式。

本主題不涵蓋為「用於讓 Amazon EC2 執行個體加入 EKS 叢集」的 IAM 身分建立存取項目。

## 先決條件
<a name="_prerequisites"></a>
+ 您的叢集*身分驗證模式*必須設定為啟用*存取項目*。如需詳細資訊，請參閱 [變更驗證模式以使用存取項目](setting-up-access-entries.md)。
+ 依據《AWS 命令列介面使用者指南》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)內容所述，安裝與設定 AWS CLI。
+ 建議熟悉 Kubernetes RBAC。如需詳細資訊，請參閱 Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。

## 步驟 1：定義存取項目
<a name="k8s-group-s1"></a>

1. 尋找您要授予許可的 IAM 身分的 ARN，如使用者或角色。
   + 每個 IAM 身分只能有一個 EKS 存取項目。

1. 決定要與此 IAM 身分建立關聯的 Kubernetes 群組。
   + 您將需要建立或使用現有的 Kubernetes `Role`/`ClusterRole` 和 `RoleBinding`/`ClusterRoleBinding` 資源，這些資源需引用這些群組。

1. 判斷自動產生的使用者名稱是否適合該存取項目，或者您是否需要手動指定使用者名稱。
   +  AWS 會根據 IAM 身分自動產生此值。您可設定自訂使用者名稱。這在 Kubernetes 日誌中可見。
   + 如需詳細資訊，請參閱 [針對 EKS 存取項目設定自訂使用者名稱](set-custom-username.md)。

## 步驟 2：使用 Kubernetes 群組建立存取項目
<a name="k8s-group-s2"></a>

規劃存取項目之後，使用 AWS CLI 以適當的 Kubernetes 群組建立該項目。

```
aws eks create-access-entry --cluster-name <cluster-name> --principal-arn <iam-identity-arn> --type STANDARD --kubernetes-groups <groups>
```

取代：
+  `<cluster-name>` 為您的 EKS 叢集名稱
+  `<iam-identity-arn>` 為 IAM 使用者或角色的 ARN
+  `<groups>` 為以逗號分隔的 Kubernetes 群組清單 (例如 "system:developers,system:readers")

 [檢視全部組態選項的 CLI 參考](https://docs.aws.amazon.com/cli/latest/reference/eks/create-access-entry.html)。

## 步驟 3：設定 Kubernetes RBAC
<a name="_step_3_configure_kubernetes_rbac"></a>

為了讓 IAM 主體能夠存取您叢集上的 Kubernetes 物件，您必須建立和管理 Kubernetes 角色型存取控制 (RBAC) 物件：

1. 建立定義許可的 Kubernetes `Role` 或 `ClusterRole` 物件。

1. 在您的叢集上建立 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 物件，並將群組名稱指定為 `kind: Group` 的 `subject`。

有關在 Kubernetes 中設定群組和許可的詳細資訊，請參閱 Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。

## 後續步驟
<a name="_next_steps"></a>
+  [建立 kubeconfig，以便您可以將 kubectl 與 IAM 身分搭配使用](create-kubeconfig.md) 

# 透過 ConfigMap 授予 IAM 使用者存取 Kubernetes 的權限
<a name="auth-configmap"></a>

**重要**  
`aws-auth ConfigMap` 已棄用。如需管理 Kubernetes API 存取權的建議方法，請參閱 [使用 EKS 存取項目授予 IAM 使用者 Kubernetes 的存取權](access-entries.md)。

[適用於 Kubernetes 的AWS IAM 驗證器](https://github.com/kubernetes-sigs/aws-iam-authenticator#readme)在 Amazon EKS 控制平面上執行，可以使用 [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)啟用對叢集的存取權。驗證器會從 `aws-auth` `ConfigMap` 獲得其組態資訊。如需所有 `aws-auth` `ConfigMap` 設定的詳細資訊，請參閱 GitHub 上的[完整組態格式](https://github.com/kubernetes-sigs/aws-iam-authenticator#full-configuration-format)。

## 將 IAM 主體新增至 Amazon EKS 叢集
<a name="aws-auth-users"></a>

當您建立 Amazon EKS 叢集時，建立該叢集的 [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)會由 Amazon EKS 控制平面中叢集的角色型存取控制 (RBAC) 組態來自動授予 `system:masters` 許可。此主體不會出現在任何可見的組態中，因此請務必記下最初建立叢集的主體。若要賦予其他 IAM 主體與叢集互動的能力，您必須編輯 Kubernetes 中的 `aws-auth ConfigMap` 並用 `group` 的名稱建立一個 Kubernetes `rolebinding` 或 `clusterrolebinding`，其名稱是您在 `aws-auth ConfigMap` 中指定的名稱。

**注意**  
如需有關 Kubernetes 角色型存取控制 (RBAC) 組態的詳細資訊，請參閱 Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。

1. 判斷 `kubectl` 正使用哪些憑證來存取叢集。您可以在電腦上透過一下命令查看 `kubectl` 正在使用的憑證。如果不使用預設路徑，則使用 `kubeconfig` 檔案的路徑取代 *\$1/.kube/config–*。

   ```
   cat ~/.kube/config
   ```

   範例輸出如下。

   ```
   [...]
   contexts:
   - context:
       cluster: my-cluster.region-code.eksctl.io
       user: admin@my-cluster.region-code.eksctl.io
     name: admin@my-cluster.region-code.eksctl.io
   current-context: admin@my-cluster.region-code.eksctl.io
   [...]
   ```

   在前述範例輸出中，已針對名為 *my-cluster* 的叢集設定名為 *admin* 的使用者的憑證。若該叢集是由這名使用者建立，則其已擁有您叢集的存取權。若叢集不是由此使用者建立，則您需要完成剩餘的步驟，才能為其他 IAM 主體啟用叢集存取權。[IAM 最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)建議您將許可授予角色而非使用者。您可以使用以下命令查看目前哪些其他主體可以存取您的叢集：

   ```
   kubectl describe -n kube-system configmap/aws-auth
   ```

   範例輸出如下。

   ```
   Name:         aws-auth
   Namespace:    kube-system
   Labels:       <none>
   Annotations:  <none>
   
   Data
   ====
   mapRoles:
   ----
   - groups:
     - system:bootstrappers
     - system:nodes
     rolearn: arn:aws: iam::111122223333:role/my-node-role
     username: system:node:{{EC2PrivateDNSName}}
   
   
   BinaryData
   ====
   
   Events:  <none>
   ```

   上一個範例是預設的 `aws-auth` `ConfigMap`。只有節點執行個體角色有權存取叢集。

1. 請確定您現有的 Kubernetes `roles` 和 `rolebindings` 或 `clusterroles` 和 `clusterrolebindings` (您可以將 IAM 主體映射至此)。如需有關這些資源的詳細資訊，請參閱 Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。

   1. 檢視您現有的 Kubernetes `roles` 或 `clusterroles`。`Roles` 的作用域為 `namespace`，但 `clusterroles` 的作用域限定為叢集。

      ```
      kubectl get roles -A
      ```

      ```
      kubectl get clusterroles
      ```

   1. 檢視先前輸出中傳回的任何 `role` 或 `clusterrole` 的詳細資訊，並確認其具有您希望 IAM 主體在叢集中擁有的許可 (`rules`)。

      將 *role-name* 取代為上一個命令的輸出中傳回的 `role` 名稱。將 *kube-system* 取代為 `role` 的命名空間。

      ```
      kubectl describe role role-name -n kube-system
      ```

      將 *cluster-role-name* 取代為上一個命令的輸出中傳回的 `clusterrole` 名稱。

      ```
      kubectl describe clusterrole cluster-role-name
      ```

   1. 檢視您現有的 Kubernetes `rolebindings` 或 `clusterrolebindings`。`Rolebindings` 的作用域為 `namespace`，但 `clusterrolebindings` 的作用域限定為叢集。

      ```
      kubectl get rolebindings -A
      ```

      ```
      kubectl get clusterrolebindings
      ```

   1. 檢視任何 `rolebinding` 或 `clusterrolebinding` 的詳細資訊，並確認其具有上一步中列為 `roleRef` 的 `role` 或 `clusterrole`，以及為 `subjects` 列出的群組名稱。

      將 *role-binding-name* 取代為上一個命令的輸出中傳回的 `rolebinding` 名稱。將 *kube-system* 取代為 `rolebinding` 的 `namespace`。

      ```
      kubectl describe rolebinding role-binding-name -n kube-system
      ```

      範例輸出如下。

      ```
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: eks-console-dashboard-restricted-access-role-binding
        namespace: default
      subjects:
      - kind: Group
        name: eks-console-dashboard-restricted-access-group
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: Role
        name: eks-console-dashboard-restricted-access-role
        apiGroup: rbac.authorization.k8s.io
      ```

      將 *cluster-role-binding-name* 取代為上一個命令的輸出中傳回的 `clusterrolebinding` 名稱。

      ```
      kubectl describe clusterrolebinding cluster-role-binding-name
      ```

      範例輸出如下。

      ```
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: eks-console-dashboard-full-access-binding
      subjects:
      - kind: Group
        name: eks-console-dashboard-full-access-group
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: eks-console-dashboard-full-access-clusterrole
        apiGroup: rbac.authorization.k8s.io
      ```

1. 編輯 `aws-auth` `ConfigMap`。您可以使用例如 `eksctl` 的工具來更新 `ConfigMap`，或者您可以透過編輯來手動更新它。
**重要**  
我們建議您使用 `eksctl` 或其他工具來編輯 `ConfigMap`。如需有關您可使用的其他工具的資訊，請參閱《Amazon EKS 最佳實務指南》中的[使用工具對 aws-authConfigMap 進行變更](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#use-tools-to-make-changes-to-the-aws-auth-configmap)。格式錯誤的 `aws-auth` `ConfigMap`可能會導致您失去叢集存取權。
   + 檢視[使用 eksctl 編輯 configmap](#configmap-eksctl) 的步驟。
   + 檢視[手動編輯 configmap ma](#configmap-manual) 的步驟。

### 使用 Eksctl 編輯 Configmap
<a name="configmap-eksctl"></a>

1. 您需要在裝置`0.215.0`或 AWS CloudShell 上安裝版本 或更新版本的`eksctl`命令列工具。如需有關安裝或更新 `eksctl` 的指示，請參閱 `eksctl` 文件中的[安裝](https://eksctl.io/installation)一節。

1. 在 `ConfigMap` 檢視目前的映射項目。使用您叢集的名稱取代 *my-cluster*。將 *region-code* 取代為您的叢集所在的 AWS 區域。

   ```
   eksctl get iamidentitymapping --cluster my-cluster --region=region-code
   ```

   範例輸出如下。

   ```
   ARN                                                                                             USERNAME                                GROUPS                          ACCOUNT
   arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA    system:node:{{EC2PrivateDNSName}}       system:bootstrappers,system:nodes
   ```

1. 為角色新增映射項目。將 *my-group* 取代為您的角色名稱。將 *eks-console-dashboard-full-access-group* 取代為您的 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 物件中指定的群組名稱。使用您的帳戶 ID 取代 *111122223333*。您可以將 *admin* 取代為您選擇的任何名稱。

   ```
   eksctl create iamidentitymapping --cluster my-cluster --region=region-code \
       --arn arn:aws: iam::111122223333:role/my-role --username admin --group eks-console-dashboard-full-access-group \
       --no-duplicate-arns
   ```
**重要**  
角色 ARN 不能包含例如 `role/my-team/developers/my-role` 的路徑。ARN 的格式必須是 ` arn:aws: iam::111122223333:role/my-role `。在此範例中，需移除 `my-team/developers/`。

   範例輸出如下。

   ```
   [...]
   2022-05-09 14:51:20 [ℹ]  adding identity "{arn-aws}iam::111122223333:role/my-role" to auth ConfigMap
   ```

1. 為使用者新增映射項目。[IAM 最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)建議您將許可授予角色而非使用者。將 *my-user* 取代為您的使用者名稱。將 *eks-console-dashboard-restricted-access-group* 取代為您的 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 物件中指定的群組名稱。使用您的帳戶 ID 取代 *111122223333*。您可以將 *my-user* 取代為您選擇的任何名稱。

   ```
   eksctl create iamidentitymapping --cluster my-cluster --region=region-code \
       --arn arn:aws: iam::111122223333:user/my-user --username my-user --group eks-console-dashboard-restricted-access-group \
       --no-duplicate-arns
   ```

   範例輸出如下。

   ```
   [...]
   2022-05-09 14:53:48 [ℹ]  adding identity "arn:aws: iam::111122223333:user/my-user" to auth ConfigMap
   ```

1. 再次檢視 `ConfigMap` 中的映射項目。

   ```
   eksctl get iamidentitymapping --cluster my-cluster --region=region-code
   ```

   範例輸出如下。

   ```
   ARN                                                                                             USERNAME                                GROUPS                                  ACCOUNT
   arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA    system:node:{{EC2PrivateDNSName}}       system:bootstrappers,system:nodes
   arn:aws: iam::111122223333:role/admin                                                            my-role                                 eks-console-dashboard-full-access-group
   arn:aws: iam::111122223333:user/my-user                                                          my-user                                 eks-console-dashboard-restricted-access-group
   ```

### 手動編輯 Configmap
<a name="configmap-manual"></a>

1. 開啟 `ConfigMap` 進行編輯。

   ```
   kubectl edit -n kube-system configmap/aws-auth
   ```
**注意**  
若您收到錯誤訊息，指出「`Error from server (NotFound): configmaps "aws-auth" not found`」，請使用[將 aws-auth   ConfigMap 套用至您的叢集](#aws-auth-configmap)中的程序套用庫存 `ConfigMap`。

1. 將您的 IAM 主體新增至 `ConfigMap`。IAM 群組不是 IAM 主體，因此無法新增至 `ConfigMap`。
   +  **新增 IAM 角色 (例如：為[聯合身分使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html))**：在 `data` 下位於 `ConfigMap` 中的 `mapRoles` 區段新增角色詳細資訊。若此區段在檔案不存在，則將其新增。每個項目支援以下參數：
     +  **rolearn**：要新增的 IAM 角色之 ARN。此值不能包含路徑。例如，您無法指定 ARN (如 ` arn:aws: iam::111122223333:role/my-team/developers/role-name `)。ARN 需要改為 ` arn:aws: iam::111122223333:role/role-name `。
     +  **username**：Kubernetes 內映射至 IAM 角色的使用者名稱。
     +  **群組**：要將角色映射到的 Kubernetes 群組的群組或清單。群組可以是預設群組，也可以是 `clusterrolebinding` 或 `rolebinding` 中指定的群組。如需詳細資訊，請參閱 Kubernetes 文件中的[預設角色和角色連結](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#default-roles-and-role-bindings)。
   +  **若要新增 IAM 使用者：**[IAM 最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)建議您將許可授予角色而非使用者。將使用者詳細資訊新增至 `ConfigMap` 的 `mapUsers` 區段 (在 `data` 下方)。若此區段在檔案不存在，則將其新增。每個項目支援以下參數：
     +  **userarn**：要新增之 IAM 使用者的 ARN。
     +  **username**：Kubernetes 內應設至 IAM 使用者的使用者名稱。
     +  **群組**：要將使用者映射到的 Kubernetes 群組的群組或清單。群組可以是預設群組，也可以是 `clusterrolebinding` 或 `rolebinding` 中指定的群組。如需詳細資訊，請參閱 Kubernetes 文件中的[預設角色和角色連結](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#default-roles-and-role-bindings)。

1. 例如，下列的 YAML 區塊包含：
   + `mapRoles` 區段，將 IAM 節點執行個體映射至 Kubernetes 群組，讓節點可以將自己註冊到叢集，以及 `my-console-viewer-role` IAM 角色，映射至 Kubernetes 群組，可以檢視所有叢集的所有 Kubernetes 資源。如需 `my-console-viewer-role` IAM 角色所需的 IAM 和 Kubernetes 群組許可的清單，請參閱 [所需的許可](view-kubernetes-resources.md#view-kubernetes-resources-permissions)。
   + 將 `admin` IAM 使用者從預設 AWS 帳戶映射至 `system:masters` Kubernetes 群組，以及將`my-user`使用者從映射至可檢視特定命名空間 Kubernetes 資源之 Kubernetes 群組的不同 AWS 帳戶映射的`mapUsers`區段。如需 `my-user` IAM 使用者所需的 IAM 和 Kubernetes 群組許可的清單，請參閱 [所需的許可](view-kubernetes-resources.md#view-kubernetes-resources-permissions)。

     根據需要新增或移除行，並將所有範例值取代為您自己的值。

     ```
     # Please edit the object below. Lines beginning with a '#' will be ignored,
     # and an empty file will abort the edit. If an error occurs while saving this file will be
     # reopened with the relevant failures.
     #
     apiVersion: v1
     data:
       mapRoles: |
         - groups:
           - system:bootstrappers
           - system:nodes
           rolearn: arn:aws: iam::111122223333:role/my-role
           username: system:node:{{EC2PrivateDNSName}}
         - groups:
           - eks-console-dashboard-full-access-group
           rolearn: arn:aws: iam::111122223333:role/my-console-viewer-role
           username: my-console-viewer-role
       mapUsers: |
         - groups:
           - system:masters
           userarn: arn:aws: iam::111122223333:user/admin
           username: admin
         - groups:
           - eks-console-dashboard-restricted-access-group
           userarn: arn:aws: iam::444455556666:user/my-user
           username: my-user
     ```

1. 儲存檔案並結束您的文字編輯器。

## 將 `aws-auth` `ConfigMap` 套用至您的叢集
<a name="aws-auth-configmap"></a>

在建立受管節點群組或以 `eksctl` 建立節點群組時，便會自動建立並套用 `aws-auth` `ConfigMap` 至您的叢集。最初建立的目的是要允許將節點加入您的叢集，但您也可以使用此 `ConfigMap` 來新增角色型存取控制 (RBAC) 以存取 IAM 主體。若尚未啟動自我管理節點且尚未套用 `aws-auth` `ConfigMap` 至叢集，則您可以使用以下程序來完成此操作。

1. 檢查您是否已套用 `aws-auth` `ConfigMap`。

   ```
   kubectl describe configmap -n kube-system aws-auth
   ```

   若您收到錯誤訊息，指出 "`Error from server (NotFound): configmaps "aws-auth" not found`"，請使用以下步驟的程序來套用儲存的 `ConfigMap`。

1. 下載、編輯和套用 AWS 驗證器組態映射。

   1. 下載組態對應。

      ```
      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
      ```

   1. 在 `aws-auth-cm.yaml` 檔案中，將 `rolearn` 設定至與您節點關聯的 IAM 角色之 Amazon Resource Name (ARN)。您可以使用文字編輯器來完成此操作，或者透過取代 *my-node-instance-role* 並執行下列命令：

      ```
      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
      ```

      請勿修改此檔案中的任何其他行。
**重要**  
角色 ARN 不能包含例如 `role/my-team/developers/my-role` 的路徑。ARN 的格式必須是 ` arn:aws: iam::111122223333:role/my-role `。在此範例中，需移除 `my-team/developers/`。

      您可以檢查節點群組的 AWS CloudFormation 堆疊輸出，並尋找下列值：
      +  **InstanceRoleARN**：適用於以 `eksctl` 建立的節點群組 
      +  **NodeInstanceRole** – 適用於使用 中的 Amazon EKS vended AWS CloudFormation 範本建立的節點群組 AWS 管理主控台 

   1. 套用組態。此命令可能需要幾分鐘的時間來完成。

      ```
      kubectl apply -f aws-auth-cm.yaml
      ```
**注意**  
如果您收到任何授權或資源類型錯誤，請參閱故障診斷主題中的[未經授權或存取遭拒 (`kubectl`)](troubleshooting.md#unauthorized)。

1. 查看節點的狀態，並等待他們到達 `Ready` 狀態。

   ```
   kubectl get nodes --watch
   ```

   輸入 `Ctrl`\$1`C` 傳回 Shell 提示。

# 透過外部 OIDC 提供商授予使用者存取 Kubernetes 的權限
<a name="authenticate-oidc-identity-provider"></a>

Amazon EKS 支援使用 OpenID Connect (OIDC) 身分提供者作為向您的叢集對使用者進行身分驗證的方法。OIDC 身分提供者可以與 AWS Identity and Access Management (IAM) 搭配使用或作為替代方案。如需使用 IAM 的詳細資訊，請參閱 [授予 IAM 使用者和角色對 Kubernetes APIs存取權](grant-k8s-access.md)。設定叢集身分驗證後，您可以建立 Kubernetes `roles` 和 `clusterroles` 指派許可給角色，然後使用 Kubernetes `rolebindings` 和 `clusterrolebindings` 將角色繫結至身分。如需詳細資訊，請參閱 Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。
+ 您可以將一個 OIDC 身分提供者與叢集建立關聯。
+ Kubernetes 不提供 OIDC 身分提供者。您可以使用現有的公有 OIDC 身分提供者，也可以執行您自己的身分提供者。如需認證提供商的清單，請參閱 OpenID 網站上的 [OpenID 認證](https://openid.net/certification/)。
+ OIDC 身分提供者的發行者 URL 必須可公開存取，以便 Amazon EKS 可以探索簽署金鑰。Amazon EKS 不支援具有自我簽署憑證的 OIDC 身分提供者。
+ 您無法停用叢集上的 IAM 身分驗證器，因為將節點連接到叢集仍然需要此身分驗證器。
+ Amazon EKS 叢集仍然必須由 AWS [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)建立，而非 OIDC 身分提供者使用者。這是因為叢集建立者會與 Amazon EKS API 進行互動，而不是與 Kubernetes API 進行互動。
+ 如果控制平面的 CloudWatch Logs 已開啟，則已進行提供商身分驗證的 OIDC 身分使用者會列在叢集的稽核日誌中。如需詳細資訊，請參閱[啟用或停用控制平面日誌](control-plane-logs.md#enabling-control-plane-log-export)。
+ 您無法 AWS 管理主控台 透過 OIDC 供應商的帳戶登入 。您只能[在 中檢視 Kubernetes 資源 AWS 管理主控台](view-kubernetes-resources.md)使用 AWS Identity and Access Management AWS 管理主控台 帳戶登入 。

## 關聯 OIDC 身分提供者
<a name="associate-oidc-identity-provider"></a>

在可以將 OIDC 身分提供者與叢集建立關聯之前，您需要提供商的下列資訊：

 **發行者 URL**   
OIDC 身分提供者的 URL，可讓 API 伺服器探索用於驗證權杖的公有簽署金鑰。URL 必須以 `https://` 開頭並且應該對應至提供商之 OIDC ID 字符中的 `iss` 宣告。根據 OIDC 標準，允許路徑元件，但不允許查詢參數。通常，URL 只包含一個主機名稱，如 `https://server.example.org` 或 `https://example.com`。此 URL 應指向 `.well-known/openid-configuration` 以下的層級，必須可透過網際網路公開存取。

 **用戶端 ID (也稱為*對象*)**   
向 OIDC 身分提供者提出驗證請求的用戶端應用程式 ID。

您可以使用 `eksctl` 或 AWS 管理主控台關聯身分提供者。

### 使用 eksctl 關聯身分提供者
<a name="identity-associate-eksctl"></a>

1. 使用下列內容建立名為 `associate-identity-provider.yaml` 的檔案。使用自己的取代範例值。`identityProviders` 區段中的值是從您的 OIDC 身分提供者取得的。值僅對 `identityProviders` 下的 `name`、`type`、`issuerUrl` 和 `clientId` 設定為必要項目。

   ```
   ---
   apiVersion: eksctl.io/v1alpha5
   kind: ClusterConfig
   
   metadata:
     name: my-cluster
     region: your-region-code
   
   identityProviders:
     - name: my-provider
       type: oidc
       issuerUrl: https://example.com
       clientId: kubernetes
       usernameClaim: email
       usernamePrefix: my-username-prefix
       groupsClaim: my-claim
       groupsPrefix: my-groups-prefix
       requiredClaims:
         string: string
       tags:
         env: dev
   ```
**重要**  
請勿指定 `system:`，或該字串的任何部分，對於 `groupsPrefix` 或 `usernamePrefix`。

1. 建立供應商。

   ```
   eksctl associate identityprovider -f associate-identity-provider.yaml
   ```

1. 若要讓 `kubectl` 與叢集和 OIDC 身分提供者搭配使用，請參閱 Kubernetes 文件中的[使用 kubectl](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-kubectl)。

### 使用 AWS 主控台關聯身分提供者
<a name="identity-associate-console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 選取叢集，然後選取**存取**索引標籤。

1. 在 **OIDC 身分提供者**區段上，選取\$1關聯身分提供者\$1。

1. 在 **Associate OIDC Identity Provider** (關聯 OIDC 身分提供者) 頁面上，輸入或選取下列選項，然後選取 **Associate** (關聯)。
   + 對於 **Name** (名稱)，輸入提供商的唯一名稱。
   + 對於 **Issuer URL** (發行者 URL)，輸入您的提供商 URL。此 URL 必須可透過網際網路存取。
   + 對於**用戶端 ID**，輸入 OIDC 身分提供者的用戶端 ID (也稱為**受眾**)。
   + 對於 **Username claim** (使用者名稱宣告)，輸入要用作使用者名稱的宣告。
   + 對於**群組宣告**，輸入要作為使用者群組使用的宣告。
   + (選用) 選取 **Advanced options** (進階選項)，輸入或選取下列資訊。
     +  **Username prefix** (使用者名稱字首)：輸入要在使用者名稱宣告前面加上的字首。字首會加入使用者名稱宣告，以防止與現有名稱發生衝突。如果未提供值，且使用者名稱是非 `email` 的值，字首預設為 **Issuer URL** (發行者 URL) 的值。您可以使用值 ` -` 停用所有字首。請勿指定 `system:` 或該字串的任何部分。
     +  **Groups prefix** (群組字首)：輸入要在群組宣告前面加上的字首。字首會加入群組宣告，以防止與現有名稱發生衝突 (例如 ` system: groups`)。例如，值 `oidc:` 會建立群組名稱，例如 `oidc:engineering` 和 `oidc:infra`。請勿指定 `system:` 或該字串的任何部分。
     +  **Required claims** (必要宣告)：選取 **Add claim** (新增宣告)，然後在用戶端 ID 字符中輸入一或多個描述必要宣告的鍵值對。鍵值對在 ID 字符中描述了必要宣告。如果設定，則會驗證每個宣告是否存在於具有相符值的 ID 字符中。

       1. 若要讓 `kubectl` 與叢集和 OIDC 身分提供者搭配使用，請參閱 Kubernetes 文件中的[使用 kubectl](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-kubectl)。

## 範例 IAM 政策
<a name="oidc-identity-provider-iam-policy"></a>

如果您想要防止 OIDC 身分提供者與叢集產生關聯，請建立下列 IAM 政策並將其與 Amazon EKS 管理員的 IAM 帳戶關聯。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)和[新增 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)以及《服務授權參考》中的[動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerserviceforkubernetes.html)。

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "denyOIDC",
            "Effect": "Deny",
            "Action": [
                "eks:AssociateIdentityProviderConfig"
            ],
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/*"

        },
        {
            "Sid": "eksAdmin",
            "Effect": "Allow",
            "Action": [
                "eks:*"
            ],
            "Resource": "*"
        }
    ]
}
```

下列範例政策允許 OIDC 身分提供者關聯，如果 `clientID` 為 `kubernetes` 以及 `issuerUrl` 為 `https://cognito-idp.us-west-2.amazonaws.com/*`。

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCognitoOnly",
            "Effect": "Deny",
            "Action": "eks:AssociateIdentityProviderConfig",
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance",
            "Condition": {
                "StringNotLikeIfExists": {
                    "eks:issuerUrl": "https://cognito-idp.us-west-2.amazonaws.com/*"
                }
            }
        },
        {
            "Sid": "DenyOtherClients",
            "Effect": "Deny",
            "Action": "eks:AssociateIdentityProviderConfig",
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance",
            "Condition": {
                "StringNotEquals": {
                    "eks:clientId": "kubernetes"
                }
            }
        },
        {
            "Sid": "AllowOthers",
            "Effect": "Allow",
            "Action": "eks:*",
            "Resource": "*"
        }
    ]
}
```

# 取消 OIDC 身分提供者與叢集的關聯
<a name="disassociate-oidc-identity-provider"></a>

如果您取消 OIDC 身分提供者與叢集的關聯，則提供商中包含的使用者將無法再存取叢集。不過，您仍然可以透過 [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)存取叢集。

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 在 **OIDC 身分提供者**區段中，選取 **Disassociate** (解除關聯)，輸入身分提供者名稱，然後選取 `Disassociate`。