Beschränken des Zugriffs auf Amazon-S3-Inhalte durch Verwenden einer Ursprungszugriffsidentität - Amazon CloudFront

Beschränken des Zugriffs auf Amazon-S3-Inhalte durch Verwenden einer Ursprungszugriffsidentität

Gehen Sie folgendermaßen vor, um den Zugriff auf Inhalte zu beschränken, die Sie über Amazon S3 Buckets bereitstellen:

  1. Erstellen Sie einen speziellen CloudFront-Benutzer, eine sog. Ursprungszugriffsidentität (Origin Access Identity, OAI), und verknüpfen Sie ihn mit Ihrer Verteilung.

  2. Konfigurieren Sie Ihre S3-Bucket-Berechtigungen so, dass Sie CloudFront die OAI verwenden kann, um auf die Dateien in Ihrem Bucket zuzugreifen und sie Ihren Benutzern bereitzustellen. Stellen Sie sicher, dass Benutzer keine direkte URL zum S3 Bucket verwenden können, um dort auf eine Datei zuzugreifen.

Nachdem Sie diese Schritte ausgeführt haben, können Benutzer nur über CloudFront auf Ihre Dateien zugreifen, nicht direkt aus dem S3-Bucket.

Anmerkung

Wenn Sie den Zugriff auf Dateien mithilfe von CloudFront-signierten URLs oder signierten Cookies beschränken, möchten Sie nicht, dass der Zugriff auf die Dateien einfach über die direkte Amazon-S3-URL möglich ist. Stattdessen möchten Sie, dass der Zugriff auf die Dateien nur über die CloudFront-URL möglich ist, sodass Ihre Schutzmechanismen funktionieren. Weitere Informationen über die Verwendung von signierten URLs und Cookies finden Sie unter Bereitstellen privater Inhalte mit signierten URLs und signierten Cookies.

In diesem Thema wird ausführlich erläutert, wie Sie die OAI einrichten und Berechtigungen erteilen, um einen sicheren Zugriff auf Ihre S3-Dateien zu gewährleisten.

Wichtig

Wenn Sie einen Amazon S3 Bucket verwenden, der als Website-Endpunkt konfiguriert ist, müssen Sie ihn mit CloudFront als benutzerdefinierten Ursprung einrichten. Sie können nicht die in diesem Thema beschriebene Funktion der Ursprungszugriffsidentität verwenden. Sie können jedoch den Zugriff auf Inhalte auf einem benutzerdefinierten Ursprung einschränken, indem Sie benutzerdefinierte Header einrichten und Ihren Ursprung so konfigurieren, dass diese für ihn erforderlich sind. Weitere Informationen finden Sie unter Beschränken des Zugriffs auf Dateien auf benutzerdefinierten Ursprungsservern.

Übersicht über die Einrichtung der OAI (Ursprungszugriffsidentität)

Wenn Sie erstmalig einen Amazon S3 Bucket als Ursprung für eine CloudFront-Verteilung einrichten, erteilen Sie jedem eine Leseberechtigung für die Dateien in Ihrem Bucket. Auf diese Weise kann jeder Benutzer entweder über CloudFront oder über die Amazon S3-URL auf Ihre Dateien zugreifen. CloudFront stellt Amazon S3-URLs nicht bereit, Ihre Benutzer verfügen jedoch möglicherweise über diese URLs, wenn Ihre Anwendung Objekte direkt von Amazon S3 bereitstellt oder wenn jemand direkte Links zu bestimmten Objekten in Amazon S3 veröffentlicht.

Wenn Sie CloudFront-signierte URLs oder -signierte Cookies verwenden, um den Zugriff auf Dateien in Ihrem Amazon S3 Bucket zu beschränken, möchten Sie wahrscheinlich auch vermeiden, dass Benutzer mithilfe von Amazon-S3-URLs auf Ihre Amazon-S3-Dateien zugreifen. Wenn Benutzer direkt in Amazon S3 auf Ihre Dateien zugreifen, umgehen sie die Steuerelemente, die von CloudFront-signierten URLs oder signierten Cookies bereitgestellt werden. Dies beinhaltet die Kontrolle über Datum und Uhrzeit, zu denen ein Benutzer nicht mehr auf Ihre Inhalte zugreifen kann, und die Kontrolle darüber, welche IP-Adressen für den Zugriff auf Inhalte verwendet werden können. Wenn Benutzer sowohl über CloudFront als auch direkt über Amazon S3-URLs auf Dateien zugreifen, sind die CloudFront-Zugriffsprotokolle darüber hinaus aufgrund ihrer Unvollständigkeit von geringerem Nutzen.

Führen Sie die folgenden Schritte aus, um sicherzustellen, dass Ihre Benutzer nur über CloudFront-URLs auf Ihre Dateien zugreifen, unabhängig davon, ob die URLs signiert sind:

  1. Erstellen Sie eine Ursprungszugriffsidentität, bei der es sich um einen speziellen CloudFront-Benutzer handelt, und verknüpfen Sie die Ursprungszugriffsidentität mit Ihrer Verteilung. Sie verknüpfen die Ursprungszugriffsidentität mit Ursprüngen, sodass Sie Ihren gesamten Amazon S3-Inhalt oder nur einen Teil davon sichern können. Sie können auch eine Ursprungszugriffsidentität erstellen und Ihrer Verteilung hinzufügen, wenn Sie die Verteilung erstellen. Weitere Informationen finden Sie unter Erstellen einer CloudFront-OAI und Hinzufügen zu Ihrer Verteilung.

  2. Ändern Sie entweder bei Ihrem Amazon-S3-Bucket oder bei den Dateien in Ihrem Bucket die Berechtigungen, damit nur die Ursprungszugriffsidentität über Leseberechtigung verfügt. Wenn Viewer mithilfe von CloudFront auf Ihre Amazon-S3-Dateien zugreifen, ruft die CloudFront-Ursprungszugriffsidentität die Dateien im Namen der Viewer ab. Wenn Viewer Dateien direkt über Amazon-S3-URLs anfordern, wird der Zugriff verweigert. Die Ursprungszugriffsidentität darf auf Dateien in Ihrem Amazon-S3 Bucket zugreifen, die Viewer jedoch nicht. Weitere Informationen finden Sie unter Erteilen der OAI-Berechtigung zum Lesen von Dateien in Ihrem Amazon-S3-Bucket.

Erstellen einer CloudFront-OAI und Hinzufügen zu Ihrer Verteilung

Ein AWS-Konto kann bis zu 100 CloudFront-Ursprungszugriffsidentitäten (OIAs) haben. Sie können jedoch beliebig vielen Verteilungen eine OAI hinzufügen, sodass in der Regel eine OAI ausreicht.

Wenn Sie beim Erstellen der Verteilung keine OAI erstellt und zu Ihrer Verteilung hinzugefügt haben, können Sie jetzt eine erstellen und hinzufügen. Dafür können Sie entweder die CloudFront-Konsole oder die CloudFront-API verwenden:

So erstellen Sie eine OAI und fügen diese Ihrer Verteilung hinzu

Wenn Sie beim Erstellen der Verteilung keine OAI erstellt haben, gehen Sie folgendermaßen vor:

So erstellen Sie eine CloudFront-OAI mit der CloudFront-Konsole

  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 die ID einer Verteilung aus, die einen S3-Ursprung hat.

  3. Wählen Sie den Tab Origins (Ursprünge) aus.

  4. Wählen Sie den Amazon-S3-Ursprung und dann Edit (Bearbeiten) aus.

  5. Für S3 bucket access (S3-Bucket-Zugriff) wählen Sie Yes use OAI (Ja, OAI verwenden) aus.

  6. Wenn Sie bereits über eine OAI verfügen, die Sie verwenden möchten, wählen Sie die OAI aus der Dropdown-Liste aus. Wenn Sie bereits über eine OAI verfügen, empfiehlt es sich, diese erneut zu verwenden, um die Wartung zu vereinfachen.

    Wenn Sie eine OAI erstellen möchten, wählen Sie Create a New OAI (Neue OAI erstellen). Bei Bedarf können Sie den automatisch generierten OAI-Namen durch einen benutzerdefinierten Namen ersetzen.

  7. Wenn CloudFront die Amazon-S3-Bucket-Richtlinie automatisch aktualisieren soll, um Lesezugriff auf die OAI zu ermöglichen, wählen Sie Yes, update the bucket policy (Ja, Bucket-Richtlinie aktualisieren) aus.

    Wichtig

    Wenn Sie Yes, Update Bucket Policy (Ja, Bucket-Richtlinie aktualisieren) auswählen, aktualisiert CloudFront die Bucket-Berechtigungen, um der angegebenen OAI die Berechtigung zum Lesen von Dateien in Ihrem Bucket zu erteilen. CloudFront entfernt jedoch keine vorhandenen Berechtigungen. Wenn Benutzer aktuell zum Zugriff auf die Dateien in Ihrem Bucket mithilfe von Amazon S3-URLs berechtigt sind, sind sie nach der Aktualisierung Ihrer Bucket-Berechtigungen durch CloudFront weiterhin dazu berechtigt. Verwenden Sie zum Anzeigen oder Entfernen vorhandener Bucket-Berechtigungen eine von Amazon S3 bereitgestellte Methode.

    Wenn Sie die Berechtigungen für Ihren Amazon-S3-Bucket manuell aktualisieren möchten, wählen Sie No, I will update the bucket policy (Nein, ich aktualisiere die Bucket-Richtlinie) aus. Weitere Informationen finden Sie unter Erteilen der OAI-Berechtigung zum Lesen von Dateien in Ihrem Amazon-S3-Bucket.

  8. Wählen Sie unten auf der Seite die Option Save changes (Änderungen speichern) aus.

  9. Wenn Sie über mehr als einen Amazon-S3-Ursprung verfügen, wiederholen Sie die Schritte, um für jeden einzelnen eine OAI hinzuzufügen.

Erstellen einer OAI mit der CloudFront-API

Wenn Sie bereits über eine Ursprungszugriffsidentität verfügen und diese erneut verwenden möchten, anstatt eine neue zu erstellen, fahren Sie fort mit Hinzufügen einer OAI zu Ihrer Verteilung mithilfe der CloudFront-API.

Verwenden Sie die API-Aktion CreateCloudFrontOriginAccessIdentity, um eine CloudFront-OAI mit der CloudFront-API zu erstellen. Die Antwort enthält eine Id und eine S3CanonicalUserId für die neue OAI. Notieren Sie sich diese Werte, da Sie diese zu einem späteren Zeitpunkt benötigen. Weitere Informationen finden Sie unter CreateCloudFrontOriginAccessIdentity in der Amazon CloudFront-API-Referenz.

Hinzufügen einer OAI zu Ihrer Verteilung mithilfe der CloudFront-API

Sie können die CloudFront-API verwenden, um eine OAI zu einer bestehenden Verteilung hinzuzufügen oder um eine neue Verteilung zu erstellen, die eine OAI enthält. Fügen Sie in beiden Fällen ein OriginAccessIdentity-Element ein. Dieses Element enthält den Wert des Id-Elements, das die CreateCloudFrontOriginAccessIdentity-API-Aktion beim Erstellen der OAI zurückgegeben hat. Sie können das OriginAccessIdentity-Element zu einem oder mehreren Ursprüngen hinzufügen.

Lesen Sie die folgenden Themen in der Amazon CloudFront API-Referenz:

Erteilen der OAI-Berechtigung zum Lesen von Dateien in Ihrem Amazon-S3-Bucket

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" }

Zum Verwenden das vorstehenden Beispiels ersetzen Sie EH1HDMB1FH2TC durch die ID der OAI. Die ID der OAI finden Sie auf der Seite „Origin access identitues“ (Ursprungszugriffsidentitäten) in der CloudFront-Konsole oder unter 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 Schlüsselwörter in der Richtlinie, die sich auf bestimmte Amazon-S3-API-Operationen beziehen. Die s3:GetObject-Berechtigung 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 Zugriff auf eine CloudFront-OAI gewähren. So verwenden Sie diese Beispiele:

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 der Registerkarte 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.

Verwenden einer OAI in Amazon-S3-Regionen, die nur die Authentifizierung von Signaturen der Version 4 unterstützen

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.