跳至內容

如何使用 Amazon EKS 存取項目 API 來復原 EKS 叢集的存取權?

2 分的閱讀內容
0

由於單一登入使用者變更或 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 叢集存取,請完成以下步驟:

  1. 在已安裝 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>/*"
               ]
            }
        ]
    }
  2. 若要確認您的身分識別,請執行下列命令:

    aws sts get-caller-identity

    在命令的輸出中,記下 ARN。它看起來會類似以下範例:arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin

  3. 執行以下命令來驗證 Amazon EKS 叢集的目前驗證模式:

    aws eks describe-cluster --name <CLUSTER_NAME>  --query 'cluster.accessConfig.authenticationMode' --region <REGION>

    如果 Amazon EKS 叢集的目前驗證模式是 API_AND_CONFIG_MAP,則該叢集已經具有所需的存取模式。跳至步驟 5。

  4. 執行下列命令以更新 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 模式。

  5. 執行以下命令為您的叢集和 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"
        }
    }
  6. 執行以下命令將 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"
        }
    }
  7. 若要更新或產生 kubeconfig 檔案,請執行以下命令以連接到 EKS 叢集:

    aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION>
  8. 執行以下命令,確認使用者是否能以管理員身分存取 EKS 叢集:

    kubectl auth can-i '*' '*'  --all-namespaces

注意: 如果您能以管理員身分存取 EKS 叢集,則輸出會顯示為

相關資訊

深入了解簡化的 Amazon EKS 存取管理控制

當我連線至 Amazon EKS API 伺服器時,如何解決「您必須登入伺服器 (未經授權)」錯誤?

eksctl 網站上的 EKS 存取項目

AWS 官方已更新 2 年前