Beschränken des Zugriffs auf Amazon-S3-Inhalte - Amazon CloudFront

Beschränken des Zugriffs auf Amazon-S3-Inhalte

Wenn Sie CloudFront mit einem Amazon-S3-Bucket als Ursprung verwenden, können Sie CloudFront und Amazon S3 so konfigurieren, dass sie die folgenden Vorteile bieten:

  • Beschränkung des Zugriffs auf den Amazon-S3-Bucket, sodass dieser nicht öffentlich zugänglich ist

  • Sicherstellung, dass Viewer (Benutzer) nur über die angegebene CloudFront-Verteilung auf den Inhalt im Bucket zugreifen können, d. h. Verhinderung eines Zugriffs auf den Inhalt direkt vom Bucket aus oder über eine unbeabsichtigte CloudFront-Verteilung

Konfigurieren Sie CloudFront zu diesem Zweck so, dass authentifizierte Anforderungen an Amazon S3 gesendet werden, und konfigurieren Sie Amazon S3 so, dass nur Zugriff auf authentifizierte Anforderungen von CloudFront gewährt wird. CloudFront bietet zwei Möglichkeiten, authentifizierte Anforderungen an einen Amazon-S3-Ursprung zu senden: Ursprungszugriffssteuerung (Origin Access Control, OAC) und Ursprungszugriffsidentität (Origin Access Identity, OAI). Wir empfehlen die Verwendung von OAC, da auf diese Weise Folgendes unterstützt wird:

  • Alle Amazon-S3-Buckets in allen AWS-Regionen, einschließlich Opt-in-Regionen, die nach Dezember 2022 eingeführt wurden

  • Serverseitige Verschlüsselung mit AWS KMS (SSE-KMS) von Amazon S3

  • Dynamische Anforderungen (PUT und DELETE) an Amazon S3

OAI funktioniert in den oben aufgeführten Szenarien nicht oder erfordert in diesen Szenarien zusätzliche Problemumgehungen. In den folgenden Themen wird die Verwendung von OAC mit einem Amazon-S3-Ursprung beschrieben. Weitere Informationen zur Migration von OAI zu OAC finden Sie unter Migration von der Ursprungszugriffsidentität (OAI) zur Ursprungszugriffssteuerung (OAC).

Anmerkung

Wenn es sich bei Ihrem Ursprung um einen Amazon-S3-Bucket handelt, der als Website-Endpunkt konfiguriert ist, müssen Sie ihn mit CloudFront als benutzerdefinierten Ursprung einrichten. Das bedeutet, dass Sie OAC (oder OAI) nicht verwenden können. Sie können jedoch den Zugriff auf einen benutzerdefinierten Ursprung einschränken, indem Sie benutzerdefinierte Header einrichten und Ihren Ursprung so konfigurieren, dass er diese benötigt. Weitere Informationen finden Sie unter Beschränken des Zugriffs auf Dateien auf benutzerdefinierten Ursprungsservern.

Topics

Erstellen einer neuen Ursprungszugriffssteuerung

Führen Sie die in den folgenden Themen beschriebenen Schritte aus, um eine neue Ursprungszugriffssteuerung in CloudFront einzurichten.

Voraussetzungen

Bevor Sie die Ursprungszugriffssteuerung (Origin Access Control, OAC) erstellen und einrichten, benötigen Sie eine CloudFront-Verteilung mit einem Amazon-S3-Bucket-Ursprung. Dieser Ursprung muss ein regulärer S3-Bucket sein, kein Bucket, der als Website-Endpunkt konfiguriert wurde. Weitere Informationen zum Einrichten einer CloudFront-Verteilung mit einem S3-Bucket-Ursprung finden Sie unter Erste Schritte mit einer einfachen CloudFront-Verteilung.

Erteilen der Zugriffsberechtigung auf den S3-Bucket für die Ursprungszugriffssteuerung

Bevor Sie eine Ursprungszugriffssteuerung (OAC) erstellen oder in einer CloudFront-Verteilung einrichten, stellen Sie sicher, dass die OAC über Berechtigungen für den Zugriff auf den S3-Bucket-Ursprung verfügt. Tun Sie dies nach dem Erstellen einer CloudFront-Verteilung, jedoch vor dem Hinzufügen der OAC zum S3-Ursprung in der Verteilungskonfiguration.

Um der OAC die Berechtigung für den Zugriff auf den S3-Bucket zu erteilen, verwenden Sie eine S3–Bucket-Richtlinie, um dem CloudFront-Service-Prinzipal (cloudfront.amazonaws.com) Zugriff auf den Bucket zu gewähren. Verwenden Sie ein Condition-Element in der Richtlinie, um CloudFront nur dann Zugriff auf den Bucket zu ermöglichen, wenn die Anforderung im Namen der CloudFront-Verteilung erfolgt, die den S3-Ursprung enthält.

Informationen zum Hinzufügen oder Ändern einer Bucket-Richtlinie finden Sie unter Hinzufügen einer Bucket-Richtlinie mit der Amazon-S3-Konsole im Amazon-S3-Benutzerhandbuch.

Im Folgenden finden Sie Beispiele für S3-Bucket-Richtlinien, die einer CloudFront-OAC den Zugriff auf einen S3-Ursprung ermöglichen. Beachten Sie in den folgenden Beispielen Folgendes:

  • Ersetzen Sie DOC-EXAMPLE-BUCKET durch den Namen des S3-Bucket-Ursprungs.

  • Ersetzen Sie 111122223333 durch die AWS-Konto-ID, die die CloudFront-Verteilung und den S3-Bucket-Ursprung enthält.

  • Ersetzen Sie EDFDVBD6EXAMPLE durch die ID der CloudFront-Verteilung.

Beispiel S3-Bucket-Richtlinie, die schreibgeschützten Zugriff für eine CloudFront-OAC zulässt

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } } }

Beispiel S3-Bucket-Richtlinie, die Lese- und Schreibzugriff für eine CloudFront-OAC zulässt

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadWrite", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } } }

SSE-KMS

Wenn die Objekte im S3-Bucket-Ursprung unter Verwendung von serverseitiger Verschlüsselung mit AWS Key Management Service (SSE-KMS) verschlüsselt sind, müssen Sie sicherstellen, dass die OAC über die Berechtigung zur Verwendung des AWS KMS-Schlüssels verfügt. Um der OAC die Berechtigung zur Verwendung des KMS-Schlüssels zu erteilen, fügen Sie der KMS-Schlüsselrichtlinie eine Anweisung hinzu. Weitere Informationen zum Ändern einer Schlüsselrichtlinie finden Sie unter Ändern einer Schlüsselrichtlinie im AWS Key Management Service-Entwicklerhandbuch.

Das folgende Beispiel zeigt eine KMS-Schlüsselrichtlinienanweisung, die es der OAC ermöglicht, den KMS-Schlüssel zu verwenden. Beachten Sie im folgenden Beispiel Folgendes:

  • Ersetzen Sie 111122223333 durch die AWS-Konto-ID, die die CloudFront-Verteilung, den S3-Bucket-Ursprung und den KMS-Schlüssel enthält.

  • Ersetzen Sie EDFDVBD6EXAMPLE durch die ID der CloudFront-Verteilung.

Beispiel KMS-Schlüsselrichtlinienanweisung, die einer CloudFront-OAC den Zugriff auf einen KMS-Schlüssel für SSE-KMS ermöglicht

{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root", "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } }

Erstellen der Ursprungszugriffssteuerung

Um eine Ursprungszugriffssteuerung (OAC) zu erstellen, können Sie die AWS Management Console, AWS CloudFormation, die AWS CLI oder die CloudFront-API verwenden.

Console

So erstellen Sie eine Ursprungszugriffssteuerung

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die CloudFront-Konsole unter https://console.aws.amazon.com/cloudfront/v3/home.

  2. Wählen Sie im Navigationsbereich Origin access (Ursprungszugriff) aus.

  3. Wählen Sie Create control setting (Kontrolleinstellung erstellen) aus.

  4. Gehen Sie im Formular Create control setting (Kontrolleinstellung erstellen) wie folgt vor:

    1. Geben Sie im Bereich Details einen Namen (Name) und (optional) eine Beschreibung (Description) für die Ursprungszugriffssteuerung ein.

    2. Es empfiehlt sich, im Bereich Settings (Einstellungen) die Standardeinstellung (Sign requests (recommended)) (Anforderungen signieren (empfohlen)) zu belassen. Weitere Informationen finden Sie unter Erweiterte Einstellungen für die Ursprungszugriffssteuerung.

  5. Wählen Sie Create (Erstellen) aus.

    Nachdem die OAC erstellt wurde, notieren Sie sich den Namen. Sie benötigen diesen im folgenden Verfahren.

So fügen Sie eine Ursprungszugriffssteuerung einem S3-Ursprung in einer Verteilung hinzu

  1. Öffnen Sie die CloudFront-Konsole unter https://console.aws.amazon.com/cloudfront/v3/home.

  2. Wählen Sie eine Verteilung mit einem S3-Ursprung aus, der Sie die OAC hinzufügen möchten, und wählen Sie dann den Tab Origins (Ursprünge) aus.

  3. Wählen Sie den S3-Ursprung aus, dem Sie die OAC hinzufügen möchten, und wählen Sie dann Edit (Bearbeiten) aus.

  4. Wählen Sie im Abschnitt Origin access (Ursprungszugriff) Origin access control settings (recommended) (Einstellungen der Ursprungszugriffssteuerung (empfohlen)) aus.

  5. Wählen Sie im Dropdown-Menü Origin access control (Ursprungszugriffssteuerung) die OAC aus, die Sie verwenden möchten.

  6. Wählen Sie Save Changes (Änderungen speichern).

Die Verteilung beginnt mit der Bereitstellung an allen CloudFront-Edge-Standorten. Wenn ein Edge-Standort die neue Konfiguration erhält, signiert er alle Anforderungen, die er an den S3-Bucket-Ursprung sendet.

CloudFormation

Wenn Sie eine Ursprungszugriffssteuerung (OAC) mit AWS CloudFormation erstellen möchten, verwenden Sie den Ressourcentyp AWS::CloudFront::OriginAccessControl. Das folgende Beispiel zeigt die AWS CloudFormation-Vorlagensyntax im YAML-Format zum Erstellen einer Ursprungszugriffssteuerung.

Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: ExampleOAC OriginAccessControlOriginType: s3 SigningBehavior: always SigningProtocol: sigv4

Weitere Informationen finden Sie unter AWS::CloudFront::OriginAccessControl im AWS CloudFormation-Benutzerhandbuch.

CLI

Wenn Sie eine Ursprungszugriffssteuerung über die AWS Command Line Interface (AWS CLI) erstellen möchten, verwenden Sie den Befehl aws cloudfront create-origin-access-control. Sie können eine Eingabedatei verwenden, um die Eingabeparameter für den Befehl bereitzustellen, anstatt jeden einzelnen Parameter als Befehlszeileneingabe anzugeben.

So erstellen Sie eine Ursprungszugriffssteuerung (CLI mit Eingabedatei)

  1. Verwenden Sie den folgenden Befehl zum Erstellen einer Datei mit dem Namen origin-access-control.yaml. Diese Datei enthält alle Eingabeparameter für den Befehl create-origin-access-control.

    aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
    Anmerkung

    Die Option yaml-input ist nur in Version 2 der AWS CLI verfügbar. Mit Version 1 von AWS CLI können Sie eine Eingabedatei im JSON-Format generieren. Weitere Informationen zum Parameter finden Sie unter Generieren der AWS CLI-Skeleton- und -Eingabeparameter aus einer JSON- oder YAML-Eingabedatei im AWS Command Line Interface-Benutzerhandbuch.

  2. Öffnen Sie die Datei origin-access-control.yaml, die Sie gerade erstellt haben. Bearbeiten Sie die Datei, um einen Namen für die OAC und eine Beschreibung (optional) hinzuzufügen, und ändern Sie SigningBehavior zu always. Speichern Sie dann die Datei.

    Weitere Informationen zu anderen OAC-Einstellungen finden Sie unter Erweiterte Einstellungen für die Ursprungszugriffssteuerung.

  3. Verwenden Sie den folgenden Befehl, um die Ursprungszugriffssteuerung mit Eingabeparametern aus der Datei origin-access-control.yaml zu erstellen.

    aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml

    Notieren Sie den Id-Wert in der Befehlsausgabe. Sie benötigen diesen, um die OAC zu einem S3-Bucket-Ursprung in einer CloudFront-Verteilung hinzuzufügen.

So fügen Sie eine OAC einem S3-Bucket-Ursprung in einer vorhandenen Verteilung an (CLI mit Eingabedatei)

  1. Verwenden Sie den folgenden Befehl, um die Verteilungskonfiguration für die CloudFront-Verteilung zu speichern, der Sie die OAC hinzufügen möchten. Die Verteilung muss über einen S3-Bucket-Ursprung verfügen. Ersetzen Sie distribution_ID durch die ID der Verteilung.

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
    Anmerkung

    Die Option --output yaml ist nur in Version 2 der AWS CLI verfügbar. Mit Version 1 der AWS CLI können Sie die Ausgabe im JSON-Format generieren. Weitere Informationen finden Sie unter Steuern der Befehlsausgabe über die AWS CLI im AWS Command Line Interface-Benutzerhandbuch.

  2. Öffnen Sie die Datei mit dem Namen dist-config.yaml, die Sie gerade erstellt haben. Bearbeiten Sie die Datei und nehmen Sie die folgenden Änderungen vor:

    • Fügen Sie im Objekt Origins die ID der OAC dem Feld namens OriginAccessControlId hinzu.

    • Entfernen Sie den Wert aus dem Feld namens OriginAccessIdentity, sofern vorhanden.

    • Benennen Sie das ETag-Feld in IfMatch um, ändern Sie jedoch nicht den Wert des Feldes.

    Speichern Sie die Datei, wenn Sie fertig sind.

  3. Verwenden Sie den folgenden Befehl, um die Verteilung zu aktualisieren und die Ursprungszugriffssteuerung zu verwenden. Ersetzen Sie distribution_ID durch die ID der Verteilung.

    aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml

Die Verteilung beginnt mit der Bereitstellung an allen CloudFront-Edge-Standorten. Wenn ein Edge-Standort die neue Konfiguration erhält, signiert er alle Anforderungen, die er an den S3-Bucket-Ursprung sendet.

API

Um eine Ursprungszugriffssteuerung über die CloudFront-API zu erstellen, verwenden Sie CreateOriginAccessControl. Weitere Informationen zu den Feldern, die Sie in diesem API-Aufruf angeben, finden Sie in der API-Referenzdokumentation für Ihr AWS-SDK oder einen anderen API-Client.

Nachdem Sie eine Ursprungszugriffssteuerung erstellt haben, können Sie diese mit einem der folgenden API-Aufrufe an einen S3-Bucket-Ursprung in einer Verteilung anfügen:

Geben Sie für beide API-Aufrufe die ID der Ursprungszugriffssteuerung im Feld OriginAccessControlId innerhalb eines Ursprungs an. Weitere Informationen zu den anderen Feldern, die Sie in diesen API-Aufrufen angeben, finden Sie unter Werte, die Sie beim Erstellen oder Aktualisieren einer Verteilung angeben und in der API-Referenzdokumentation für Ihr AWS SDK oder einen anderen API-Client.

Migration von der Ursprungszugriffsidentität (OAI) zur Ursprungszugriffssteuerung (OAC)

Um von einer Legacy-Ursprungszugriffsidentität (OAI) zu einer Ursprungszugriffssteuerung (Origin Access Control, OAC) zu migrieren, aktualisieren Sie zunächst den S3-Bucket-Ursprung, damit sowohl die OAI als auch die OAC auf den Inhalt des Buckets zugreifen können. Dadurch wird sichergestellt, dass CloudFront während des Übergangs zu keinem Zeitpunkt den Zugriff auf den Bucket verliert. Um sowohl OAI als auch OAC den Zugriff auf einen S3-Bucket zu ermöglichen, aktualisieren Sie die Bucket-Richtlinie und nehmen Sie zwei Anweisungen auf, eine für jede Art von Prinzipal.

Die folgende Beispiel-S3-Bucket-Richtlinie ermöglicht sowohl einer OAI als auch einer OAC den Zugriff auf einen S3-Ursprung. Beachten Sie im folgenden Beispiel Folgendes:

  • Ersetzen Sie DOC-EXAMPLE-BUCKET durch den Namen des S3-Bucket-Ursprungs.

  • Ersetzen Sie 111122223333 durch die AWS-Konto-ID, die die CloudFront-Verteilung und den S3-Bucket-Ursprung enthält.

  • Ersetzen Sie EDFDVBD6EXAMPLE durch die ID der CloudFront-Verteilung.

  • Ersetzen Sie EH1HDMB1FH2TC durch die ID der Ursprungszugriffsidentität.

Beispiel S3-Bucket-Richtlinie, die schreibgeschützten Zugriff für eine OAI und eine OAC zulässt

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } }, { "Sid": "AllowLegacyOAIReadOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Nachdem Sie die Bucket-Richtlinie des S3-Ursprungs aktualisiert haben, um den Zugriff sowohl für OAI als auch für OAC zu ermöglichen, können Sie die Verteilungskonfiguration so aktualisieren, dass OAC anstelle von OAI verwendet wird. Weitere Informationen finden Sie unter Erstellen einer neuen Ursprungszugriffssteuerung.

Nachdem die Verteilung vollständig bereitgestellt wurde, können Sie die Anweisung in der Bucket-Richtlinie, die den Zugriff für die OAI ermöglicht, entfernen. Weitere Informationen finden Sie unter Erteilen der Zugriffsberechtigung auf den S3-Bucket für die Ursprungszugriffssteuerung.

Erweiterte Einstellungen für die Ursprungszugriffssteuerung

Die CloudFront-Funktion für die Ursprungszugriffssteuerung umfasst erweiterte Einstellungen, die nur für bestimmte Anwendungsfälle vorgesehen sind. Verwenden Sie die empfohlenen Einstellungen, sofern Sie die erweiterten Einstellungen nicht speziell benötigen.

Die Ursprungszugriffssteuerung enthält eine Einstellung namens Signing behavior (Signierverhalten) (in der Konsole) oder SigningBehavior (in der API, CLI und AWS CloudFormation). Diese Einstellung bietet die folgenden Optionen:

Ursprungsanforderungen immer signieren (empfohlene Einstellung)

Wir empfehlen die Verwendung dieser Einstellung mit der Bezeichnung Sign requests (recommended) (Anforderungen signieren (empfohlen)) in der Konsole bzw. always in der API, CLI und AWS CloudFormation. Bei Verwendung dieser Einstellung signiert CloudFront immer alle Anforderungen, die es an den S3-Bucket-Ursprung sendet.

Ursprungsanforderungen nie signieren

Diese Einstellung heißt Do not sign requests (Anforderungen nicht signieren) in der Konsole bzw. never in der API, CLI und AWS CloudFormation. Verwenden Sie diese Einstellung, um die Ursprungszugriffssteuerung für alle Ursprünge in allen Verteilungen zu deaktivieren, die diese Ursprungszugriffssteuerung verwenden. Auf diese Weise lässt sich im Vergleich zum einzelnen Entfernen einer Ursprungszugriffssteuerung aus allen Ursprüngen und Verteilungen, die diese verwenden, Zeit und Aufwand sparen. Bei Verwendung dieser Einstellung signiert CloudFront keine Anforderungen, die es an den S3-Bucket-Ursprung sendet.

Warnung

Um diese Einstellung verwenden zu können, muss der S3-Bucket-Ursprung öffentlich zugänglich sein. Wenn Sie diese Einstellung mit einem S3-Bucket-Ursprung verwenden, auf den nicht öffentlich zugegriffen werden kann, kann CloudFront nicht auf den Ursprung zugreifen. Der S3-Bucket-Ursprung gibt Fehler an CloudFront zurück und CloudFront leitet diese Fehler an die Viewer weiter.

Viewer (Client)-Authorization-Header nicht überschreiben

Diese Einstellung heißt Do not override authorization header (Autorisierungsheader nicht überschreiben) in der Konsole bzw. no-override in der API, CLI und AWS CloudFormation. Verwenden Sie diese Einstellung, wenn CloudFront Ursprungsanforderungen nur signieren soll, wenn die entsprechende Viewer-Anforderung keinen Authorization-Header enthält. Bei Verwendung dieser Einstellung übergibt CloudFront den Authorization-Header aus der Viewer-Anforderung, sofern vorhanden, signiert jedoch die Ursprungsanforderung (und fügt dabei einen eigenen Authorization-Header hinzu), wenn die Viewer-Anforderung keinen Authorization-Header enthält.

Warnung

Um den Authorization-Header aus der Viewer-Anforderung zu übergeben, müssen Sie den Authorization-Header zu einer Cache-Richtlinie für alle Cache-Verhaltensweisen hinzufügen, die S3-Bucket-Ursprünge verwenden, die dieser Ursprungszugriffssteuerung zugeordnet sind.

Verwenden einer Ursprungszugriffsidentität (Legacy, nicht empfohlen)

Die CloudFront-Ursprungszugriffsidentität(OAI) bietet ähnliche Funktionen wie die Ursprungszugriffssteuerung (OAC), kommt aber nicht für alle Szenarien infrage. Aus diesem Grund empfehlen wir stattdessen die Verwendung von OAC. Insbesondere unterstützt OAI Folgendes nicht:

  • Amazon-S3-Buckets in allen AWS-Regionen, einschließlich Opt-In-Regionen

  • Serverseitige Verschlüsselung mit AWS KMS (SSE-KMS) von Amazon S3

  • Dynamische Anforderungen (PUT, POST oder DELETE) an Amazon S3

  • Neue AWS-Regionen, nach Dezember 2022 eingeführt

Informationen zur Migration von OAI zu OAC finden Sie unter Migration von der Ursprungszugriffsidentität (OAI) zur Ursprungszugriffssteuerung (OAC).

Wenn Sie eine OAI erstellen oder einer Verteilung mit der CloudFront-Konsole hinzufügen, können Sie die Amazon-S3-Bucket-Richtlinie automatisch aktualisieren, um der OAI die Zugriffsberechtigung auf Ihren Bucket zu erteilen. Alternativ können Sie die Bucket-Richtlinie manuell erstellen oder aktualisieren. Unabhängig davon, welche Methode Sie verwenden, sollten Sie die Berechtigungen dennoch überprüfen, um Folgendes sicherzustellen:

  • Ihre CloudFront-OAI kann im Auftrag von Viewern, die diese über CloudFront anfordern, auf Dateien im Bucket zugreifen.

  • Viewer können keine Amazon-S3-URLs verwenden, um auf Ihre Dateien außerhalb von CloudFront zuzugreifen.

Wichtig

Stellen Sie sicher, dass Sie Ihrer CloudFront-OAI die gewünschten Berechtigungen erteilen, wenn Sie CloudFront so konfigurieren, dass alle von CloudFront unterstützten HTTP-Methoden akzeptiert und weitergeleitet werden. Wenn Sie z. B. CloudFront so konfigurieren, dass Anforderungen, die die DELETE-Methode verwenden, angenommen und weitergeleitet werden, konfigurieren Sie Ihre Bucket-Richtlinie so, dass DELETE-Anforderungen entsprechend verarbeitet werden, damit Viewer nur Dateien löschen können, bei denen Sie dies möchten.

Verwenden von Amazon-S3-Bucket-Richtlinien

Sie können einer CloudFront-OAI Zugriff auf Dateien in einem Amazon S3 Bucket gewähren, indem Sie die Bucket-Richtlinie wie folgt erstellen oder aktualisieren:

  • Verwenden des Tabs Permissions (Berechtigungen) des Amazon-S3-Buckets in der Amazon-S3-Konsole.

  • Verwenden von PutBucketPolicy in der Amazon S3-API.

  • Verwenden der CloudFront-Konsole. Wenn Sie Ihren Ursprungseinstellungen eine OAI in der CloudFront-Konsole hinzufügen, können Sie Yes, update the bucket policy (Ja, Bucket-Richtlinie aktualisieren) auswählen, um anzugeben, dass CloudFront die Bucket-Richtlinie in Ihrem Namen aktualisiert.

Wenn Sie die Bucket-Richtlinie manuell aktualisieren, stellen Sie Folgendes sicher:

  • Geben Sie die korrekte OAI als das Principal in der Richtlinie an.

  • Erteilen Sie der OAI die Berechtigungen, die es für den Zugriff auf Objekte im Auftrag von Viewern benötigt.

Weitere Informationen finden Sie in den folgenden Abschnitten.

Eine OAI als den Principal in einer Bucket-Richtlinie angeben

Um eine OAI als Principal in einer Amazon-S3-Bucket-Richtlinie anzugeben, verwenden Sie den Amazon-Ressourcennamen (ARN) der OAI, der die ID der OAI enthält. Beispiel:

"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }

Wenn Sie das vorstehende Beispiel verwenden, ersetzen Sie EH1HDMB1FH2TC durch die ID der OAI. Die ID der OAI finden Sie auf der Seite Origin access identities (Ursprungszugriffsidentitäten) in der CloudFront-Konsole oder unter Verwendung von ListCloudFrontOriginAccessIdentities in der CloudFront-API.

Erteilen von Berechtigungen für eine OAI

Um der OAI die Berechtigungen für den Zugriff auf Objekte in Ihrem Amazon-S3-Bucket zu erteilen, verwenden Sie Aktionen in der Richtlinie, die sich auf bestimmte Amazon-S3-API-Operationen beziehen. Die s3:GetObject-Aktion ermöglicht es der OAI beispielsweise, Objekte im Bucket zu lesen. Weitere Informationen finden Sie in den Beispielen im folgenden Abschnitt oder unter Amazon S3-Aktionen im Benutzerhandbuch zu Amazon Simple Storage Service.

Beispiele für Amazon-S3-Bucket-Richtlinien

Die folgenden Beispiele zeigen Amazon-S3-Bucket-Richtlinien, die CloudFront-OAI Zugriff auf einen S3-Bucket gewähren. So verwenden Sie diese Beispiele:

  • Ersetzen Sie EH1HDMB1FH2TC durch die ID der OAI. Die ID der OAI finden Sie auf der Seite Origin access identities (Ursprungszugriffsidentitäten) in der CloudFront-Konsole oder unter Verwendung von ListCloudFrontOriginAccessIdentities in der CloudFront-API.

  • Ersetzen Sie DOC-EXAMPLE-BUCKET durch den Namen Ihres Amazon-S3-Buckets.

Beispiel Amazon-S3-Bucket-Richtlinie, die der OAI Lesezugriff gewährt

Im folgenden Beispiel kann die OAI Objekte im angegebenen Bucket (s3:GetObject) lesen.

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Beispiel Amazon-S3-Bucket-Richtlinie, die der OAI Lese- und Schreibzugriff gewährt

Im folgenden Beispiel kann die OAI Objekte im angegebenen Bucket (s3:GetObject und s3:PutObject) lesen und schreiben. Dadurch können Viewer Dateien in Ihren Amazon-S3-Bucket über CloudFront hochladen.

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Verwenden von Amazon-S3-Objekt-ACLs (nicht empfohlen)

Wichtig

Es wird empfohlen, Amazon-S3-Bucket-Richtlinien zu verwenden, um einer OAI Zugriff auf einen S3-Bucket zu gewähren. Sie können ACLs wie in diesem Abschnitt beschrieben verwenden, dies wird jedoch nicht empfohlen.

Amazon S3 empfiehlt die Einstellung von S3 Object Ownership (S3-Objekteigentümerschaft) auf bucket owner enforced (Bucket-Eigentümer erzwungen), was bedeutet, dass ACLs für den Bucket und die darin enthaltenen Objekte deaktiviert sind. Wenn Sie diese Einstellung für Objekteigentümerschaft anwenden, müssen Sie Bucket-Richtlinien verwenden, um Zugriff auf die OAI zu gewähren (siehe vorheriger Abschnitt).

Der folgende Abschnitt gilt nur für Anwendungsfälle für Legacy-Systeme, für die ACLs erforderlich sind.

Sie können einer CloudFront-OAI Zugriff auf Dateien in einem Amazon-S3-Bucket gewähren, indem Sie die ACL der Datei auf folgende Weise erstellen oder aktualisieren:

  • Verwenden des Tabs Permissions (Berechtigungen) des Amazon-S3-Objekts in der Amazon-S3-Konsole.

  • Verwenden von PutObjectAcl in der Amazon S3-API.

Wenn Sie einer OAI über eine ACL Zugriff gewähren, müssen Sie die OAI mit seiner kanonischen Amazon-S3-Benutzer-ID angeben. Dies ist der Wert für Amazon S3 canonical user ID (Kanonische Amazon-S3-Benutzer-ID) auf der Seite „Origin access identites“ (Ursprungszugriffsidentitäten) in der CloudFront-Konsole. Wenn Sie die CloudFront-API verwenden, nutzen Sie den Wert des S3CanonicalUserId-Elements, das beim Erstellen der OAI zurückgegeben wurde, oder rufen Sie ListCloudFrontOriginAccessIdentities in der CloudFront-API auf.

In neueren Amazon-S3-Regionen ist es erforderlich, Signature Version 4 für authentifizierte Anforderungen zu verwenden. (Informationen zu den Signaturversionen, die in jeder Amazon-S3-Region unterstützt werden, finden Sie unter Amazon-Simple-Storage-Service-Endpunkte und -Kontingente in AWS – Allgemeine Referenz.) Wenn Sie eine Ursprungszugriffsidentität verwenden und sich Ihr Bucket in einer der Regionen befindet, die Signature Version 4 erfordert, beachten Sie Folgendes:

  • DELETE-, GET-, HEAD-, OPTIONS- und PATCH-Anfragen werden ohne Einschränkungen unterstützt.

  • Wenn Sie PUT-Anforderungen an CloudFront übermitteln möchten, um Dateien in Ihren Amazon-S3-Bucket hochzuladen, müssen Sie der Anforderung einen x-amz-content-sha256-Header hinzufügen. Der Header-Wert muss einen SHA-256-Hash des Anforderungstextes enthalten. Weitere Informationen finden Sie in der Dokumentation zum Header x-amz-content-sha256 auf der Seite Häufig verwendete Anforderungsheader in der Amazon Simple Storage Service API-Referenz.

  • POST-Anfragen werden nicht unterstützt.