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 verwende ich IRSA in Amazon EKS, um den Zugriff auf einen Amazon S3-Bucket einzuschränken?
Ich möchte den Zugriff auf den Amazon Simple Storage Service (Amazon S3)-Bucket auf Pod-Ebene in Amazon Elastic Kubernetes Service (Amazon EKS) einschränken. Ich möchte auch die Mindestberechtigungen für meine Anwendung mit AWS Identity and Access Management (IAM)-Rollen für Servicekonten (IRSA) beibehalten.
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 von AWS CLI verwendest.
Voraussetzungen: Erstelle einen IAM OpenID Connect (OIDC)-Anbieter für den Cluster.
Eine IAM-Richtlinie und Rolle erstellen
Führe die folgenden Schritte aus:
- Erstelle eine JSON-Datei namens iam-policy.json. Beispiel für eine Richtlinie:
Hinweis: Ersetze YOUR_BUCKET durch den S3-Bucket-Namen. Die vorstehende Beispielrichtlinie schränkt die Amazon S3-Berechtigungen ein, sodass IAM-Benutzer nur Objekte aus einem S3-Bucket auflisten und abrufen können.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::YOUR_BUCKET" }, { "Sid": "List", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::YOUR_BUCKET/*" } ] } - Um die IAM-Richtlinie zu erstellen, führe den folgenden AWS-CLI-Befehl create-policy aus:
Hinweis: Ersetze YOUR_IAM_POLICY_NAME durch den Richtliniennamen.aws iam create-policy \ --policy-name YOUR_IAM_POLICY_NAME \ --policy-document file://iam-policy.json - Erstelle eine IAM-Rolle und verknüpfe sie mit dem Cluster-Service-AWS-Konto.
- Vergewissere dich, dass du die IAM-Richtlinie und -Rolle richtig konfiguriert hast.
- (Optional) Führe den folgenden Befehl aus, um den Rollennamen abzurufen:
**Hinweis:**Ersetze SERVICE_ACCOUNT_NAME durch den Service-Kontonamen und NAMESPACE_NAME durch den Namespace-Namen.kubectl get sa SERVICE_ACCOUNT_NAME -n NAMESPACE_NAME -o yaml | grep eks.amazonaws.com/role-arn | cut -d '/' -f 3
Beispielausgabe:eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE
Einen Amazon EKS-Pod erstellen
Vergewissere dich, dass dein Pod die IAM-Rolle mit den richtigen Berechtigungen übernehmen kann. Gehe wie folgt vor, um die Anwendung in der AWS-CLI durch ein offizielles Image zu ersetzen:
- Erstelle eine YAML-Datei namens aws-cli-pod.yaml. Beispieldatei:
Hinweis: Ersetze NAMESPACE_NAME durch den Namespace und SERVICE_ACCOUNT_NAME durch den Kubernetes-Service-Kontonamen.apiVersion: v1 kind: Pod metadata: name: aws-cli namespace: NAMESPACE_NAME spec: serviceAccountName: SERVICE_ACCOUNT_NAME containers: - name: aws-cli image: amazon/aws-cli:latest command: - sleep - "3600" imagePullPolicy: IfNotPresent restartPolicy: Always - Führe den folgenden Befehl aus, um einen Amazon EKS-Pod zu erstellen:
kubectl apply -f ./aws-cli-pod.yaml
Teste den Amazon EKS-Pod
Hinweis: Im folgenden Beispiel kann der Pod Objekte aus dem YOUR_BUCKET-S3-Bucket auflisten und abrufen.
Gehe wie folgt vor, um zu bestätigen, dass der Pod die richtige IAM-Rolle und die richtigen Aktionen für Amazon S3 verwendet:
-
Führe den folgenden Befehl aus, um die IAM-Rolle zu finden, die die Anmeldeinformationen verwendet:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws sts get-caller-identityHinweis: Ersetze NAMESPACE_NAME durch den Namespace-Namen.
Beispielausgabe:{ "UserId": "AIDACKCEVSQ6C2EXAMPLE:botocore-session-123456789012", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012" } -
Stelle sicher, dass der Pod die richtigen Berechtigungen für den S3-Bucket hat.
Führe den folgenden Befehl aus, um zu überprüfen, ob der Pod über s3:ListBuckets-Berechtigungen verfügt:kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 ls s3://YOUR_BUCKETHinweis: Ersetze NAMESPACE_NAME durch den Namespace-Namen und YOUR_BUCKET durch den Bucket.
Beispielausgabe:2025-03-25 22:28:06 14 hello_s3.txtFühre den folgenden Befehl aus, um zu überprüfen, ob der Pod über s3:getObject-Berechtigungen verfügt:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3api get-object --bucket YOUR_BUCKET --key DIR/S3_OBJECT_FILE S3_FILE_NAME_LOCALHinweis: Ersetze NAMESPACE_NAME durch den Namespace-Namen und YOUR_BUCKET durch den Bucket. Ersetze außerdem DIR/S3_OBJECT_FILE durch den Verzeichnis- und Objektdateinamen und S3_FILE_NAME_LOCAL durch das neue lokale Amazon S3-Objekt.
Beispielausgabe:{ "AcceptRanges": "bytes", "LastModified": "2025-03-14T01:49:38+00:00", "ContentLength": 19, "ETag": "\"678b33365329cce6cd2bb1882e62fe3a\"", "ContentType": "text/plain", "ServerSideEncryption": "AES256", "Metadata": {} } -
Führe den folgenden Befehl aus, um zu überprüfen, ob der Pod keine s3:deleteObject-Berechtigungen hat:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 rm s3://YOUR_BUCKET/DEMO_TEST_FILEHinweis: Ersetze NAMESPACE_NAME durch den Namespace-Namen und YOUR_BUCKET durch den Bucket. Ersetze außerdem DEMO_TEST_FILE durch die Amazon S3-Objektdatei.
Wenn der Pod keine s3:deleteObject-Berechtigungen hat, erhältst du in der Ausgabe den folgenden Fehler Zugriff verweigert:delete failed: s3://YOUR_BUCKET/DEMO_TEST_FILE An error occurred (AccessDenied) when calling the DeleteObject operation: User: arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012 is not authorized to perform: s3:DeleteObject on resource: "arn:aws:s3:::YOUR_BUCKET/DEMO_TEST_FILE" because no identity-based policy allows the s3:DeleteObject action command terminated with exit code 1
Probleme beheben
Wichtig: Erstelle immer neue Pods, nachdem du Änderungen vorgenommen hast. Amazon EKS berücksichtigt Aktualisierungen nur in neu erstellten Pods, nicht in den vorhandenen.
NoSuchBucket-Fehler
Wenn du den S3-Bucket nicht finden kannst, weil er nicht existiert, erhältst du die folgende Fehlermeldung:
„Beim Aufrufen der Operation ListObjectsV2 ist ein Fehler aufgetreten (NoSuchBucket): Der angegebene Bucket ist nicht vorhanden, der Befehl wurde mit dem Exit-Code 254 beendet“
Um dieses Problem zu beheben, stelle sicher, dass du in den Befehlen den richtigen S3-Bucket-Namen verwendest.
NoSuchKey-Fehler
Wenn du nicht von einem bestimmten S3-Bucket-Pfad herunterladen kannst, erhältst du die folgende Fehlermeldung:
„Beim Aufrufen der GetObject-Operation ist ein Fehler aufgetreten (NoSuchKey): Der angegebene Schlüssel ist nicht vorhanden.“
Um dieses Problem zu beheben, stelle sicher, dass der Amazon S3-Pfad und der Dateiname in dem AWS-Konto vorhanden sind.
AccessDenied-Fehler
Wenn du nicht berechtigt bist, eine Aktion im S3-Bucket auszuführen, erhältst du eine Fehlermeldung. Beispielsweise tritt der folgende Fehler auf, wenn du die ListObjectsV2-Aktion nicht ausführen kannst:
„Beim Aufrufen der Operation ListObjectsV2 ist ein Fehler aufgetreten (AccessDenied): User: arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012 is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:::YOUR_BUCKET" because no identity-based policy allows the s3:ListBucket action command terminated with exit code 254"
Um dieses Problem zu beheben, stelle sicher, dass du die Berechtigung zu der IAM-Rollenrichtlinie hinzugefügt hast.
Wenn im IAM-Identitätsanbieter ein Fehler auftritt, erhältst du die folgende Fehlermeldung:
„Beim Aufrufen des Vorgangs AssumeRoleWithWebIdentity ist ein Fehler aufgetreten (AccessDenied): Nicht berechtigt, den Befehl „sts:AssumeRoleWithWebIdentity“ auszuführen, der mit dem Exit-Code 254 beendet wurde"
Bestätige die folgenden Konfigurationen, um dieses Problem zu beheben:
- Der IAM-OIDC-Anbieter für den Cluster ist korrekt konfiguriert.
- Die Vertrauensbeziehung der IAM-Rollen ist korrekt konfiguriert.
- Das Service-Konto verwendet die richtige IAM-Rolle.
InvalidIdentityToken-Fehler
Wenn Amazon EKS den OIDC-Anbieter des Kontos nicht finden kann, erhältst du die folgende Fehlermeldung:
„Beim Aufrufen des Vorgangs AssumeRoleWithWebIdentity ist ein Fehler aufgetreten (InvalidIdentityToken): In dem Konto wurde kein OpenIDConnect-Anbieter für den Befehl https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE gefunden, der mit dem Exit-Code 254 beendet wurde"
Um dieses Problem zu beheben, stelle sicher, dass der Identitätsanbieter für den OIDC in IAM vorhanden ist.
Ähnliche Informationen
Testen von IAM-Richtlinien mit dem IAM-Richtliniensimulator
Aktionen, Ressourcen und Bedingungsschlüssel für AWS Services
- Themen
- Containers
- Sprache
- Deutsch

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