跳至內容

如何解決 Amazon EKS 中的 "Your current user or role does not have access to Kubernetes objects on this EKS cluster" 錯誤?

3 分的閱讀內容
0

我嘗試存取 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集。但我收到 "Your current user or role does not have access to Kubernetes objects on this EKS cluster" 錯誤訊息。

簡短描述

當 AWS Identity and Access Management (IAM) 身分沒有 Kubernetes 的角色型存取控制 (RBAC) 權限時,您就會收到存取錯誤訊息。若要存取 Kubernetes API,您必須擁有 RBAC 權限。有關 RBAC 的更多資訊,請參閱 Kubernetes 網站上的使用 RBAC 授權。若要在 AWS 管理主控台上查看 Kubernetes 資源,您的 IAM 身分必須對應到 Amazon EKS 叢集中的 aws-auth ConfigMap

**重要:**以下解決方案使用 aws-auth ConfigMap,以符合 Kubernetes 存取 RBAC 權限的方式。最佳實務是將現有的 aws-auth ConfigMap 項目遷移到存取項目

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

如果您是叢集的建立者或管理員使用者,則可以使用 kubectleksctl 來更新 aws-auth ConfigMap。繼續執行將 IAM 使用者或角色新增至 RBAC 組態。否則,您必須取得需要存取叢集存取之 IAM 身分的 Amazon Resource Name (ARN)。

取得需要存取叢集之 IAM 身分的 ARN

識別需要存取叢集的 IAM 使用者或角色

**注意:**該 IAM 身分可能與您執行 AWS CLI 時所使用的 IAM 身分不同。AWS IAM Authenticator for Kubernetes 不允許您在 aws-auth ConfigMap 中使用包含路徑的角色 ARN。如需詳細資訊,請參閱 GitHub 網站上的 aws-iam-authenticator

如果您具有 IAM 使用者或角色的 AWS CLI 存取權,請執行以下 get-caller-identity AWS CLI 命令:

aws sts get-caller-identity --query "Arn"

**注意:**如果您沒有 AWS CLI 存取權,請移除 Arn 的引號,然後在 AWS CloudShell 中執行上述命令。

輸出範例:

"arn:aws:iam::111122223333:role/testrole"

如果命令的輸出結果顯示的是 IAM 角色 ARN,請確認其 ARN 格式正確,例如:arn:aws:iam::111122223333:role/example

如果 ARN 包含的是假設角色,那麼您必須取得實際要授予 RBAC 權限的 IAM 角色 ARN。例如,假設角色 ARN arn:aws:sts::123456:assumed-role/MyRole/your_username 對應的實際角色 ARN 為 arn:aws:sts::123456:role/MyRole

將 ARN 提供給您的叢集管理員,然後請求管理員將角色的 ARN 新增至 aws-auth ConfigMap。有關將 ARN 新增至 aws-auth ConfigMap 的步驟,請繼續參考將 IAM 使用者或角色新增至 RBAC 組態

確認 IAM 使用者或角色具有在 AWS 管理主控台上查看所有叢集的節點和工作負載的權限

識別叢集建立者

**重要:**只有與叢集建立關聯的 IAM 實體才有權存取叢集資源。只有叢集建立者可以編輯 aws-auth ConfigMap 並提供其他 IAM 實體的存取權。

確定具有設定叢集的主要權限的叢集建立者或管理員角色。首先,檢查 AWS CloudTrail 事件歷史記錄中是否存在 CreateCluster API 呼叫。然後,檢查 userIdentity 欄位。

如果叢集建立者的名稱在 CloudTrail 中顯示為已刪除,則建立一個具有相同名稱的新 IAM 使用者角色。新的 IAM 身分具有與原始叢集建立者相同的 ARN,因此新身分會繼承相同的叢集管理員存取權。

**注意:**對於超過 90 天的叢集,CloudTrail 不提供叢集建立者的名稱。

若要使用 AWS CLI 取得叢集建立者的 IAM 身分,請執行以下 get-caller-identity 命令:

aws sts get-caller-identity

輸出範例:

{    
    "UserId": "AIDACKCEVSQ6C2EXAMPLE",
    "Account": "111122223333",
    "Arn": "arn:aws:iam:: 111122223333:user/testuser"
}

將 IAM 使用者或角色新增至 RBAC 組態

如果您安裝了 eksctl,請執行以下 eksctl create iamidentitymapping 命令來更新 aws-auth ConfigMap

eksctl create iamidentitymapping --cluster your_cluster_name --region=your_region --arn your_IAM_ARN --group system:masters --username admin

**注意:**將 your_cluster_name 替換為您的叢集名稱,將 your_region 替換為您的 AWS 區域,並將 your_IAM_ARN 替換為您的 IAM 角色或使用者 ARN。

若要使用 kubectl 更新 aws-auth ConfigMap,請完成以下步驟:

  1. 執行以下命令,在預設文字編輯器中開啟 aws-auth ConfigMap

    kubectl edit configmap aws-auth -n kube-system

    **注意:**主控台會顯示目前的 ConfigMap。如果您無法連線到叢集,請更新您的 kubeconfig 檔案。建立叢集的 IAM 身分始終可以存取該叢集。

  2. 執行以下 update-kubeconfig 命令來設定 kubectl,讓您可以連線到叢集:

    aws eks update-kubeconfig --region region_code --name your_cluster_name

    **注意:**將 region_code 替換為您的區域,並將 your_cluster_name 替換為您的叢集名稱。kubectl 命令必須連線到 Amazon EKS 伺服器端點。如果 API 伺服器端點是公有的,那麼您必須具有網路存取權才能連線到該端點。如果端點是私有的,則從執行叢集的虛擬私有雲端 (VPC) 連線到伺服器端點。

  3. 在開啟的文字編輯器中,輸入以下程式碼來新增 IAM 使用者:

    mapUsers: |  
        - userarn: arn:aws:iam::111122223333:user/testuser
        username: testuser
        groups:
        - system:bootstrappers
        - system:nodes

    **注意:**將 111122223333 替換為您的 AWS 帳戶 ID,並將 testuser 替換為您的 IAM 使用者。

    或者,輸入以下程式碼來新增 IAM 角色:

    mapRoles: |  
        - rolearn: arn:aws:iam::111122223333:role/testrole
        username: testrole
        groups:
        - system:bootstrappers
        - system:nodes

    **注意:**將 111122223333 替換為您的帳戶 ID,並將 testrole 替換為您的 IAM 角色。

如果您建立叢集,您的 IAM 身分會自動獲得該叢集 RBAC 組態中的 system:masters 權限。預設情況下,system:masters 群組會繫結到 cluster-admin 叢集角色。

在生產環境中使用 system:masters 權限並非最佳實務。system:masters 權限會授予使用者對叢集中所有 Kubernetes 資源的完全存取權。最佳實務是建立一個僅具有所需權限且能夠存取特定命名空間的角色。

確認對叢集的存取權

請完成下列步驟:

  1. 開啟 Amazon EKS console (Amazon EKS 主控台)。
  2. 在導覽窗格中,請選取 Clusters (叢集)。
  3. 選取您的叢集。
  4. 檢查 Overview (概觀) 和 Workloads (工作負載) 索引標籤是否有錯誤。

如果您發現錯誤,請參閱IAM 疑難排解。例如,如果您為特定命名空間設定了 RBAC 存取權,那麼您可能會收到以下錯誤訊息:

"Error loading Deployments : deployments.apps is forbidden: User "AIDACKCEVSQ6C2EXAMPLE" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "EXAMPLENAMESPACE"

若要解決命名空間錯誤,您必須建立或更新 RBAC 角色或叢集角色,並設定適當的角色繫結或叢集角色繫結。如需詳細資訊,請參閱 Kubernetes 網站上的 RoleBinding 和 ClusterRoleBinding

AWS 官方已更新 7 個月前