Wie behebe ich IRSA-Fehler in Amazon EKS?
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:
- Öffnen Sie die Amazon-EKS-Konsole.
- Wählen Sie den Namen Ihres Clusters aus und wählen Sie dann die Registerkarte Übersicht.
- Notieren Sie sich im Abschnitt Details den Wert der OIDC-Anbieter-URL.
- Öffnen Sie die IAM-Konsole.
- Wählen Sie im Navigationsbereich unter Zugriffsverwaltung die Option Identität der Anbieter aus.
- Wählen Sie den Anbieter aus, der der URL für Ihren Cluster entspricht.
Gehen Sie wie folgt vor, um die Zielgruppe zu ändern:
- Öffnen Sie die IAM-Konsole.
- Wählen Sie im Navigationsbereich unter Zugriffsverwaltung die Option Identität der Anbieter aus.
- Wählen Sie den Anbieter aus, der der URL für Ihren Cluster entspricht.
- Wählen Sie Aktionen und dann Zielgruppe hinzufügen aus.
- 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?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 7 Monaten