Ich verwende die Funktion der statischen Amazon-S3-Website, erhalte jedoch einen Fehler „Zugriff verweigert“. Woran liegt das?

Letzte Aktualisierung: 22.12.2021

Ich verwende einen Amazon Simple Storage Service (Amazon S3)-Bucket, um eine statische Website mit dem Endpunkt der statischen S3-Website zu hosten. Warum erhalte ich einen Fehler „Zugriff verweigert“?

Kurzbeschreibung

Wenn Sie versuchen, eine statische Website mit Amazon S3 zu hosten, aber der Fehler „Zugriff verweigert“ angezeigt wird, überprüfen Sie die folgenden Anforderungen:

  • Objekte im Bucket müssen öffentlich zugänglich sein.
  • Die S3-Bucket-Richtlinie muss den Zugriff auf die Aktion s3:GetObject ermöglichen.
  • Das AWS-Konto, dem der Bucket gehört, muss auch Besitzer des Objekts sein.
  • Objekte können nicht mit AWS Key Management Service (AWS KMS) verschlüsselt werden.
  • Angeforderte Objekte müssen im S3-Bucket vorhanden sein.
  • Die Sperrung des öffentlichen Amazon-S3-Zugriffs muss auf Bucket- und Kontoebene deaktiviert sein.

Auflösung

Objekte im Bucket müssen öffentlich zugänglich sein

Der statische S3-Website-Endpunkt unterstützt nur öffentlich zugängliche Inhalte. Um zu überprüfen, ob ein Objekt in Ihrem S3-Bucket öffentlich zugänglich ist, öffnen Sie die URL des Objekts in einem Webbrowser. Oder Sie können einen cURL-Befehl für die URL ausführen.

Im Folgenden finden Sie eine Beispiel-URL eines S3-Objekts:

http://doc-example-bucket.s3-website-us-east-1.amazonaws.com/index.html
Wenn vom Webbrowser oder vom cURL-Befehl ein Fehler „ Zugriff verweigert“ zurückgegeben wird, ist das Objekt nicht öffentlich zugänglich. Um öffentlichen Lesezugriff auf Ihr S3-Objekt zu ermöglichen, erstellen Sie eine Bucket-Richtlinie, die öffentlichen Lesezugriff für alle Objekte im Bucket ermöglicht.

Die S3-Bucket-Richtlinie muss den Zugriff auf die Aktion s3:GetObject ermöglichen

Überprüfen Sie Ihre Bucket-Richtlinie und stellen Sie sicher, dass es keine Zugriffsverweigerungsanweisungen gibt, die den öffentlichen Lesezugriff auf die Aktion s3:GetObject blockieren. Auch wenn Sie in Ihrer Bucket-Richtlinie eine explizite Zulassen-Anweisung für s3:GetObject haben, stellen Sie sicher, dass es keine in Konflikt stehende explizite Zugriffsverweigerungsanweisung gibt. Eine explizite Zugriffsverweigerungsanweisung überschreibt immer eine explizite Anweisung zum Zulassen.

Führen Sie die folgenden Schritte aus, um Ihre Bucket-Richtlinie für s3:GetObject zu überprüfen:

1.    Öffnen Sie die Amazon-S3-Konsole.

2.    Wählen Sie die Registerkarte Berechtigungen.

3.    Wählen Sie Bucket-Richtlinie aus.

4.    Überprüfen Sie die Bucket-Policy auf Anweisungen mit „Aktion“: „s3:GetObject“ oder „Aktion“: „s3: *“.

5.    (Optional) Ändern Sie die Bucket-Richtlinie. Sie können beispielsweise Anweisungen entfernen oder bearbeiten, die den öffentlichen Lesezugriff auf s3:GetObject blockieren.

Das AWS-Konto, dem der Bucket gehört, muss auch Besitzer des Objekts sein

Um öffentlichen Lesezugriff auf Objekte zu ermöglichen, muss das AWS-Konto, dem der Bucket gehört, auch Besitzer der Objekte sein. Ein Bucket oder Objekt gehört dem Konto der AWS Identity and Access Management (IAM)-Identität, die den Bucket oder das Objekt erstellt hat.

Hinweis: Die Anforderung an die Objekteigentümerschaft gilt für öffentlichen Lesezugriff, der durch eine Bucket-Richtlinie gewährt wird. Sie gilt nicht für den öffentlichen Lesezugriff, der von der Zugriffskontrollliste (ACL) des Objekts gewährt wird.

Um zu überprüfen, ob Ihr Amazon-S3-Bucket und Ihre Objekte demselben AWS-Konto gehören, führen Sie die folgenden Schritte aus:

1.    Verwenden Sie den folgenden Befehl, um die kanonische S3-ID des Bucket-Eigentümers abzurufen:

aws s3api list-buckets --query Owner.ID

2.    Verwenden Sie den folgenden Befehl, um die kanonische S3-ID des Objektbesitzers abzurufen:

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html

Hinweis: Dieses Beispiel zeigt ein einzelnes Objekt. Um mehrere Objekte zu überprüfen, verwenden Sie den Befehl Liste.

3.    Prüfen Sie, ob die kanonischen IDs des Bucket-Eigentümers und des Objektbesitzers übereinstimmen. Wenn sie nicht übereinstimmen, haben der Bucket und das Objekt unterschiedliche Besitzer.

Hinweis: Sie können auch die Amazon-S3-Konsole verwenden, um die Bucket- und Objektbesitzer zu überprüfen. Die Besitzer befinden sich auf der Registerkarte Berechtigungen des jeweiligen Buckets oder Objekts.

4.    Wenn die kanonischen IDs des Buckets und des Objektbesitzers nicht übereinstimmen, ändern Sie den Objektbesitzer in den Bucket-Eigentümer.

Führen Sie im Konto des Objektbesitzers den folgenden Befehl aus, um die dem Objekt zugewiesenen ACL-Berechtigungen abzurufen:

aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name

Wenn das Objekt keine ACL-Berechtigungen für Bucket-Besitzer-Vollzugriff hat, führen Sie den folgenden Befehl aus dem Konto des Objektbesitzers aus:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control

Wenn das Objekt über ACL-Berechtigungen für Bucket-Besitzer-Vollzugriff verfügt, führen Sie den folgenden Befehl aus dem Konto des Bucket-Eigentümers aus. Dieser Befehl ändert den Besitzer des Objekts, indem er das Objekt über sich selbst kopiert:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD

Sie können auch S3-Objekt-Eigentümerschaft verwenden, um dem Bucket-Eigentümer automatische Eigentümerschaft von Objekten zu gewähren, die von anonymen Benutzern oder anderen AWS-Konten hochgeladen wurden.

Objekte im Bucket können nicht von AWS KMS verschlüsselt sein

AWS KMS unterstützt keine anonymen Anfragen. Daher gilt jeder Amazon-S3-Bucket, der anonymen oder öffentlichen Zugriff ermöglicht, nicht für Objekte, die mit AWS KMS verschlüsselt sind. Sie müssen die KMS-Verschlüsselung von den Objekten entfernen, die Sie mithilfe des Endpunkts der statischen Amazon-S3-Website bereitstellen möchten.

Hinweis: Anstatt die AWS-KMS-Verschlüsselung zu verwenden, verwenden Sie AES-256, um Ihre Objekte zu verschlüsseln.

Sie können mithilfe der folgenden Methoden überprüfen, ob ein Objekt in Ihrem Bucket KMS-verschlüsselt ist:

  • Verwenden Sie die Amazon-S3-Konsole, um die Eigenschaften des Objekts anzuzeigen. Prüfen Sie das Dialogfeld Verschlüsselung. Wenn AWS-KMS ausgewählt ist, ist das Objekt KMS-verschlüsselt.
  • Führen Sie den Befehl head-Object mithilfe der AWS Command Line Interface (AWS CLI) aus. Wenn der Befehl ServerSideEncryption als aws:kms zurückgibt, ist das Objekt KMS-verschlüsselt.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten Stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Informationen zum Ändern der Verschlüsselungseinstellungen des Objekts mithilfe der Amazon-S3-Konsole finden Sie unter Amazon-S3-Verschlüsselung angeben.

Um die Verschlüsselungseinstellungen des Objekts mithilfe der AWS CLI zu ändern, stellen Sie sicher, dass der Bucket des Objekts nicht über die Standardverschlüsselung verfügt. Wenn der Bucket keine Standardverschlüsselung hat, entfernen Sie die Verschlüsselung des Objekts, indem Sie das Objekt über sich selbst kopieren:

 

aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD
Warnung: Beim Kopieren des Objekts über sich selbst werden die Einstellungen für die storage-class und den website-redirect-location entfernt. Um diese Einstellungen im neuen Objekt beizubehalten, müssen Sie in der Kopieranforderung explizit die Werte storage-class oder website-redirect-location angeben.

Angeforderte Objekte müssen im S3-Bucket vorhanden sein

Wenn ein Benutzer, der die Anforderung ausführt, keine s3:ListBucket-Berechtigungen hat, erhält der Benutzer einen Fehler Zugriff verweigert für fehlende Objekte.

Sie können den AWS-CLI-Befehl head-object ausführen, um zu überprüfen, ob ein Objekt im Bucket vorhanden ist.

Hinweis: Bei S3-Objektnamen wird die Groß-/Kleinschreibung beachtet. Wenn die Anforderung keinen gültigen Objektnamen hat, meldet Amazon S3, dass das Objekt fehlt.

Wenn das Objekt im Bucket vorhanden ist, maskiert der Fehler Access Denied nicht den Fehler 404 Not Found. Überprüfen Sie andere Konfigurationsanforderungen, um den Fehler Access Denied zu beheben.

Wenn das Objekt im Bucket nicht vorhanden ist, maskiert der Fehler Access Denied den Fehler 404 Not Found. Beheben Sie das Problem im Zusammenhang mit dem fehlenden Objekt.

Hinweis: Es ist keine bewährte Sicherheitsmethode, den öffentlichen Zugriff S3:ListBucket zu aktivieren. Durch Aktivieren des öffentlichen Zugriff s3:ListBucket können Benutzer alle Objekte in einem Bucket anzeigen und auflisten. Durch diesen Zugriff werden Objektmetadatendetails (z. B. Schlüssel und Größe) für Benutzer verfügbar gemacht, auch wenn die Benutzer keine Berechtigungen zum Herunterladen des Objekts haben.

Die Sperrung des öffentlichen Amazon-S3-Zugriffs muss für den Bucket deaktiviert werden

Die Sperrungseinstellungen des öffentlichen Amazon-S3-Zugriffs können auf einzelne Buckets oder AWS-Konten angewendet werden. Bestätigen Sie, dass keine Amazon-S3-Einstellungen zur Sperrung des öffentlichen Zugriffsauf Ihren S3-Bucket oder Ihr AWS-Konto angewendet wurden. Diese Einstellungen können Berechtigungen außer Kraft setzen, die öffentlichen Lesezugriff ermöglichen.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?