

 **協助改進此頁面** 

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

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

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

# 建立存取項目
<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 主體的 ARN 不同。即使您看不到存取項目的 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}}` 新增至使用者名稱，則必須在 {{SessionName}} *之前*必須有冒號。擔任此角色時，擔任角色時指定的 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 物件是否包含您指定的任何群組名稱。例如，如果您為目前不存在的群組建立存取項目，Amazon EKS 將接受組態而不傳回錯誤，但在建立相符的 Kubernetes RBAC 資源之前，IAM 主體將沒有任何許可。

  您可以將 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 管理主控台 或 CLI AWS 建立存取項目。

## 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 CLI，如 AWS 命令列界面使用者指南中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)中所述。

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

     ```
     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}} 取代為您的叢集名稱，將 {{111122223333}} 取代為您的 AWS 帳戶 ID，將 {{my-role}} 取代為您的 IAM 角色名稱。用您在叢集上的 Kubernetes `RoleBinding` 或 `ClusterRoleBinding` 物件中指定的群組名稱取代 {{Viewers}}。

     ```
     aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws: iam::111122223333:role/my-role --type STANDARD --username 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) 兩節。