Wie behebe ich IRSA-Fehler in Amazon EKS?

Lesedauer: 6 Minute
0

Ich erhalte Fehler, wenn ich AWS Identity and Access Management (IAM)-Rollen für Servicekonten (IRSA) mit meinem Amazon Elastic Kubernetes Service (Amazon EKS) verwende.

Lösung

Überprüfen Sie das Format des IAM-ARN

Wenn Sie Ihren IAM-ARN in der Anmerkung zum Servicekonto falsch formatiert haben, wird die folgende Fehlermeldung angezeigt:

„Beim Aufrufen der AssumeRoleWithWebIdentity ist ein Fehler aufgetreten (ValidationError)
Bedienung: Anfrage-ARN ist ungültig“

Das Folgende ist ein Beispiel für einen ARN mit einem falschen Format:

eks.amazonaws.com/role-arn: arn:aws:iam::::1234567890:role/example

Da der ARN einen zusätzlichen Doppelpunkt (:) hat, verursacht das falsche ARN-Format die Fehlermeldung. Informationen zum Überprüfen des richtigen ARN-Formats finden Sie unter IAM-ARNs.

Prüfen Sie, ob Sie einen IAM-OIDC-Anbieter für Ihr AWS-Konto haben

Wenn Sie keinen OpenID Connect (OIDC)-Anbieter erstellt haben, erhalten Sie die folgende Fehlermeldung:

„Beim Aufrufen des Vorgangs AssumeRoleWithWebIdentity ist ein Fehler aufgetreten (InvalidIdentityToken): In Ihrem Konto wurde kein OpenIDConnect-Anbieter für https://oidc.eks.region.amazonaws.com/id/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx gefunden“

Rufen Sie die IAM-OIDC-Anbieter-URL ab, um diesen Fehler zu beheben:

aws eks describe-cluster --name cluster name --query "cluster.identity.oidc.issuer" --output text

Anmerkung: Ersetzen Sie den Clusternamen durch Ihren Clusternamen.

Die Ausgabe sieht dem folgenden Beispiel ähnlich:

https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E

Führen Sie den folgenden Befehl aus, um die IAM-OIDC-Anbieter aufzulisten:

aws iam list-open-id-connect-providers | grep EXAMPLED539D4633E53DE1B716D3041E

Anmerkung: Ersetzen Sie EXAMPLED539D4633E53DE1B716D3041E durch die IAM-OIDC-Anbieter-URL.

Wenn der OIDC-Anbieter nicht existiert, führen Sie den folgenden Befehl eksctl aus, um einen OIDC-Anbieter zu erstellen:

eksctl utils associate-iam-oidc-provider --cluster cluster name --approve

Anmerkung: Ersetzen Sie den Clusternamen durch Ihren Clusternamen.

Sie können die AWS-Managementkonsole auch verwenden, um einen IAM-OIDC-Anbieter für Ihren Cluster zu erstellen.

Überprüfen Sie die Zielgruppe des IAM-OIDC-Anbieters

Wenn Sie einen IAM-OIDC-Anbieter erstellen, müssen Sie sts.amazonaws.com als Zielgruppe verwenden. Wenn die Zielgruppe falsch ist, erhalten Sie die folgende Fehlermeldung:

„Beim Aufrufen des Vorgangs AssumeRoleWithWebIdentity ist ein Fehler aufgetreten (InvalidIdentityToken): Falsche Token-Zielgruppe“

Führen Sie den folgenden Befehl aus, um die Zielgruppe des IAM-OIDC-Anbieters zu überprüfen:

aws iam get-open-id-connect-provider --open-id-connect-provider-arn ARN-of-OIDC-provider

Anmerkung: Ersetzen Sie ARN-von-OIDC-Anbieter durch den ARN Ihres OIDC-Anbieters.

Unter dem Parameter ClientIDList muss die Ausgabe sts.amazonaws.com anzeigen. Gehen Sie wie folgt vor, um die Amazon EKS-Konsole zum Überprüfen der Zielgruppe zu verwenden:

  1. Öffnen Sie die Amazon-EKS-Konsole.
  2. Wählen Sie den Namen Ihres Clusters aus und wählen Sie dann die Registerkarte Übersicht.
  3. Notieren Sie sich im Abschnitt Details den Wert der OIDC-Anbieter-URL.
  4. Öffnen Sie die IAM-Konsole.
  5. Wählen Sie im Navigationsbereich unter Zugriffsverwaltung die Option Identität der Anbieter aus.
  6. Wählen Sie den Anbieter aus, der der URL für Ihren Cluster entspricht.

Gehen Sie wie folgt vor, um die Zielgruppe zu ändern:

  1. Öffnen Sie die IAM-Konsole.
  2. Wählen Sie im Navigationsbereich unter Zugriffsverwaltung die Option Identität der Anbieter aus.
  3. Wählen Sie den Anbieter aus, der der URL für Ihren Cluster entspricht.
  4. Wählen Sie Aktionen und dann Zielgruppe hinzufügen aus.
  5. Fügen Sie sts.amazonaws.com hinzu.

Stellen Sie sicher, dass Sie die IAM-OIDC-Ressource mit einem Fingerabdruck eines Stammzertifikats erstellt haben

Wenn Sie keinen Fingerabdruck eines Stammzertifikats verwendet haben, um den OIDC-Anbieter zu erstellen, wird die folgende Fehlermeldung angezeigt:

„Beim Aufrufen des Vorgangs AssumeRoleWithWebIdentity ist ein Fehler aufgetreten (InvalidIdentityToken): Das HTTPS-Zertifikat des OpenIDConnect-Anbieters entspricht nicht dem konfigurierten Fingerabdruck“

Anmerkung: Fingerabdrücke von Nicht-Root-Zertifikaten werden jährlich erneuert. Fingerabdrücke von Stammzertifikaten werden alle zehn Jahre erneuert. Daher empfiehlt es sich, bei der Erstellung eines IAM-OIDC einen Fingerabdruck eines Stammzertifikats zu verwenden.

Sie verwenden beispielsweise einen der folgenden Dienste, um Ihr IAM-OIDC zu erstellen:

  • AWS Command Line Interface (AWS CLI)
  • AWS Tools für PowerShell
  • IAM API

In diesem Fall müssen Sie den Fingerabdruck manuell abrufen. Wenn Sie Ihr IAM-OIDC in der IAM-Konsole erstellt haben, empfiehlt es sich, den Fingerabdruck manuell abzurufen. Verwenden Sie diesen Fingerabdruck, um zu überprüfen, ob die Konsole den richtigen IAM-OIDC erhalten hat.

Führen Sie den folgenden Befehl aus, um den Fingerabdruck und das Verfallsdatum des Stammzertifikats zu ermitteln:

echo | openssl s_client -servername oidc.eks.your-region-code.amazonaws.com -showcerts -connect oidc.eks.your-region-code.amazonaws.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/{cert=""} {cert=cert $0 "\n"} /-----END CERTIFICATE-----/{last_cert=cert} END{printf "%s", last_cert}' | openssl x509 -fingerprint -noout -dates | sed 's/://g' | awk -F= '{print tolower($2)}'

Anmerkung: Ersetzen Sie your-region-codedurch die AWS-Region, in der sich Ihr Cluster befindet.

Beispielausgabe:

9e99a48a9960b14926bb7f3b02e22da2b0ab7280 sep 2 000000 2009 gmt jun 28 173916 2034 gmt

In der vorherigen Ausgabe ist 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 der Fingerabdruck, sep 2 000000 2009 gmt das Startdatum des Zertifikats und 28. Juni 173916 2034 das Ablaufdatum des Zertifikats.

Überprüfen Sie die Konfiguration der Vertrauensrichtlinie Ihrer IAM-Rolle

Wenn Sie die Vertrauensrichtlinie der IAM-Rolle falsch konfiguriert haben, wird die folgende Fehlermeldung angezeigt:

Beim Aufrufen des Vorgangs AssumeRoleWithWebIdentity ist ein Fehler aufgetreten (AccessDenied): Nicht zur Ausführung von sts:AssumeRoleWithWebIdentity autorisiert“

Um dieses Problem zu beheben, stellen Sie sicher, dass Sie den richtigen IAM-OIDC-Anbieter verwenden. Wenn der IAM-OIDC-Anbieter korrekt ist, überprüfen Sie die IAM-Rolle, um festzustellen, ob die Bedingungen der Vertrauensrichtlinie korrekt konfiguriert sind.

Stellen Sie sicher, dass Ihre Pod-Identity-Webhook-Konfiguration vorhanden und gültig ist

Der Pod-Identity-Webhook injiziert die erforderlichen Umgebungsvariablen und das projizierte Volumen. Wenn Sie versehentlich Ihre Webhook-Konfiguration gelöscht oder geändert haben, funktioniert IRSA nicht mehr.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Ihre Webhook-Konfiguration vorhanden und gültig ist:

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Wenn die pod-identity-webhook-Konfiguration nicht existiert, führen Sie den folgenden Befehl aus, um sie zu erstellen:

CLUSTER_CA=$(aws eks describe-cluster --name CLUSTER_NAME --region REGION_CODE --query 'cluster.certificateAuthority.data' --output text);
cat << EOF | kubectl apply -f -
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
  name: pod-identity-webhook
webhooks:
- name: iam-for-pods.amazonaws.com
  clientConfig:
    url: "https://127.0.0.1:23443/mutate"
    caBundle: $CLUSTER_CA
  failurePolicy: Ignore
  rules:
  - operations: [ "CREATE" ]
    apiGroups: [""]
    apiVersions: ["v1"]
    resources: ["pods"]
    scope: "*"
  reinvocationPolicy: IfNeeded
  sideEffects: None
  admissionReviewVersions: ["v1beta1"]
EOF

Anmerkung: Ersetzen Sie CLUSTER_NAME durch Ihren Clusternamen und REGION_CODE durch Clusterregion.

Stellen Sie sicher, dass Ihr Pod-Identity-Webhook Umgebungsvariablen in Ihre Pods injiziert, die IRSA verwenden

Führen Sie einen der folgenden Befehle aus, um zu überprüfen, ob Ihr Pod-Identity-Webhook Umgebungsvariablen in Ihre Pods einfügt, die IRSA verwenden:

kubectl get pod <pod-name> -n <ns> -o yaml | grep aws-iam-token

-oder-

kubectl get pod <pod-name> -n <ns> -o yaml | grep AWS_WEB_IDENTITY_TOKEN_FILE

Stellen Sie sicher, dass Sie unterstützte AWS-SDKs verwenden

Überprüfen Sie Ihre AWS-SDKs. Stellen Sie sicher, dass Sie eine AWS-SDK-Version verwenden, mit der Sie über die OIDC-Web-Identity-Tokendatei eine IAM-Rolle übernehmen können.

Weitere Informationen

Warum kann ich keine IAM-Rolle für das Servicekonto in meinem Amazon EKS-Pod verwenden?

Wie behebe ich Probleme mit einem OIDC-Anbieter und IRSA in Amazon EKS?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten