Warum schlägt meine Amazon-EMR-Anwendung mit der HTTP 403 AmazonS3Exception „Zugriff verweigert“ fehl?
Wenn ich eine Anwendung an einen Amazon EMR-Cluster übermittle, schlägt die Anwendung fehl und es wird eine AmazonS3Exception vom Typ HTTP 403 „Zugriff verweigert“ angezeigt.
Lösung
Wenn du die Berechtigungen nicht richtig konfigurierst, erhältst du möglicherweise die Fehlermeldung „Access Denied“ auf Amazon EMR oder Amazon Simple Storage Service (Amazon S3).
Beispiel für eine Fehlermeldung:
java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 8B28722038047BAA; S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=), S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=
Überprüfung der Anmeldeinformationen oder der IAM-Rolle, die im Anwendungscode angegeben sind
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.
Führe den Befehl ls auf dem Primärknoten des Amazon EMR-Clusters aus:
aws s3 ls s3://doc-example-bucket/abc/
Hinweis: Ersetze s3://doc-example-bucket/abc/ durch deinen Amazon S3-Pfad.
Wenn der vorherige Befehl erfolgreich ist, verursachen die Anmeldeinformationen oder die AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagament)-Rolle den Fehler Access Denied .
Gehe wie folgt vor, um dieses Problem zu beheben:
- Vergewissere dich, dass die Anwendung die erwarteten Anmeldeinformationen verwendet oder die erwartete IAM-Rolle übernimmt.
- Um zu überprüfen, ob die Rolle über Berechtigungen für den Amazon S3-Pfad verfügt, verwende die AWS CLI, um die IAM-Rolle zu übernehmen. Führe dann eine Beispielanforderung an den S3-Pfad durch.
Überprüfe die Richtlinie für die Amazon EC2-Instance-Profilrolle
Wenn das Amazon Elastic Compute Cloud (Amazon EC2)-Instance-Profil nicht über die erforderlichen Lese- und Schreibberechtigungen für die S3-Buckets verfügt, erhältst du möglicherweise den Fehler Access Denied.
Hinweis: Standardmäßig erben Anwendungen den Amazon S3-Zugriff von der IAM-Rolle für das Amazon-EC2-Instance-Profil. Stelle sicher, dass die IAM-Richtlinien, die der Rolle zugeordnet sind, die erforderlichen S3-Operationen für die Quell- und Ziel-Buckets zulassen.
Um zu überprüfen, ob du die erforderliche Leseberechtigung hast, führe den Befehl ls aus:
aws s3 ls s3://doc-example-bucket/myfolder/
Beispielausgabe:
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
-oder-
Führe den folgenden Befehl aus:
hdfs dfs -ls s3://doc-example-bucket/myfolder
Beispielausgabe:
ls: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: RBT41F8SVAZ9F90B; S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=; Proxy: null), S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=
Stelle sicher, dass die Instance-Profilrolle über die erforderlichen Lese- und Schreibberechtigungen für die S3 Buckets verfügt.
Beispiel für eine IAM-Richtlinie:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListObjectsInBucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::doc-example-bucket" ] }, { "Sid": "AllObjectActions", "Effect": "Allow", "Action": "s3:*Object*", "Resource": [ "arn:aws:s3:::doc-example-bucket/*" ] } ] }
Überprüfung der IAM-Rolle auf die EMRFS-Rollenzuweisung
Wenn du eine Sicherheitskonfiguration verwendest, um IAM-Rollen für Amazon EMR File System (EMRFS) anzugeben, verwende die Rollenzuweisung. Deine Anwendung erbt die S3-Berechtigungen von der IAM-Rolle auf der Grundlage der Rollenzuweisungskonfiguration.
Die den Rollen angehängte IAM-Richtlinie muss über die erforderlichen S3-Berechtigungen für die Quell- und Ziel-Buckets verfügen. Informationen zur Angabe von IAM-Rollen für EMRFS-Anforderungen an Amazon S3 findest du unter Einrichten einer Sicherheitskonfiguration mit IAM-Rollen für EMRFS.
Überprüfung der Amazon S3-VPC-Endpunktrichtlinie
Wenn die Subnetz-Routing-Tabelle des EMR-Clusters eine Route zu einem Amazon S3-Endpunkt einer Virtual Private Cloud (VPC) enthält, stelle sicher, dass die Endpunktrichtlinie die erforderlichen Amazon S3-Operationen zulässt.
Verwendung der AWS CLI
Führe den AWS CLI-Kommentar describe-vpc-endpoints aus, um die Endpunktrichtlinie zu überprüfen:
aws ec2 describe-vpc-endpoints --vpc-endpoint-ids "vpce-########"
Hinweis: Ersetze vpce-######## durch deine VPC-ID.
Führe den Befehl modify-vpc-endpoint aus, um die Endpunktrichtlinie zu ändern:
aws ec2 modify-vpc-endpoint --vpc-endpoint-id "vpce-########" --policy-document file://policy.json
Hinweis: Ersetze --vpc-endpoint-id und den JSON-Dateipfad.
Verwendung der Amazon VPC-Konsole
Führe die folgenden Schritte aus:
- Öffne die Amazon-VPC-Konsole.
- Wähle im Navigationsbereich Endpunkte aus.
- Wähle den Amazon S3-Endpunkt aus, der sich in der Subnetz-Routing-Tabelle des EMR-Clusters befindet.
- Wähle die Registerkarte Richtlinie.
- Wähle Richtlinie bearbeiten.
Überprüfe die S3-Quell- und Ziel-Bucket-Richtlinien
Bucket-Richtlinien spezifizieren die Aktionen, die für Prinzipale zulässig sind oder verweigert werden. Die Quell- und Ziel-Bucket-Richtlinien müssen es der S3-Instance-Profilrolle oder der zugewiesenen IAM-Rolle erlauben, die erforderlichen Amazon S3-Operationen auszuführen.
Verwende die AWS CLI oder die Amazon S3-Konsole, um die Bucket-Richtlinien zu ändern.
Verwendung der AWS CLI
Führe den Befehl get-bucket-policy aus, um die Bucket-Richtlinie abzurufen:
aws s3api get-bucket-policy --bucket doc-example-bucket
Hinweis: Ersetze doc-example-policy durch den Namen des Quell- oder Ziel-Buckets.
Ändere die Richtlinie und speichere die Richtlinie dann in einer JSON-Datei.
Führe dann den Befehl put-bucket-policy aus, um die geänderte Richtlinie zum Bucket hinzuzufügen:
aws s3api put-bucket-policy --bucket doc-example-bucket --policy file://policy.json
Hinweis: Ersetze den Bucket-Namen und den JSON-Dateipfad.
Verwendung der Amazon S3-Konsole
Anweisungen findest du unter Hinzufügen einer Bucket-Richtlinie mithilfe der Amazon S3-Konsole.
Wichtig: Wenn deine Anwendung auf einen S3 Bucket zugreift, der zu einem anderen AWS-Konto gehört, muss der Kontoinhaber deine IAM-Rolle in der Bucket-Richtlinie zulassen.
Die folgende Bucket-Richtlinie gewährt beispielsweise allen IAM-Rollen und Benutzern in emr-account vollen Zugriff auf s3://doc-example-bucket/myfolder/:
{ "Id": "MyCustomPolicy", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Principal": { "AWS": [ "arn:aws:iam::emr-account:root" ] }, "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::doc-example-bucket" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "myfolder/" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowListingOfUserFolder", "Principal": { "AWS": [ "arn:aws:iam::emr-account:root" ] }, "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::doc-example-bucket" ], "Condition": { "StringLike": { "s3:prefix": [ "myfolder/*" ] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Principal": { "AWS": [ "arn:aws:iam::emr-account:root" ] }, "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::doc-example-bucket/myfolder/*", "arn:aws:s3:::doc-example-bucket/myfolder*" ] } ] }
Ähnliche Informationen
Warum schlägt meine Amazon-EMR-Anwendung mit einer HTTP 404 „Not Found“-AmazonS3Exception fehl?
Wie behebe ich Fehler 403 „Zugriff verweigert“ von Amazon S3?
Ähnliche Videos


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