Warum erhalte ich die Fehlermeldung „403-Zugriff verweigert“, wenn ich einen Amazon S3-Website-Endpunkt als Ursprung meiner CloudFront-Distribution verwende?

Lesedauer: 8 Minute
0

Ich verwende einen Amazon Simple Storage Service (Amazon S3)-Bucket als Ursprung meiner Amazon-CloudFront-Distribution. Ich möchte den Fehler „403-Zugriff verweigert“ beheben.

Behebung

Führe die folgenden Aufgaben aus, um Probleme bei CloudFront-Verteilungen mit Amazon S3-Website-Endpunkten als Ursprung zu beheben.

**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, findest du weitere Informationen unter Troubleshoot AWS CLI errors. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Überprüfen der Verschlüsselung von Objekten in deinem Bucket

AWS Key Management Service (AWS KMS) unterstützt keine anonymen Anfragen. Amazon S3-Buckets, die anonymen oder öffentlichen Zugriff ermöglichen, wenden diesen Zugriff nicht auf Objekte an, die mit AWS KMS verschlüsselt sind. Entferne die AWS KMS-Verschlüsselung aus den S3-Objekten, die du bereitstellen möchtest. Verwende anstelle der AWS KMS-Verschlüsselung AES-256, um deine Objekte zu verschlüsseln.

Feststellen, ob die Objekte mit AWS KMS verschlüsselt sind

Um zu überprüfen, ob die Objekte in deinem Bucket mit AWS KMS verschlüsselt sind, führe die folgenden Aufgaben aus:

Zeige die Eigenschaften des Objekts auf der Amazon S3-Konsole an. Wenn AWS-KMS im Dialogfeld Verschlüsselung ausgewählt ist, ist das Objekt mit AWS KMS verschlüsselt.

Oder führe die AWS CLI aus, um den Befehl head-object auszuführen. Wenn der Befehl ServerSideEncryption als aws:kms zurückgibt, ist das Objekt mit AWS KMS-verschlüsselt.

Verschlüsselungseinstellungen eines Objekts ändern

Informationen zum Ändern der Verschlüsselungseinstellungen des Objekts mithilfe der Amazon S3-Konsole findest du unter Spezifizieren der serverseitigen Verschlüsselung mit AWS KMS (SSE-KMS).

Um die AWS-CLI zum Ändern der Verschlüsselungseinstellungen des Objekts zu verwenden, stelle sicher, dass der Bucket des Objekts nicht über AWS KMS als Standardverschlüsselung verfügt. Wenn der Bucket AWS KMS als Standardverschlüsselung hat, ändere die Verschlüsselung auf SSE-S3.

Wenn der Bucket keine Standardverschlüsselung hat, führe den folgenden Befehl aus, um das Objekt über sich selbst zu kopieren und die Objektverschlüsselung zu entfernen:

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

Hinweis: Ersetze DOC-EXAMPLE-BUCKET durch deinen Bucket-Namen. Wenn du das Objekt über sich selbst kopierst, entfernt die Aktion die Einstellungen für storage-class und website-redirect-location. Um diese Einstellungen im neuen Objekt beizubehalten, gib diese Werte explizit in der Kopieranforderung an.

Überprüfen deiner Bucket-Richtlinie

Deine Bucket-Richtlinie darf keine Deny-Anweisung enthalten, die den öffentlichen Lesezugriff auf die Aktion s3:GetObject blockiert.

Wenn du eine explizite Allow-Anweisung für s3:GetObject hast, stelle sicher, dass es keine explizite Deny-Anweisung gibt, die mit der Anweisung in Konflikt steht. Eine explizite Ablehnungsanweisung überschreibt immer eine explizite Genehmigungsanweisung.

Gehe wie folgt vor, um deine Bucket-Richtlinie für s3:GetObject zu überprüfen:

  1. Öffne die Amazon S3-Konsole und navigiere dann zu deinem S3-Bucket.
  2. Wähle die Registerkarte Berechtigungen aus.
  3. Wähle Bucket-Richtlinie aus.
  4. Überprüfe die Bucket-Richtlinie für Anweisungen mit „Action“: „s3:GetObject“ oder „Action“: „s3:\ *“.
  5. Ändere die Bucket-Richtlinie, um Anweisungen zu entfernen oder zu bearbeiten, die den öffentlichen Lesezugriff auf s3:GetObject blockieren.

Die folgende Richtlinie enthält beispielsweise eine explizite Allow-Anweisung für den öffentlichen Zugriff auf s3:GetObject. Es gibt jedoch eine explizite Ablehnungsanweisung für den s3:GetObject-Zugriff, sofern die Anfrage nicht von einer bestimmten Amazon Virtual Private Cloud (Amazon VPC) stammt. Ändere diese Richtlinie, um die Aktion s3:GetObject zuzulassen:

{
  "Version": "2012-10-17",
  "Id": "PolicyForCloudFrontPrivateContent",
  "Statement": [
    {
      "Sid": "Allow-OAI-Access-To-Bucket",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5#########"
      },
      "Action": "s3:GetObject",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ]
    },
    {
      "Sid": "Allow-Public-Access-To-Bucket",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ]
    },
    {
      "Sid": "Access-to-specific-VPCE-only",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-1a2b3c4d"
        }
      }
    }
  ]
}

Die folgende Richtlinie ist ein Beispiel für eine Amazon S3-Bucket-Richtlinie, die den schreibgeschützten öffentlichen Zugriff auf den S3-Website-Endpunkt ermöglicht:

{
   "Version": "2012-10-17",
    "Statement": {
    "Sid": "AllowPublicReadOnly",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
  }
}

Bucket- und Objektbesitz überprüfen

Damit eine Bucket-Richtlinie öffentlichen Lesezugriff auf Objekte ermöglicht, muss das AWS-Konto, dem der Bucket gehört, auch Eigentümer der Objekte sein.

Hinweis: Die Anforderung des Objektbesitzes gilt für den öffentlichen Lesezugriff, den eine Bucket-Richtlinie gewährt. Es gilt nicht für öffentlichen Lesezugriff, den die Zugriffssteuerungsliste (ACL) des Objekts gewährt.

Vergewissere dich, dass der Bucket und die Objekte denselben Besitzer haben

Hinweis: Du kannst die Amazon S3-Konsole verwenden, um die Bucket- und Objektbesitzer zu überprüfen. Du findest die Besitzer auf der Registerkarte Permissions des Buckets oder Objekts.

Führe die folgenden Befehle aus, um die AWS-CLI zum Überprüfen des Buckets und der Objekteigentümer zu verwenden:

Führe den Befehl list-buckets aus, um die kanonische S3-ID des Bucket-Besitzers abzurufen:

aws s3api list-buckets --query Owner.ID

Führe den Befehl list-objects aus, um die kanonische S3-ID des Objektbesitzers zu erhalten:

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

Hinweis: Die Ausgabe des vorherigen Beispielbefehls zeigt ein einzelnes Objekt, aber du kannst den Befehl list-objects verwenden, um mehrere Objekte zu überprüfen. Wenn die kanonischen IDs nicht übereinstimmen, haben der Bucket und das Objekt unterschiedliche Besitzer.

Objektbesitz aktualisieren

Bucket-Eigentümer können das Eigentum an Objekten mit S3-Objekteigentümerschaft verwalten. Die Einstellung S3-Objekteigentümerschaft ist standardmäßig für alle neuen S3-Buckets aktiviert. Informationen zum Aktualisieren eines vorhandenen Buckets findest du unter Objektbesitz für einen vorhandenen Bucket festlegen.

Es ist eine bewährte Methode für Bucket-Besitzer, die Einstellung S3-Objektbesitz für alle Buckets zu verwenden. Außerdem ist es eine bewährte Methode, Berechtigungen mithilfe von AWS Identity and Access Management (IAM)-Rollen und Bucket-Richtlinien zu verwalten.

Um ACLs für deinen Bucket zu entfernen und den Besitz aller Objekte im Bucket zu übernehmen, führe den Befehl put-bucket-ownership-controls aus:

aws s3api put-bucket-ownership-controls --bucket example-bucket --ownership-controls 'Rules=[{ObjectOwnership=BucketOwnerEnforced}]'

Wenn du die ACLs in deinem S3-Bucket nicht deaktivieren möchtest, ändere den Eigentümer des Objekts in den Bucket-Besitzer.

Führe die folgenden Schritte aus:

  1. 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

    Hinweis: Wenn das Objekt über ACL-Berechtigungen für bucket-owner-full-control verfügt, fahre mit Schritt #3 fort.

  2. 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
  3. Führe vom Konto des Bucket-Besitzers aus den folgenden Befehl aus, um das Objekt selbst zu kopieren und den Besitzer des Objekts zu ändern:

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

    Hinweis: Ersetze DOC-EXAMPLE-BUCKET durch den Namen deines Buckets. Ersetze DOC-EXAMPLE-BUCKET durch den Namen deines Buckets.

Überprüfen der Einstellungen „Öffentlichen Zugriff blockieren“ für den Bucket

Stelle sicher, dass keine Amazon S3 Block Public Access-Einstellungen auf den Bucket oder das Konto angewendet werden. Diese Einstellungen können Berechtigungen außer Kraft setzen, die öffentlichen Lesezugriff ermöglichen. Amazon-S3-Block-Public-Access-Einstellungen kann für einzelne Buckets oder AWS-Konten gelten.

Bestätigen, dass Objekte im Bucket öffentlich zugänglich sind

Eine Distribution, die einen Website-Endpunkt verwendet, unterstützt nur öffentlich zugängliche Inhalte. Um festzustellen, ob ein Objekt in deinem S3-Bucket öffentlich zugänglich ist, öffne die Objekt-URL des S3-Website-Endpunkts in einem Webbrowser. Oder führe einen curl-Befehl für die URL aus.

Beispiel:

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 öffentlichen Lesezugriff zu gewähren, führe eine der folgenden Aufgaben aus:

Überprüfen der Option Antragsteller zahlt

Wenn Anforderer zahlt aktiviert ist, deaktiviere die Option. Buckets von Anforderer zahlt ermöglichen keinen Zugriff über einen Website-Endpunkt.

Überprüfen des benutzerdefinierten Headers

Wenn du den Header Referer verwendest, um den Zugriff von CloudFront auf den Ursprung deines S3-Website-Endpunkts einzuschränken, überprüfe deine Bucket-Richtlinie. Stelle sicher, dass der geheime Wert oder das Token, das in der S3-Bucket-Richtlinie festgelegt ist, mit dem Wert im benutzerdefinierten CloudFront-Ursprungsheader übereinstimmt.

Um eine explizite Verweigerungsanweisung in der Bucket-Richtlinie zu verwenden, muss eine Genehmigungsanweisung vorhanden sein, die Zugriff auf der Grundlage des Headers Referer gewährt. Du kannst keinen Zugriff nur mit einer ausdrücklichen Verweigerungsanweisung gewähren.

Die folgende Bucket-Richtlinie gewährt beispielsweise Zugriff auf den S3-Ursprung, wenn die Anforderung die Zeichenfolge "aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER."

Der benutzerdefinierte CloudFront-Ursprungsheader muss die folgenden Konfigurationen haben:

  • Überschrift: Referer
  • Wert: MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER

Beispiel für eine Bucket-Richtlinie:

{
  "Version":"2012-10-17",
  "Id":"http referer policy example",
  "Statement":[
    {
      "Sid":"Allow get requests originating from my CloudFront with referer header",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition":{
        "StringLike":{"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER"}
      }
    }
  ]
}

**Hinweis:**Da Prinzipal ein Platzhalterwert ist ("Principal":"*"), gewährt die Beispiel-Bucket-Richtlinie öffentlichen (anonymen) Zugriff auf den Bucket. Aufgrund der Bedingungsanweisung muss die Anfrage den Header Referer enthalten und der Header-Wert muss mit dem Wert in der Bucket-Richtlinie übereinstimmen. Wenn die Bedingungsanweisung nicht erfüllt ist, kannst du nicht auf den S3-Ursprung zugreifen.

Überprüfen des Verwaltungskontos deiner Organisation

Verwende das Verwaltungskonto deiner Organisation in AWS Organizations, um nach Service-Kontrollrichtlinien (Service Control Policies, SCPs) zu suchen. Überprüfe die Ablehnungsrichtlinien für die Aktion s3:GetObject, die dem Organisationsstamm, der Organisationseinheit (OU) oder direkt deinem Konto zugeordnet ist.

Ähnliche Informationen

Warum erhalte ich die Fehlermeldung 403 Access Denied, wenn ich einen S3-REST-API-Endpunkt als Ursprung meiner CloudFront-Distribution verwende?

Problembehandlung bei Fehlerantwort-Statuscodes in CloudFront

Wie behebe ich Fehler „403 Access Denied“ von Amazon S3?

Wie verwende ich CloudFront, um eine statische Website bereitzustellen, die auf Amazon S3 gehostet wird?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 7 Monaten