Direkt zum Inhalt

Warum erhalte ich den Fehler „WebIdentityErr“, wenn ich den AWS Load Balancer Controller in Amazon EKS verwende?

Lesedauer: 4 Minute
0

Wenn ich versuche, den AWS Load Balancer Controller in Amazon Elastic Kubernetes Service (Amazon EKS) zu verwenden, erhalte ich die Fehlermeldung „WebIdentityErr“.

Kurzbeschreibung

Wenn Sie den AWS Load Balancer Controller in Amazon EKS verwenden, wird möglicherweise der folgende Fehler angezeigt:

„konnte den vorhandenen LoadBalancer aufgrund von WebIdentityErr nicht finden: Anmeldeinformationen konnten nicht abgerufen werden\nverursacht durch: AccessDenied: Nicht zur Ausführung von sts:AssumeRoleWithWebIdentity autorisiert\n\tstatus code: 403“

Dieser Fehler tritt aus den folgenden Gründen auf:

  • Falsche Dienstkontokonfigurationen
  • Falsches Vertrauensverhältnis der AWS Identity and Access Management (IAM) -Rolle, die Sie im Dienstkonto verwenden

Wenn Sie den AWS Load Balancer Controller verwenden, führen Worker-Knoten die Aufgaben aus. Sie müssen IAM-Berechtigungen verwenden, um diesen Worker-Knoten Zugriff auf die Application Load Balancer- oder Network Load Balancer-Ressourcen zu gewähren. Verwenden Sie IAM-Rollen für das Dienstkonto, um die IAM-Berechtigungen einzurichten. Oder hängen Sie die IAM-Berechtigungen direkt an die IAM-Rollen des Worker-Knotens an. Weitere Informationen finden Sie unter Installation des AWS Load Balancer-Controller auf der Kubernetes-Website.

Lösung

Falsche Dienstkontokonfigurationen

Gehen Sie wie folgt vor, um zu überprüfen, ob Sie Ihr Dienstkonto richtig konfiguriert haben:

  1. Überprüfen Sie den Namen des Dienstkontos, der in Ihrer Bereitstellung definiert ist:

    kubectl describe deploy aws-load-balancer-controller -n kube-system | grep -i "Service Account"
  2. Beschreiben Sie das Dienstkonto:

    kubectl describe sa aws-load-balancer-controller -n kube-system
  3. Überprüfen Sie die Anmerkung zum Dienstkonto für die IAM-Rolle:

    Annotations: eks.amazonaws.com/role-arn:arn:aws:iam::xxxxxxxxxx:role/ AMAZON_EKS_LOAD_BALANCER_CONTROLLER_ROLE
  4. Wenn die Anmerkung fehlt oder falsch ist, aktualisieren Sie die Anmerkung. Stellen Sie sicher, dass Sie die IAM-Rolle korrekt einem Dienstkonto zugeordnet haben:

    kubectl annotate serviceaccount -n SERVICE_ACCOUNT_NAMESPACE SERVICE_ACCOUNT_NAME \ eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME
  5. Starten Sie die AWS Load Balancer Controller-Bereitstellung neu, um die Pod-Anmeldeinformationen zu aktualisieren.

    kubectl rollout restart deployment/aws-load-balancer-controller -n kube-system

Falsche Vertrauensbeziehung zwischen der verwendeten IAM-Rolle und dem Dienstkonto

Wenn Sie die Vertrauensstellung zwischen Ihrer IAM-Rolle und Ihrem Dienstkonto herstellen, können Probleme auftreten. Sehen Sie sich die folgenden Beispiele für häufige Fehler an, die beim Aufbau der Vertrauensbeziehung auftreten.

Die IAM-Rolle oder Vertrauensbeziehung ist für die Aktion „sts:AssumeRoleWithWebIdentity“ nicht korrekt definiert

Stellen Sie sicher, dass die Vertrauensbeziehung für die Aktion sts:AssumeRoleWithWebIdentity und nicht für die Aktion sts:AssumeRole korrekt definiert ist.

Das folgende Beispiel ist eine Vertrauensbeziehung, die nicht korrekt definiert ist:

{
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "xxxxx.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
}

Um dieses Problem zu beheben, definieren Sie die Vertrauensstellung für die Aktion sts:AssumeRoleWithWebIdentity:

{
  "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC-PROVIDER_ID"
        },
        "Action": "sts:AssumeRoleWithWebIdentity",
        "Condition": {
          "StringEquals": {
            "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:sub": "system:serviceaccount:kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",
            "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
          }
        }
      }
    ]
  }

Hinweis: Ersetzen Sie alle Variablen durch Ihre eigenen Werte.

Um dieselbe IAM-Rolle für mehrere Cluster in einem Konto zu verwenden, definieren Sie die Vertrauensbeziehung:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::AWS-ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC-PROVIDER_ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
      }
    }
  ]
}

Falsche OIDC-Anbieter-ID, wenn Sie einen Amazon EKS-Cluster erstellen

Erstellen und verifizieren Sie einen OpenID Connect (OIDC) -Anbieter für Ihren Amazon EKS-Cluster. Stellen Sie sicher, dass die OIDC-Anbieter-ID und die zugehörige AWS-Region korrekt aufgeführt sind. Andernfalls erhalten Sie einen WebIdentityErr-Fehler.

Der Name des Dienstkontos oder sein Namespace wurden nicht korrekt eingegeben

Überprüfen Sie Ihre AWS Load Balancer Controller-Bereitstellung. Wenn Sie Ihre Bereitstellung aktualisieren, stellen Sie sicher, dass Sie den richtigen Dienstkontonamen und den zugehörigen Namespace eingeben.

Fehlende „sts.amazonaws.com“ -Schritte in der Vertrauensbeziehung

Wenn die mit Ihrem EKS-Pod verknüpfte Servicerolle den STS-Vorgang für die AssumeRoleWithWebIdentity-Aktion nicht ausführen kann, aktualisieren Sie die Vertrauensstellung. Um einen STS-Vorgang ausführen zu können, muss die Vertrauensbeziehung sts.amazonaws.com umfassen:

"Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:sub": "system:serviceaccount:kube-system:LOAD_BALANCER_CONTROLLER_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
}

Weitere Informationen zu IAM-Bedingungen mit mehreren Schlüsseln oder Werten finden Sie unter Bedingungen mit mehreren Kontextschlüsseln oder -werten.

AWS OFFICIALAktualisiert vor 2 Jahren