Warum habe ich die Fehlermeldung „Access Denied“ erhalten, als ich den Endpunkt für das Hosting statischer Websites von Amazon S3 verwendet habe?
Ich habe einen Amazon Simple Storage Service (Amazon S3)-Bucket verwendet, um eine statische Website mit dem Hosting-Endpunkt für statische S3-Websites zu hosten. Ich möchte den Fehler „Access Denied“ beheben, den ich vom Hosting-Endpunkt für statische S3-Websites erhalten habe.
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.
Objekte im Bucket müssen öffentlich zugänglich sein
Ein statischer S3-Website-Endpunkt unterstützt nur öffentlich zugängliche Inhalte. Um zu überprüfen, ob ein Objekt in deinem S3-Bucket öffentlich zugänglich ist, öffne die URL des Objekts in einem Webbrowser. Oder du kannst einen curl-Befehl für die URL ausführen.
Das Folgende ist eine Beispiel-URL eines S3-Objekts:
http://doc-example-bucket.s3-website-us-east-1.amazonaws.com/index.html
Wenn entweder der Webbrowser oder der Befehl curl den Fehler Access Denied zurückgibt, ist das Objekt nicht öffentlich zugänglich. Um dieses Problem zu beheben, erstelle eine Bucket-Richtlinie, die öffentlichen Lesezugriff für alle Objekte im Bucket ermöglicht.
Die S3-Bucket-Richtlinie muss den Zugriff auf s3:GetObject ermöglichen
Prüfe, ob deine Bucket-Richtlinie Deny-Anweisungen enthält, die den öffentlichen Lesezugriff auf die Aktion s3:GetObject blockieren. Selbst wenn du eine explizite Allow-Anweisung für s3:GetObject in deiner Bucket-Richtlinie hast, überschreibt eine explizite Deny-Anweisung immer eine explizite „Allow“-Anweisung.
Gehe wie folgt vor, um deine Bucket-Richtlinie zu überprüfen:
- Öffne die Amazon S3-Konsole und wähle dann deinen Bucket aus.
- Wähle die Registerkarte Berechtigungen aus.
- Überprüfe die Bucket-Richtlinie auf Anweisungen mit "Action": "s3:GetObject" oder "Action": "s3:*".
- Wenn eine Anweisung den öffentlichen Lesezugriff auf s3:GetObject blockiert, ändere die Bucket-Richtlinie.
Das Konto, dem der Bucket gehört, muss auch das Objekt besitzen
Um öffentlichen Lesezugriff auf Objekte zu ermöglichen, muss das AWS-Konto, dem der Bucket gehört, auch Eigentümer der Objekte sein. Das Konto der AWS Identity and Access Management (IAM)-Identität, das den Bucket oder das Objekt erstellt hat, besitzt den Bucket oder das Objekt.
Hinweis: S3-Objektbesitz gilt nicht für öffentlichen Lesezugriff, den die Zugriffssteuerungsliste (ACL) des Objekts gewährt.
Du kannst die Amazon S3-Konsole verwenden, um die Bucket- und Objektbesitzer zu überprüfen. Du findest die Besitzer in der Registerkarte Berechtigungen des Buckets oder Objekts.
Gehe wie folgt vor, um mithilfe der AWS CLI zu überprüfen, ob dasselbe Konto deinen Amazon S3-Bucket und deine Objekte besitzt:
-
Um die kanonische S3-ID des Bucket-Besitzers abzurufen, führe den Befehl list-buckets aus:
aws s3api list-buckets --query Owner.ID
-
Um die kanonische S3-ID des Objektbesitzers abzurufen, führe den Befehl „list-objects“ aus:
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
Hinweis: Der vorhergehende Befehl gibt ein einzelnes Objekt zurück. Führe den Befehl list aus, um mehrere Objekte zu überprüfen.
-
Wenn die kanonischen IDs des Buckets und des Objekteigentümers nicht übereinstimmen, ändere den Eigentümer des Objekts in den Bucket-Eigentümer. Führe vom Konto des Objektbesitzers aus den Befehl get-object-acl aus, um die ACL-Berechtigungen abzurufen, die dem Objekt zugewiesen sind:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name
-
Wenn das Objekt keine ACL-Berechtigungen für bucket-owner-full-control hat, führe den Befehl put-object-acl vom 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-owner-full-control verfügt, führe den folgenden Befehl vom Konto des Bucket-Eigentümers aus:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD
Hinweis: Der vorhergehende Befehl kopiert das Objekt über sich selbst und ändert den Besitzer des Objekts.
Du kannst auch S3-Objektbesitz verwenden, um dem Bucket-Besitzer das automatische Eigentum an allen Objekten zu gewähren, die anonyme Benutzer oder andere Konten hochladen.
Du kannst die AWS KMS-Verschlüsselung für die Objekte nicht verwenden
AWS Key Management Service (AWS KMS) unterstützt keine anonymen Anfragen. Daher gelten Amazon S3-Buckets, die anonymen oder öffentlichen Zugriff ermöglichen, nicht für Objekte, die du mit AWS KMS verschlüsselst. Um die AWS KMS-Verschlüsselung aus den Objekten zu löschen, musst du den Endpunkt der statischen Amazon S3-Website verwenden.
Hinweis: Verwende anstelle der AWS KMS-Verschlüsselung die serverseitige Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln, um deine Objekte zu verschlüsseln.
Um zu überprüfen, ob du die KMS-Verschlüsselung für deine Objekte verwendet hast, kannst du die Amazon S3-Konsole verwenden. Überprüfe auf der Seite Objektübersicht, ob AWS-KMS im Dialogfeld Verschlüsselung ausgewählt ist. Du kannst auch den AWS CLI-Befehl head-object ausführen: Wenn der Befehl server-side encryption als aws:kms zurückgibt, ist das Objekt mit AWS KMS-verschlüsselt.
Informationen zum Ändern der Verschlüsselungseinstellungen des Objekts mithilfe der Amazon S3-Konsole findest du unter Spezifizieren der serverseitigen Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3).
Um die AWS CLI zum Ändern der Verschlüsselungseinstellungen des Objekts zu verwenden, stelle sicher, dass der Bucket des Objekts nicht über eine Standardverschlüsselung verfügt. Wenn der Bucket keine Standardverschlüsselung hat, führe den folgenden Befehl aus, um das Objekt über sich selbst zu kopieren und die Verschlüsselung des Objekts aufzuheben:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD --sse AES256
**Warnung:**Amazon S3 entfernt die Einstellungen für storage-class und website-redirect-location, wenn du das Objekt über sich selbst kopierst. Um diese Einstellungen im neuen Objekt beizubehalten, stelle sicher, dass du in der Kopieranforderung explizit Werte für storage-class oder website-redirect-location angibst.
Wenn du die Versionierung in deinem Bucket aktiviert hast, erstellt die Standardverschlüsselung eine neue Version des Objekts, wenn du die Verschlüsselung änderst.
Die angeforderten Objekte müssen im S3-Bucket existieren
Wenn ein Benutzer, der die Anfrage ausführt, keine s3:ListBucket-Berechtigungen hat, erhält der Benutzer einen Access Denied-Fehler für fehlende Objekte.
Um zu überprüfen, ob das Objekt im Bucket existiert, führe den AWS-CLI-Befehl head-object aus.
Hinweis: Bei S3-Objektnamen wird zwischen Groß- und Kleinschreibung unterschieden. Wenn die Anforderung keinen gültigen Objektnamen hat, meldet Amazon S3, dass das Objekt fehlt.
Wenn das Objekt im Bucket vorhanden ist, maskiert der Access Denied-Fehler nicht den 404 Not Found-Fehler. Überprüfe andere Konfigurationsanforderungen, um den Access Denied-Fehler zu beheben.
Wenn das Objekt nicht im Bucket existiert, maskiert der Access Denied-Fehler einen 404 Not Found-Fehler. Behebe das Problem im Zusammenhang mit dem fehlenden Objekt.
Hinweis: Es ist eine bewährte Sicherheitsmethode, den öffentlichen s3:ListBucket-Zugriff nicht zu aktivieren. Der öffentliche s3:ListBucket-Zugriff ermöglicht es Benutzern, alle Objekte in einem Bucket zu sehen und aufzulisten. Dieser Zugriff macht Objektmetadatendetails wie Schlüssel und Größe für Benutzer verfügbar, auch wenn die Benutzer nicht berechtigt sind, das Objekt herunterzuladen.
Deaktiviere Amazon S3 Block Public Access im Bucket
Amazon S3 Block Public Access kann Berechtigungen außer Kraft setzen, die öffentlichen Lesezugriff ermöglichen. Stelle sicher, dass du die Amazon S3 Block Public Access-Einstellungen weder für deinen S3-Bucket noch für dein Konto konfiguriert hast.
Ähnliche Informationen
Hosten interner statischer HTTPS-Websites mit Application Load Balancer, S3 und AWS PrivateLink
- Themen
- Speicher
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 4 Monaten