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.
Warum kann ich keine IAM-Rolle für das Servicekonto in meinem Amazon EKS-Pod verwenden?
Ich möchte eine AWS Identity and Access Management (IAM)-Rolle für ein AWS-Servicekonto (IRSA) verwenden. Mein Amazon Elastic Kubernetes Service (Amazon EKS)-Pod kann die zugewiesene IAM-Rolle jedoch nicht übernehmen. Oder mein Pod verwendet stattdessen die Standard-IAM-Rolle, die dem Amazon EKS-Knoten zugewiesen ist.
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.
Stelle sicher, dass du einen IAM-OIDC-Identitätsanbieter für deinen Amazon EKS-Cluster hast
Erstelle einen IAM-OpenID-Connect (OIDC)-Anbieter für deinen Cluster, falls du noch keinen hast. Du benötigst einen OIDC-Anbieter für deinen Cluster, um eine IRSA verwenden zu können.
Führe dann die folgenden Schritte aus, um zu überprüfen, ob du den OIDC-Anbieter richtig konfiguriert hast:
- Öffne die IAM-Konsole.
- Wähle im Navigationsbereich Identitätsanbieter aus.
- Identifiziere und notiere dir unter Anbieter die OIDC-Anbieter-URL.
- Öffne in einem separaten Tab oder Fenster die Amazon-EKS-Konsole.
- Wähle im Navigationsbereich die Option Cluster aus.
- Wähle deinen Cluster und wähle dann den Tab Konfiguration aus.
- Überprüfe unter Details den Wert der OpenID-Connect-Anbieter-URL. Stelle sicher, dass sie mit der OIDC-Anbieter-URL in der IAM-Konsole übereinstimmt.
- Wenn die URLs nicht übereinstimmen, musst du einen neuen IAM-OIDC-Anbieter erstellen.
Validiere deine IAM-Rollenrichtlinien und die Konfiguration deiner Vertrauensrichtlinien
IAM-Probleme treten auf, wenn deine IAM-Rolle nicht über alle erforderlichen Berechtigungen verfügt. Oder die Vertrauensbeziehungsrichtlinie deiner IAM-Rolle könnte auch Syntaxfehler enthalten, wenn du deine IAM-Rolle mit der AWS-Managementkonsole oder der AWS-CLI erstellt hast.
Führe die folgenden Schritte aus, um deine IAM-Rollenrichtlinien zu validieren und deine Vertrauensrichtlinie auf Syntaxfehler zu überprüfen:
- Öffne die IAM-Konsole.
- Wähle im Navigationsbereich Rollen aus und wähle dann deine Rolle aus.
- Wähle den Tab Berechtigungen aus und stelle dann sicher, dass du der Rolle alle für deine Konfiguration erforderlichen Berechtigungen zugewiesen hast.
- Wähle den Tab Vertrauensbeziehungen und dann Vertrauensbeziehung bearbeiten aus.
- Stelle im Richtliniendokument für deine Vertrauensbeziehung sicher, dass das Format deiner Richtlinie dem Format der folgenden JSON-Richtlinie entspricht:
Überprüfe in deiner JSON-Richtlinie das Format der Federated-Eigenschaftszeile und der StringEquals-Eigenschaftszeile. Bestätige für Federated, dass du den AWS-Regionalcode, die AWS-Konto-ID und die eindeutige OIDC-ID korrekt formatiert hast. Stelle für StringEquals sicher, dass du den Regionalcode, die eindeutige OIDC-ID, den Kubernetes-Namespace und den Kubernetes-Servicekontonamen korrekt formatiert hast.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::your-account-id:oidc-provider/oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:sub": "system:serviceaccount:your-namespace:your-service-account", "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:aud": "sts.amazonaws.com" } } } ] } - Wenn du dein Richtliniendokument bearbeitest, um Formatierungsfehler zu korrigieren, wähle Vertrauensrichtlinie aktualisieren aus.
Vergewissere dich, dass dein Servicekonto existiert und eine korrekt formatierte Anmerkung für den Amazon-Ressourcennamen (ARN) der IAM-Rolle enthält
Führe die folgenden Schritte aus:
- Führe den folgenden Befehl aus, um zu bestätigen, dass dein Kubernetes-Servicekonto existiert:
Hinweis: Ersetze YOUR_ACCOUNT_NAME durch deinen Kontonamen und YOUR_NAMESPACE durch deinen Namespace.kubectl get serviceaccount YOUR_ACCOUNT_NAME -n YOUR_NAMESPACE -o yaml
Wenn der vorhergehende Befehl keinen Servicekontonamen zurückgibt, erstelle ein Servicekonto. Weitere Informationen findest du unter Verwenden von mehr als einem Servicekonto auf der Kubernetes-Website. - Vergewissere dich, dass dein Servicekonto den Namen verwendet, den du erwartest. Stelle außerdem sicher, dass du die Anmerkung role-arn korrekt formatiert hast. Beispiel:
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/my-example-iam-role name: my-example-serviceaccount namespace: my-test-namespace
Verwende einen Test-Pod, um zu überprüfen, ob das Servicekonto funktioniert
Führe einen Test-Pod aus, um zu überprüfen, ob das Servicekonto ordnungsgemäß funktioniert, Umgebungsvariablen mounten kann und die angegebene IAM-Rolle übernehmen kann. Führe die folgenden Schritte aus:
-
Erstelle eine lokale YAML-Datei namens awscli-pod.yaml. Beispiel:
apiVersion: v1 kind: Pod metadata: name: awscli labels: app: awscli spec: serviceAccountName: YOUR_SERVICE_ACCOUNT containers: - image: amazon/aws-cli command: - "sleep" - "604800" imagePullPolicy: IfNotPresent name: awscli restartPolicy: AlwaysHinweis: Ersetze YOUR_SERVICE_ACCOUNT durch deinen Kubernetes-Servicekontonamen.
-
Um den Test-Pod aus der YAML-Datei in deinem Namespace zu erstellen, führe den folgenden Befehl aus:
kubectl apply -f ./awscli-pod.yaml -n YOUR_NAMESPACEHinweis: Ersetze YOUR_NAMESPACE durch deinen Namespace.
-
Führe den folgenden Befehl aus, um zu bestätigen, dass der awscli-Pod über die Umgebungsvariablen AWS_ROLE_ARN und AWS_WEB_IDENTITY_TOKEN_FILE verfügt:
kubectl exec -n YOUR_NAMESPACE awscli -- env | grep AWSBeispielausgabe:
AWS_ROLE_ARN=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token -
Führe den folgenden Befehl aus, um zu bestätigen, dass der Test-Pod die richtige IAM-Rolle verwendet:
kubectl exec -it awscli -n YOUR_NAMESPACE -- aws sts get-caller-identityBeispielausgabe:
{ "UserId": "REDACTEDY471234567890:botocore-session-1632772568", "Account": "012345678912", "Arn": "arn:aws:sts::012345678912:assumed-role/your-iam-role/botocore-session-1632772568" }Notiere dir den Wert für Arn. Stelle sicher, dass die IAM-Rolle die Rolle ist, die du im Pod verwenden möchtest.
-
Führe den folgenden Befehl aus, um den awscli-Pod zu löschen:
kubectl delete -f ./awscli-pod.yaml -n YOUR_NAMESPACEHinweis: Ersetze YOUR_NAMESPACE durch deinen Namespace.
Wenn der awscli-Pod die richtige IAM-Rolle anzeigt, funktioniert die Funktion „IAM-Rollen für Servicekonten“ wie erwartet. Die vorherigen Schritte bestätigen, dass du das IAM-Token korrekt auf dem Pod bereitgestellt hast. Wenn deine Anwendung die IAM-Tokendatei immer noch nicht verwenden kann, liegt möglicherweise ein Problem auf Anwendungs- oder SDK-Ebene vor. Beispielsweise kann es Probleme damit geben, wie die Anwendung AWS-Anmeldeinformationen verwendet, oder mit nicht unterstützten SDK-Versionen. Weitere Informationen findest du unter Verwenden der Standard-Anmeldeinformationen-Anbieterkette und Verwenden von IRSA mit der AWS SDK.
- Themen
- Containers
- Sprache
- Deutsch

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