Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie behebe ich Probleme mit einem OIDC-Anbieter und IRSA in Amazon EKS?
Meine Pods können die AWS Identity and Access Management (IAM)-Rollenberechtigungen mit dem Amazon Elastic Kubernetes Service (Amazon EKS)-AWS-Kontotoken nicht verwenden.
Behebung
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Überprüfen, ob du bereits einen IAM-OIDC-Anbieter für den Cluster hast
Wenn kein OpenID Connect (OIDC)-Anbieter existiert, erhältst du eine Fehlermeldung ähnlich der folgenden:
„WebIdentityErr: failed to retrieve credentials\ncaused by: InvalidIdentityToken: No OpenIDConnect provider found in your account for https://oidc.eks.eu-west-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E\n\tstatus code: 400“
Gehe wie folgt vor, um zu überprüfen, ob du bereits einen IAM-OIDC-Anbieter hast:
-
Führe den folgenden AWS-CLI-Befehl describe-cluster aus, um die OIDC-Anbieter-URL des Clusters zu überprüfen:
aws eks describe-cluster --name cluster_name --query "cluster.identity.oidc.issuer" --output textHinweis: Ersetze cluster_name durch den Cluster-Namen.
Beispielausgabe:https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E -
Um die IAM-OIDC-Anbieter im Konto aufzulisten, führe den folgenden Befehl list-open-id-connect-providers aus:
aws iam list-open-id-connect-providers | grep EXAMPLED539D4633E53DE1B716D3041EHinweis: Ersetze EXAMPLED539D4633E53DE1B716D3041E durch die URL des OIDC-Anbieters, den der vorherige Befehl zurückgegeben hat.
Wenn der Befehl eine Ausgabe zurückgibt, hast du bereits einen Anbieter für den Cluster. Wenn der Befehl keine Ausgabe zurückgibt, musst du einen IAM-OIDC-Anbieter erstellen. Beispielausgabe:"Arn": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E"
Überprüfen, ob die IAM-Rolle über die erforderlichen Berechtigungen und eine angehängte IAM-Richtlinie verfügt
Führe die folgenden Schritte aus:
- Öffne die IAM-Konsole.
- Wähle im Navigationsbereich Rollen.
- Wähle die Rolle, die dem Kubernetes-Dienstkonto zugeordnet ist.
- Wähle die Registerkarte Berechtigungen. Überprüfe dann die Richtlinie, die der Rolle zugeordnet ist, um sicherzustellen, dass sie die für die Konfiguration erforderlichen Berechtigungen enthält.
- Wähle die Registerkarte Vertrauensbeziehungen. Stelle dann sicher, dass das Format der IAM-Richtlinie dem Format der folgenden JSON-Richtlinie entspricht:
Oder führe den folgenden Befehl get-role aus, um die Vertrauensbeziehung zu überprüfen:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:SERVICE_ACCOUNT_NAMESPACE:SERVICE_ACCOUNT_NAME", "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com" } } } ] }
Hinweis: Ersetze EKS-IRSA durch den Rollennamen der IAM-Rolle für Dienstkonten (IRSA).aws iam get-role --role-name EKS-IRSA
Beispielausgabe:
Überprüfe in der JSON-Ausgabe den Abschnitt AssumeRolePolicyDocument, um die Vertrauensbeziehungsrichtlinie zu überprüfen.{ "Role": { "Path": "/", "RoleName": "EKS-IRSA", "RoleId": "AROAQ55NEXAMPLELOEISVX", "Arn": "arn:aws:iam::ACCOUNT_ID:role/EKS-IRSA", "CreateDate": "2021-04-22T06:39:21+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com", "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:SERVICE_ACCOUNT_NAMESPACE:SERVICE_ACCOUNT_NAME" } } } ] }, "MaxSessionDuration": 3600, "RoleLastUsed": { "LastUsedDate": "2021-04-22T07:01:15+00:00", "Region": "AWS_REGION" } } } - (Optional) Aktualisiere die Vertrauensbeziehung für die Rolle auf die richtige AWS-Region, den richtigen Kubernetes-Dienstkontonamen oder den Kubernetes-Namespace.
Prüfen, ob du ein Dienstkonto erstellt hast
Führe den folgenden Befehl aus, um zu überprüfen, ob ein Dienstkonto existiert:
kubectl get sa -n YOUR_NAMESPACE
Hinweis: Ersetzen Sie YOUR_NAMESPACE durch Ihren Kubernetes-Namespace.
Beispielausgabe:
NAME SECRETS AGEdefault 1 28d irsa 1 66m
Stelle sicher, dass in der Ausgabe das Dienstkonto aufgeführt ist. Wenn du kein Dienstkonto hast, findest du weitere Informationen unter Dienstkonten für Pods konfigurieren auf der Kubernetes-Website.
Sicherstellen, dass das Dienstkonto die richtigen IAM-Rollenanmerkungen enthält
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Ihr Dienstkonto über die richtigen IAM-Rollenanmerkungen verfügt:
kubectl describe sa irsa -n YOUR_NAMESPACE
Hinweis: Ersetzen Sie irsa durch Ihren Kubernetes-Dienstkontonamen und YOUR\ _NAMESPACE durch Ihren Kubernetes-Namespace.
Beispielausgabe:
Name: irsa Namespace: default Labels: none Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME Image pull secrets: none Mountable secrets: irsa-token-v5rtc Tokens: irsa-token-v5rtc Events: none
Überprüfe die Anmerkungen, um sicherzustellen, dass die IAM-Rolle korrekt ist. Ist dies nicht der Fall, führe den folgenden Befehl aus, um das Dienstkonto zu bearbeiten:
kubectl edit sa -n NAMESPACE
Hinweis: Ersetze NAMESPACE durch deine Namespace.
Aktualisiere dann den Wert für Anmerkungen mit der richtigen IAM-Rolle.
Sicherstellen, dass du den ServiceAccountName im Pod korrekt angegeben hast
Führe den folgenden Befehl aus, um den serviceAccountName zu überprüfen:
kubectl get pod POD_NAME -o yaml -n YOUR_NAMESPACE| grep -i serviceAccountName:
Hinweis: Ersetze POD_NAME mit dem Kubernetes-Pod und YOUR_NAMESPACE durch den Namespace.
Beispielausgabe:
serviceAccountName: irsa
Wenn der Wert in der Ausgabe der falsche Dienstkontoname ist, bearbeite das Bereitstellungsmanifest mit dem richtigen Namen. Stelle dann das Bereitstellungsmanifest erneut bereit.
Die Umgebungsvariablen und Berechtigungen überprüfen
Führe den folgenden Befehl aus, um die Umgebungsvariablen des Pods zu überprüfen:
kubectl -n YOUR_NAMESPACE exec -it POD_NAME -- env | grep AWS
Beispielausgabe:
AWS_REGION=ap-southeast-2 AWS_ROLE_ARN=arn:aws:iam::111122223333:role/EKS-IRSA AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_DEFAULT_REGION=ap-southeast-2
Stelle sicher, dass in der Ausgabe das Dienstkonto aufgeführt ist. Wenn du kein Dienstkonto hast, findest du weitere Informationen unter Dienstkonten für Pods konfigurieren auf der Kubernetes-Website.
Sicherstellen, dass die Anwendung ein unterstütztes AWS-SDK verwendet
Die AWS-SDK-Version muss größer oder gleich der für das AWS-SDK erforderlichen Version sein.
Pods neu erstellen
Wenn du Pods erstellt hast, bevor du IRSA angewendet hast, führe den folgenden Befehl aus, um die Pods neu zu erstellen:
kubectl rollout restart deploy nginx
Beispielausgabe:
deployment.apps/nginx restarted
Führe für Daemonsets- oder Statefulsets-Bereitstellungen den folgenden Befehl aus:
kubectl rollout restart deploy DEPLOYMENT_NAME
Wenn du nur einen Pod erstellt hast, musst du den Pod löschen und neu erstellen. Führe die folgenden Schritte aus:
- Führe den folgenden Befehl aus, um den Pod zu löschen:
Hinweis: Ersetze POD_NAME durch den Namen deines Pods.kubectl delete pod POD_NAME - Führe den folgenden Befehl aus, um den Pod neu zu erstellen:
**Hinweis:**Ersetzen Sie SPEC\ _FILE durch den Dateipfad und den Dateinamen Ihres Kubernetes-Manifests.kubectl apply -f SPEC_FILE
Stellen Sie sicher, dass die Zielgruppe korrekt ist
Wenn Sie den OIDC-Anbieter mit der falschen Zielgruppe erstellt haben, erhalten Sie die folgende Fehlermeldung:
„Error - An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: Falsche Token-Zielgruppe“
Führe den folgenden Befehl get-open-id-connect-provider aus, um den IAM-Identitätsanbieter für den Cluster zu überprüfen:
aws iam get-open-id-connect-provider --open-id-connect-provider-arn arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E
Hinweis: Ersetze ACCOUNT_ID durch die Konto-ID, AWS_REGION durch die Region und EXAMPLED539D4633E53DE1B716D3041E durch die OIDC-Anbieter-URL.
Beispielausgabe:
{ "Url": "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E", "ClientIDList": [ "sts.amazonaws.com" ], "ThumbprintList": [ "9e99a48a9960b14926bb7f3b02e22da2b0ab7280" ], "CreateDate": "2021-01-21T04:29:09.788000+00:00", "Tags": [] }
Stelle in der Ausgabe sicher, dass ClientIDList sts.amazonaws.com ist. Ist dies nicht der Fall, füge der Rolle einen Identitätsanbieter hinzu und gib sts.amazonaws.com für Zielgruppe ein.
Sicherstellen, dass du den richtigen Fingerabdruck konfiguriert hast
Wenn der Fingerabdruck, den du im IAM-OIDC konfiguriert hast, nicht korrekt ist, erhältst du die folgende Fehlermeldung:
„failed to retrieve credentials caused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint“
Um automatisch den richtigen Fingerabdruck zu konfigurieren, verwende eksctl oder die Amazon EKS-Konsole, um den IAM-Identitätsanbieter zu erstellen. Weitere Möglichkeiten, einen Fingerabdruck zu erhalten, findest du unter Abrufen des Fingerabdrucks für einen OpenID Connect-Identitätsanbieter.
(Nur AWS-Region China) Die Umgebungsvariable AWS_DEFAULT_REGION überprüfen
Um einen IRSA-angewendeten Pod oder Daemonset in einem Cluster in der AWS-Region China bereitzustellen, musst du AWS_DEFAULT_REGION in der Pod-Spezifikation festlegen. Wenn du die Umgebungsvariable AWS_DEFAULT_REGION nicht festlegen, erhältst du möglicherweise die folgende Fehlermeldung für den Pod oder Daemonset:
“An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid“
Um die Umgebungsvariable AWS_DEFAULT_REGION zur Pod- oder Daemonset-Spezifikation hinzuzufügen, erstelle ein Bereitstellungsmanifest, das dem folgenden Beispiel ähnelt:
apiVersion: apps/v1kind: Deployment metadata: name: my-app spec: template: metadata: labels: app: my-app spec: serviceAccountName: my-app containers: - name: my-app image: my-app:latest env: - name: AWS_DEFAULT_REGION value: "AWS_REGION" ...
Oder führe den folgenden Befehl aus, um die Umgebungsvariable einzustellen:
kubectl set env deployment deployment_name AWS_DEFAULT_REGION=example_region -n NAMESPACE"
Hinweis: Ersetze deployment_name durch den Bereitstellungsnamen, example_region durch die AWS-Region China und NAMESPACE durch den Namespace.
- Themen
- Containers
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren
AWS OFFICIALAktualisiert vor 10 Monaten
AWS OFFICIALAktualisiert vor 9 Monaten
AWS OFFICIALAktualisiert vor 3 Jahren