Direkt zum Inhalt

Wie kann ich die API für Amazon EKS-Zugriffseinträge verwenden, um den Zugriff auf einen EKS-Cluster wiederherzustellen?

Lesedauer: 4 Minute
0

Aufgrund einer Benutzeränderung mit einmaliger Anmeldung oder einer Löschung oder Beschädigung von aws-auth ConfigMap kann ich nicht auf meinen Amazon Elastic Kubernetes Service (Amazon EKS) zugreifen.

Kurzbeschreibung

Wenn du den Zugriff auf den EKS-Cluster verlierst, wird beim Ausführen von kubectl-Befehlen ein Fehler ähnlich dem folgenden angezeigt:

„error: You must be logged in to the server (Unauthorized).“

Um wieder Zugriff auf den Cluster zu erhalten, verwende Zugriffseinträge, um die Berechtigungen der AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Prinzipale zu verwalten. Du tust dies von außerhalb des Amazon EKS-Clusters.

Hinweis: Wenn der EKS-Cluster-Ersteller vorhanden ist, übernimm den IAM-Prinzipal des EKS-Cluster-Erstellers, um dich beim Cluster anzumelden und auf den Cluster zuzugreifen. Standardmäßig ist der EKS-Cluster-Ersteller der Administrator des Clusters. Mit dem folgenden Prozess wird eine Administratorrolle erstellt, die mit der ursprünglichen IAM-Rolle des Cluster-Erstellers koexistiert.

Lösung

Voraussetzungen:

  • Installiere kubectl.
  • Installiere und konfiguriere die neueste Version der AWS Command Line Interface (AWS CLI).
  • Du hast eine IAM-Rolle mit den folgenden Berechtigungen: CreateAccessEntry, ListAccessEntries, DescribeAccessEntry, DeleteAccessEntry und UpdateAccessEntry.

**Hinweis:**Wenn du beim Ausführen von Befehlen in AWS CLI Fehlermeldungen erhältst, findest du weitere Informationen unter Beheben von AWS CLI-Fehlern. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Verwendung der API für AWS EKS-Zugriffseinträge, um den Zugriff auf den Amazon EKS-Cluster zu verwalten

Hinweis: Ersetze in den folgenden Befehlen Folgendes:
Ersetze <ACCOUNT_ID> durch die Konto-ID des Quellkontos, in dem der EKS-Cluster existiert.
Ersetze <REGION> durch den Namen deiner AWS-Region.
Ersetze <CLUSTER_NAME> durch den Namen deines EKS-Clusters.
Ersetze <IAM_PRINCIPAL_ARN> durch den ARN der Rolle, für die du Administratorrechte haben möchtest.

Gehe wie folgt vor, um eine API für AWS EKS-Zugriffseinträge zur Verwaltung des Zugriffs auf den Amazon EKS-Cluster zu verwenden:

  1. Übernimm die IAM-Rolle auf dem Hostcomputer, auf dem kubectl installiert ist, mit den folgenden Berechtigungen:

    {
        "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. Führe den folgenden Befehl aus, um deine Identität zu bestätigen:

    aws sts get-caller-identity

    Notiere dir den ARN in der Ausgabe des Befehls. Er sieht dem folgenden Beispiel ähnlich: arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin

  3. Führe den folgenden Befehl aus, um den aktuellen Authentifizierungsmodus des Amazon EKS-Clusters zu validieren:

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

    Wenn der aktuelle Authentifizierungsmodus des Amazon EKS-Clusters API_AND_CONFIG_MAP ist, verfügt der Cluster bereits über den erforderlichen Zugriffsmodus. Fahre mit Schritt 5 fort.

  4. Führe den folgenden Befehl aus, um den Authentifizierungsmodus des Amazon EKS-Clusters zu aktualisieren:

    aws eks update-cluster-config --name <CLUSTER_NAME> --access-config authenticationMode=API_AND_CONFIG_MAP --region <REGION>

    Hinweis: Du kannst von einem CONFIG_MAP-Authentifizierungsmodus in einen API-Modus wechseln, aber du kannst nicht von einem API-Modus zurück in den CONFIG_MAP-Modus wechseln.

  5. Führe den folgenden Befehl aus, um einen Zugriffseintrag für den Cluster und die IAM-Rolle zu erstellen:

    aws eks create-access-entry --cluster-name <CLUSTER_NAME> --principal-arn <IAM_PRINCIPAL_ARN> --region <REGION>

    Die Ausgabe sieht etwa wie folgt aus:

    {
        "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. Führe den folgenden Befehl aus, um AmazonEKSClusterAdminPolicy dem Amazon EKS-Cluster und der IAM-Rolle zuzuordnen:

    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>

    Die Ausgabe sieht etwa wie folgt aus:

    {
        "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. Um die Datei kubeconfig zu aktualisieren oder zu generieren, führe den folgenden Befehl aus, um eine Verbindung zum EKS-Cluster herzustellen:

    aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION>
  8. Führe den folgenden Befehl aus, um zu überprüfen, ob der Benutzer als Administrator auf den EKS-Cluster zugreifen kann:

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

Hinweis: Wenn du als Administrator auf den EKS-Cluster zugreifen kannst, wird in der Ausgabe Ja angezeigt.

Ähnliche Informationen

Ein tiefer Einblick in die vereinfachten Amazon EKS-Zugriffsmanagementsteuerungen

Wie behebe ich den Fehler „You must be logged in to the server (Unauthorized)“, wenn ich eine Verbindung zum Amazon-EKS-API-Server herstelle?

EKS access entries (EKS-Zugriffseinträge) auf der eksctl-Website

AWS OFFICIALAktualisiert vor 2 Jahren