管理存取項目 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

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

管理存取項目

必要條件
  • 熟悉 Amazon EKS 叢集的叢集存取選項。如需詳細資訊,請參閱 授予 Kubernetes API 的存取權

  • 現有 Amazon EKS 叢集。若要部署叢集,請參閱 Amazon EKS 入門。若要使用存取項目和變更叢集的身分驗證模式,叢集的平台版本必須與下表所列版本相同或更新,或是晚於表格中列出版本的 Kubernetes 版本。

    Kubernetes 版本 平台版本
    1.30 eks.2
    1.29 eks.1
    1.28 eks.6
    1.27 eks.10
    1.26 eks.11
    1.25 eks.12
    1.24 eks.15
    1.23 eks.17

    若要檢查目前的 Kubernetes 和平台版本,您可以使用叢集名稱取代以下命令中的 my-cluster,然後執行修改後的命令:aws eks describe-cluster --name my-cluster --query 'cluster.{"Kubernetes Version": version, "Platform Version": platformVersion}'

    重要

    在 Amazon EKS 將叢集更新至表中列出的平台版本後,Amazon EKS 會為最初建立叢集的 IAM 主體,建立一個具有叢集管理員許可的存取項目。如果您不希望該 IAM 主體擁有叢集的管理員許可,請移除 Amazon EKS 建立的存取項目。

    對於平台版本早於上表所列平台版本的叢集,叢集建立者始終為叢集管理員。您無法從建立叢集的 IAM 使用者或角色中移除叢集管理員許可。

  • 對叢集具有以下許可的 IAM 主體:CreateAccessEntryListAccessEntriesDescribeAccessEntryDeleteAccessEntryUpdateAccessEntry。如需 Amazon EKS 許可的詳細資訊,請參閱《服務授權參考》中的 Amazon Elastic Kubernetes Service 定義的動作一節。

  • 要為其建立存取項目的現有 IAM 主體,或要更新或刪除的現有存取項目。

設定存取項目

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

AWS Management Console
建立存取項目
  1. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

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

  3. 選擇存取索引標籤。

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

  5. 選擇管理存取

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

  7. 選擇儲存變更。Amazon EKS 開始更新叢集,叢集的狀態變更為 Updating,並且將變更記錄在更新歷史記錄索引標籤中。

  8. 等待叢集狀態變回 Active。當叢集的狀態為 Active 時,您可以依照 建立存取項目 中的步驟為 IAM 主體新增對叢集的存取權。

AWS CLI
先決條件

在您的裝置或上安裝和設定的 AWS CLI v1 的最新版本 AWS CloudShell。 AWS CLI v2 幾天不支持新功能。您可以使用 aws --version | cut -d / -f2 | cut -d ' ' -f1 來檢查您的目前版本。如 yumapt-get 或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《 AWS Command Line Interface 使用指南》aws configure中的〈安裝、更新 AWS CLI和解除安裝〉和〈快速設定〉。安裝在中的 AWS CLI 版本也 AWS CloudShell 可能是最新版本之後的幾個版本。若要進行更新,請參閱《 AWS CloudShell 使用者指南》中的〈安裝 AWS CLI 到主目錄〉。

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

    Amazon EKS 開始更新叢集,叢集的狀態變更為 UPDATING,並且變更記錄在 aws eks list-updates 中。

    aws eks update-cluster-config --name my-cluster --access-config authenticationMode=API_AND_CONFIG_MAP
  2. 等待叢集狀態變回 Active。當叢集的狀態為 Active 時,您可以依照 建立存取項目 中的步驟為 IAM 主體新增對叢集的存取權。

建立存取項目

考量事項

在建立存取項目之前,請考慮以下事項:

  • 存取項目包含一個 (且僅一個) 現有 IAM 主體的 Amazon Resource Name (ARN)。一個 IAM 主體不能包含在多個存取項目中。對於您指定的 ARN 的其他考量:

    • IAM 最佳實務建議使用具有短期憑證的 IAM 角色存取叢集,而不是使用具有長期憑證的 IAM 使用者進行存取。如需詳細資訊,請參閱 IAM 使用者指南中的要求人類使用者與身分識別提供者的聯合以 AWS 使用臨時登入資料存取

    • 如果 ARN 用於 IAM 角色,則它可以包含路徑。aws-auth ConfigMap 項目中的 ARN 則不能包含路徑。例如, ARN 可以是 arn:aws:iam::111122223333:role/development/apps/my-rolearn:aws:iam::111122223333:role/my-role

    • 如果存取項目的類型不是 STANDARD (請參閱下一個關於類型的考量),ARN 必須與叢集 AWS 帳戶 所在的相同。如果類型為STANDARD,則 ARN 可以與叢集所在 AWS 帳戶 的帳戶相同或不同。

    • 建立存取項目後,您無法變更該 IAM 主體。

    • 如果您刪除具有此 ARN 的 IAM 主體,則存取項目並不會自動刪除。建議您刪除帶有您刪除之 IAM 主體的 ARN 的存取項目。如果您在不刪除存取項目的情況下重新建立 IAM 主體,則即使它具有相同的 ARN,存取項目也將無法運作。這是因為即使 ARN 對於重新建立的 IAM 主體是相同的,roleIDuserID (您可以使用aws sts get-caller-identity AWS CLI 命令看到) 對於重新建立的 IAM 主體而言,與原始 IAM 主體不同。即使您看不到存取項目的 IAM 主體 roleIDuserID,Amazon EKS 也會將其與存取項目一起儲存。

  • 每個存取項目都有一個類型。您可以指定 EC2 Linux (針對搭配 Linux 或保登機自我管理節點使用的 IAM 角色)、EC2 Windows (適用於搭配 Windows 自我管理節點使用的 IAM 角色)、FARGATE_LINUX (適用於搭配使用的 IAM 角色 AWS Fargate (Fargate)) 或做為類型。STANDARD如果您不指定類型,則 Amazon EKS 會自動將類型設為 STANDARD。無需為用於受管節點群組或 Fargate 描述檔的 IAM 角色建立存取項目,因為無論叢集位於哪個平台版本,Amazon EKS 都會將這些角色的項目新增至 aws-auth ConfigMap

    建立存取項目後,您無法變更類型。

  • 如果某個存取項目的類型為 STANDARD,則可以為其指定一個使用者名稱。如果您沒有指定使用者名稱的值,Amazon EKS 會根據存取項目的類型以及您指定的 IAM 主體是 IAM 角色還是 IAM 使用者,設定下列其中一個值。除非您有特定原因需要自己指定使用者名稱,否則建議您不要指定使用者名稱,而是讓 Amazon EKS 自動為您產生該使用者名稱。如果您自己指定使用者名稱:

    • 該名稱不能以 system:eks:aws:amazon:iam: 開頭。

    • 如果該使用者名稱用於 IAM 角色,則建議您在末尾新增 {{SessionName}}。如果您添加{{SessionName}}到您的用戶名,用戶名必須{{SessionName}} 之前包含冒號。假設此角色時,假設角色時指定的工作階段名稱會自動傳遞至叢集,並會出現在 CloudTrail 記錄檔中。例如,使用者名稱不能為 john{{SessionName}}。使用者名稱必須為 :john{{SessionName}}jo:hn{{SessionName}}。冒號只需位於 {{SessionName}} 之前。以下資料表中 Amazon EKS 產生的使用者名稱包含 ARN。由於 ARN 包含冒號,因此它符合此項要求。如果使用者名稱中不包含 {{SessionName}},則不需要冒號。

    IAM 主體類型 Type Amazon EKS 自動設定的使用者名稱值
    使用者 STANDARD

    使用者的 ARN。範例:arn:aws:iam::111122223333:user/my-user

    角色 STANDARD

    角色被擔任時的 STS ARN。Amazon EKS 將 {{SessionName}} 附加到角色。

    範例:arn:aws:sts::111122223333:assumed-role/my-role/{{SessionName}}

    如果您指定的角色的 ARN 包含路徑,則 Amazon EKS 會將其從產生的使用者名稱中移除。

    角色 EC2 LinuxEC2 Windows

    system:node:{{EC2PrivateDNSName}}

    角色 FARGATE_LINUX

    system:node:{{SessionName}}

    建立存取項目後,您可以對使用者名稱進行變更。

  • 如果某個存取項目的類型為 STANDARD,且您希望使用 Kubernetes RBAC 授權,則可以在該存取項目中新增一個或多個群組名稱。建立存取項目後,您可以新增和移除群組名稱。為了使 IAM 主體能夠存取叢集上的 Kubernetes 物件,您必須建立和管理 Kubernetes 角色型授權 (RBAC) 物件。在叢集上建立將群組名稱指定為 kind: Groupsubject 的 Kubernetes RoleBindingClusterRoleBinding 物件。Kubernetes 授權 IAM 主體存取您在 Kubernetes RoleClusterRole 物件中 (也在繫結的 roleRef 中) 指定的任何叢集物件。如果您指定群組名稱,則建議您熟悉 Kubernetes 角色型授權 (RBAC) 物件。如需詳細資訊,請參閱 Kubernetes 文件中的使用 RBAC 授權

    重要

    Amazon EKS 不會確認叢集上存在的任何 Kubernetes RBAC 物件是否包含您指定的任何群組名稱。

    您可以將 Amazon EKS 存取政策關聯到存取項目,而不是讓 Kubernetes 授權 IAM 主體存取叢集上的 Kubernetes 物件。Amazon EKS 授權 IAM 主體使用存取政策中的許可存取叢集上的 Kubernetes 物件。您可以將存取政策的許可範圍限定為您指定的 Kubernetes 命名空間。使用存取政策無需您管理 Kubernetes RBAC 物件。如需詳細資訊,請參閱 將存取政策與存取項目關聯和取消關聯

  • 如果您建立類型為 EC2 LinuxEC2 Windows 的存取項目,則建立該存取項目的 IAM 主體必須具有 iam:PassRole 許可。如需詳細資訊,請參閱《IAM 使用者指南》中的 Granting a user permissions to pass a role to an AWS 服務 一節。

  • 與標準 IAM 行為類似,存取項目的建立和更新採用最終一致模式,在初始 API 呼叫成功返回後可能需要幾秒鐘才能生效。您設計的應用程式必須能夠處理這些可能的延遲問題。建議您不要在應用程式的關鍵、高可用性程式碼路徑中包含存取項目建立或更新動作。而應在不常運作的、單獨的初始化或設定常式中進行 更改。另外,在生產工作流程套用這些變更之前,請務必確認變更已傳播完畢。

  • 存取項目不支援服務連結的角色。您無法建立主參與者 ARN 是服務連結角色的存取項目。您可以依據服務連結角色的 ARN 來識別服務連結角色,格arn:aws:iam::*:role/aws-service-role/*式為。

您可以使用 AWS Management Console 或建立存取項目 AWS CLI。

AWS Management Console
建立存取項目
  1. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

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

  3. 選擇存取索引標籤。

  4. 選擇建立存取項目

  5. 對於 IAM 主體,選取現有 IAM 角色或使用者。IAM 最佳實務建議使用具有短期憑證的 IAM 角色存取叢集,而不是使用具有長期憑證的 IAM 使用者進行存取。如需詳細資訊,請參閱 IAM 使用者指南中的要求人類使用者與身分識別提供者的聯合以 AWS 使用臨時登入資料存取

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

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

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

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

  10. 選擇下一步

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

    1. 對於政策名稱,請選擇存取政策。您無法檢視存取政策的許可,但其包含與 Kubernetes 面向使用者之 ClusterRole 物件中的許可類似的許可。如需詳細資訊,請參閱 Kubernetes 文件中的 User-facing roles 一節。

    2. 請選擇下列其中一個選項:

      • 叢集:如果您希望 Amazon EKS 授予該 IAM 主體存取政策中針對叢集上所有 Kubernetes 物件的許可,請選擇此選項。

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

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

    4. 選擇下一步

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

AWS CLI
先決條件

在您的裝置或上安裝和設定的 AWS CLI v1 的最新版本 AWS CloudShell。 AWS CLI v2 幾天不支持新功能。您可以使用 aws --version | cut -d / -f2 | cut -d ' ' -f1 來檢查您的目前版本。如 yumapt-get 或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《 AWS Command Line Interface 使用指南》aws configure中的〈安裝、更新 AWS CLI和解除安裝〉和〈快速設定〉。安裝在中的 AWS CLI 版本也 AWS CloudShell 可能是最新版本之後的幾個版本。若要進行更新,請參閱《 AWS CloudShell 使用者指南》中的〈安裝 AWS CLI 到主目錄〉。

建立存取項目

您可以使用以下任何範例來建立存取項目:

  • 為自我管理的 Amazon EC2 Linux 節點群組建立存取項目。將我的叢集取代為叢集的名稱,111122223333 用您的 AWS 帳戶 識別碼取代我的叢集,以節點 IAM 角色的名稱取代 EK-我的叢集-自我管理- NG-1。如果節點群組是 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 角色。將我的叢集取代為叢集的名稱,111122223333 用您的身分 AWS 帳戶 識別碼取代我的角色,並將我的角色取代為 IAM 角色的名稱。用您在叢集上的 Kubernetes RoleBindingClusterRoleBinding 物件中指定的群組名稱取代 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 使用臨時登入資料存取

    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 文件中的 將存取政策與存取項目關聯和取消關聯 以及 API discovery roles 兩節。

更新存取項目

您可以使用 AWS Management Console 或更新存取項目 AWS CLI。

AWS Management Console
更新存取項目
  1. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

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

  3. 選擇存取索引標籤。

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

  5. 選擇編輯

  6. 對於使用者名稱,您可以變更現有值。

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

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

  9. 選擇儲存變更

  10. 如果您想要將存取政策關聯到項目,請參閱 將存取政策與存取項目關聯和取消關聯

AWS CLI
先決條件

您裝置上安裝和設定的 AWS Command Line Interface (AWS CLI) 的版本1.27.160或更新版本、版本或更新版本或更新版本或更新版本 AWS CloudShell。2.12.3若要檢查您目前的版本,請使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。如 yumapt-get 或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《AWS Command Line Interface 使用者指南》中的安裝、更新和解除安裝 AWS CLI以及使用 aws configure 的快速組態。安裝在中的 AWS CLI 版本也 AWS CloudShell 可能是最新版本之後的幾個版本。若要進行更新,請參閱《AWS CloudShell 使用者指南》中的〈安裝 AWS CLI 到主目錄

更新存取項目

將我的叢集取代為叢集名稱,111122223333 用您的 AWS 帳戶 識別碼取代我的叢集,以 IAM 角色的名稱取代 EK-我- 叢集-我的命名空間檢視器。

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 以外的類型的存取項目關聯。

刪除存取項目

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

您可以使用 AWS Management Console 或刪除存取項目 AWS CLI。

AWS Management Console
刪除存取項目
  1. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

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

  3. 選擇存取索引標籤。

  4. 存取項目清單中,選擇要刪除的存取項目。

  5. 選擇刪除。

  6. 在確認對話方塊中,選擇 Delete (刪除)。

AWS CLI
先決條件

您裝置上安裝和設定的 AWS Command Line Interface (AWS CLI) 的版本1.27.160或更新版本、版本或更新版本或更新版本或更新版本 AWS CloudShell。2.12.3若要檢查您目前的版本,請使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。如 yumapt-get 或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《AWS Command Line Interface 使用者指南》中的安裝、更新和解除安裝 AWS CLI以及使用 aws configure 的快速組態。安裝在中的 AWS CLI 版本也 AWS CloudShell 可能是最新版本之後的幾個版本。若要進行更新,請參閱《AWS CloudShell 使用者指南》中的〈安裝 AWS CLI 到主目錄

刪除存取項目

我的叢集取代為叢集的名稱,111122223333 用您的 AWS 帳戶 識別碼取代我的叢集,並以您不想再存取叢集的 IAM 角色名稱取代 my- role。

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