如何使用 Amazon EKS 存取項目 API 來復原 EKS 叢集的存取權?
由於單一登入使用者變更或 aws-auth ConfigMap 刪除或損毀,我無法存取 Amazon Elastic Kubernetes Service (Amazon EKS)。
簡短描述
如果您失去對 EKS 叢集的存取權,則在執行 kubectl 命令時,您會看到類似下列錯誤:
「錯誤: 您必須登入伺服器 (未經授權)。」
若要重新取得對叢集的存取權,請使用存取項目來管理 AWS Identity and Access Management (IAM) 主體的權限。您可以從 Amazon EKS 叢集外部執行此操作。
注意: 如果 EKS 叢集建立者存在,則會假設 EKS 叢集建立者的 IAM 主體登入並存取叢集。預設情況下,EKS 叢集建立者是叢集的管理員。下列程序會建立一個與叢集建立者原始 IAM 角色共存的管理員角色。
解決方法
先決條件:
- 安裝 kubectl。
- 安裝和設定最新版本的 AWS Command Line Interface (AWS CLI)。
- 您具有以下權限的 IAM 角色: CreateAccessEntry、ListAccessEntries、DescribeAccessEntry、DeleteAccessEntry 和 UpdateAccessEntry。
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
使用 aws eks 存取項目 API 管理 Amazon EKS 叢集存取權
注意: 在以下命令中,替換以下內容:
將 <ACCOUNT_ID> 替換為 EKS 叢集所在來源帳戶的帳戶 ID。
將 ** 替換為<REGION>** 您的 AWS 區域名稱。
將 <CLUSTER_NAME> 替換為您的 EKS 叢集名稱。
將 <IAM_PRINCIPAL_ARN> 替換為您想擁有管理員權限的角色 ARN。
若要使用 aws eks 存取項目 API 來管理 Amazon EKS 叢集存取,請完成以下步驟:
-
在已安裝 kubectl 的主機中,擔任具有下列權限的 IAM 角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:ListAccessEntries", "eks:CreateAccessEntry", "eks:DescribeCluster", "eks:UpdateClusterConfig" ], "Resource": [ "arn:aws:eks:<REGION>:<ACCOUNT_ID>:cluster/<CLUSTER_NAME>" ] }, { "Effect": "Allow", "Action": [ "eks:DeleteAccessEntry", "eks:ListAssociatedAccessPolicies", "eks:DisassociateAccessPolicy", "eks:AssociateAccessPolicy", "eks:UpdateAccessEntry", "eks:DescribeAccessEntry" ], "Resource": [ "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/*" ] } ] } -
若要確認您的身分識別,請執行下列命令:
aws sts get-caller-identity在命令的輸出中,記下 ARN。它看起來會類似以下範例:arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin
-
執行以下命令來驗證 Amazon EKS 叢集的目前驗證模式:
aws eks describe-cluster --name <CLUSTER_NAME> --query 'cluster.accessConfig.authenticationMode' --region <REGION>如果 Amazon EKS 叢集的目前驗證模式是 API_AND_CONFIG_MAP,則該叢集已經具有所需的存取模式。跳至步驟 5。
-
執行下列命令以更新 Amazon EKS 叢集的驗證模式:
aws eks update-cluster-config --name <CLUSTER_NAME> --access-config authenticationMode=API_AND_CONFIG_MAP --region <REGION>注意: 您可以從 ** CONFIG\ _MAP ** 驗證模式切換到 API 模式,但無法從 API 模式切換回 CONFIG\ _MAP 模式。
-
執行以下命令為您的叢集和 IAM 角色建立存取項目:
aws eks create-access-entry --cluster-name <CLUSTER_NAME> --principal-arn <IAM_PRINCIPAL_ARN> --region <REGION>輸出訊息類似下列內容:
{ "accessEntry": { "clusterName": "<CLUSTER_NAME>", "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "kubernetesGroups": [], "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/user/<ACCOUNT_ID>/new-cluster-admin/26c6d1f8-4211-3fe0-f9d2-734b912dcd9a", "createdAt": "2024-02-13T19:27:45.370000+00:00", "modifiedAt": "2024-02-13T19:27:45.370000+00:00", "tags": {}, "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "type": "STANDARD" } } -
執行以下命令將 AmazonEKSClusterAdminPolicy 關聯到 Amazon EKS 叢集和 IAM 角色:
aws eks associate-access-policy --cluster-name <CLUSTER_NAME> \ --principal-arn <IAM_PRINCIPAL_ARN> \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster \ --region <REGION>輸出訊息類似下列內容:
{ "accessEntry": { "clusterName": "<CLUSTER_NAME>", "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "kubernetesGroups": [], "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<cluster_name>/user/<ACCOUNT_ID>/new-cluster-admin/7ec6efb3-31c8-edcf-3039-ca2b38e0d708", "createdAt": "2024-02-25T08:34:06.002000+00:00", "modifiedAt": "2024-02-25T08:34:06.002000+00:00", "tags": {}, "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "type": "STANDARD" } } -
若要更新或產生 kubeconfig 檔案,請執行以下命令以連接到 EKS 叢集:
aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION> -
執行以下命令,確認使用者是否能以管理員身分存取 EKS 叢集:
kubectl auth can-i '*' '*' --all-namespaces
注意: 如果您能以管理員身分存取 EKS 叢集,則輸出會顯示為是。
相關資訊
當我連線至 Amazon EKS API 伺服器時,如何解決「您必須登入伺服器 (未經授權)」錯誤?
eksctl 網站上的 EKS 存取項目
- 語言
- 中文 (繁體)

相關內容
已提問 3 年前
已提問 1 年前