Amazon Simple Storage Service
Entwicklerhandbuch (API-Version 2006-03-01)

Beispiele für Bucket-Richtlinien

Dieser Abschnitt zeigt einige Beispiele für typische Anwendungsfälle für Bucket-Richtlinien. Die Richtlinien verwenden die Zeichenfolgen bucket und examplebucket im Ressourcenwert. Um diese Richtlinien zu testen, ersetzen Sie diese Zeichenfolgen durch Ihren Bucket-Namen. Informationen zur Sprache der Zugriffsichtlinie finden Sie unter Übersicht über die Zugriffsrichtliniensprache.

Anmerkung

Bucket-Richtlinien sind auf eine Größe von 20 KB beschränkt.

Sie können den AWS Policy Generator verwenden, um eine Bucket-Richtlinie für Ihren Amazon S3-Bucket zu erstellen. Anschließend können Sie mittels des generierten Dokuments Ihre Bucket-Richtlinie über die Amazon S3-Konsole, eine Reihe von Drittanbietertools oder Ihre Anwendung festlegen.

Wichtig

Beim Testen von Berechtigungen unter Verwendung der Amazon S3 müssen Sie der Konsole zusätzliche Berechtigungen erteilen, die die Konsole benötigt – s3:ListAllMyBuckets, s3:GetBucketLocation und s3:ListBucket. Ein detailliertes Beispiel für eine Richtlinie, die Berechtigungen für Benutzer erteilt und sie unter Verwendung der Konsole testet, finden Sie unter Anleitung: Kontrollieren des Zugriffs auf einen Bucket mit Benutzerrichtlinien.

Berechtigungen an mehrere Konten mit zusätzlichen Bedingungen erteilen

Die folgende Beispielsrichtlinie erteilt mehreren AWS-Konten die Berechtigungen s3:PutObject und s3:PutObjectAcl und fordert, dass jede Anforderung für diese Operationen die vordefinierte public-read-ACL beinhaltet. Weitere Informationen finden Sie unter Angeben von Berechtigungen in einer Richtlinie und Angeben von Bedingungen in einer Richtlinie.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": {"AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]}, "Action":["s3:PutObject","s3:PutObjectAcl"], "Resource":["arn:aws:s3:::examplebucket/*"], "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ] }

Erteilen von Leseberechtigungen an einen anonymen Benutzer

Die folgende Beispielrichtlinie erteilt allen öffentlichen anonymen Benutzern die s3:GetObject-Berechtigung. (Eine Liste der Berechtigungen und der von ihnen zugelassenen Operationen finden Sie unter Angeben von Berechtigungen in einer Richtlinie.) Diese Berechtigung gestattet jedem, die Objektdaten zu lesen, was praktisch ist, wenn Sie Ihren Bucket als Website konfigurieren und wollen, dass jeder die Objekte in Ihrem Bucket lesen kann.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AddPerm", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::examplebucket/*"] } ] }

Warnung

Seien Sie vorsichtig, wenn Sie anonymen Zugriff auf Ihren S3-Bucket erteilen. Wenn Sie anonymen Zugriff gewähren, kann jeder auf der ganzen Welt auf Ihren Bucket zugreifen. Wir empfehlen dringend, nie einen anonymen Schreibzugriff auf Ihren S3-Bucket zu gewähren.

Beschränken des Zugriffs auf bestimmte IP-Adressen

Das folgende Beispiel erteilt jedem Benutzer die Berechtigungen, beliebige Amazon S3-Operationen im angegebenen Bucket auszuführen. die Anforderung muss jedoch aus dem in der Bedingung angegebenen IP-Adressbereich stammen.

Die Bedingung in dieser Anweisung identifiziert den Bereich 54.240.143.* als zulässigen Bereich für Internetprotokoll 4-Adressen (IPv4-Adressen), mit einer Ausnahme: 54.240.143.188.

Der Condition-Block verwendet die Bedingungen IpAddress und NotIpAddress und den Bedingungsschlüssel aws:SourceIp, wobei es sich um einen AWS-übergreifenden Bedingungsschlüssel handelt. Weitere Informationen über diese Bedingungsschlüssel finden Sie unter Angeben von Bedingungen in einer Richtlinie. Die aws:SourceIp IPv4-Werte verwenden die CIDR-Standardnotation. Weitere Informationen finden Sie unter Bedingungsoperatoren für IP-Adressen im IAM-Benutzerhandbuch.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}, "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} } } ] }

IPv4- und IPv6-Adressen zulassen

Wenn Sie mit der Verwendung von IPv6-Adressen beginnen, sollten Sie alle Richtlinien Ihrer Organisation zusätzlich zu den bereits vorhandenen IPv4-Adressbereichen mit Ihren IPv6-Adressbereichen aktualisieren, um die Funktion Ihrer Richtlinien während der Umstellung auf IPv6 sicherzustellen.

Das folgende Beispiel für eine Bucket-Richtlinie zeigt, wie Sie IPv4- und IPv6-Adressbereiche kombinieren können, um alle gültigen IP-Adressen in Ihrer Organisation abzudecken. Die Beispielrichtlinie würde Zugriff auf die IP-Adressen 54.240.143.1 und 2001:DB8:1234:5678::1 des Beispiels erteilen und den Zugriff auf die Adressen 54.240.143.129 und 2001:DB8:1234:5678:ABCD::1 verweigern.

Die IPv6-Werte für aws:SourceIp müssen im CIDR-Standardformat angegeben werden. Für IPv6 unterstützen wir die Verwendung von ::, um eine Reihe von Nullen darzustellen, z. B. 2032001:DB8:1234:5678::/64. Weitere Informationen finden Sie unter Bedingungsoperatoren für IP-Adressen im IAM-Benutzerhandbuch.

{ "Id":"PolicyId2", "Version":"2012-10-17", "Statement":[ { "Sid":"AllowIPmix", "Effect":"Allow", "Principal":"*", "Action":"s3:*", "Resource":"arn:aws:s3:::examplebucket/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "54.240.143.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "54.240.143.128/30", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

Beschränken des Zugriffs auf einen spezifischen HTTP-Referrer

Angenommen, Sie haben eine Website mit Domänenname (www.example.com oder example.com) mit Links auf Fotos und Videos, die in Ihrem S3-Bucket examplebucket gespeichert sind. Standardmäßig sind alle S3-Ressourcen privat, d. h. nur das AWS-Konto, das die Ressourcen erstellt hat, kann darauf zugreifen. Um Lesezugriff auf diese Objekte von Ihrer Website aus zu erlauben, können Sie eine Bucket-Richtlinie hinzufügen, die mit dem s3:GetObject-Schlüssel eine aws:Referer-Berechtigung mit der Bedingung vergibt, dass die Get-Anforderung von bestimmten Webseiten kommen muss. Die folgende Richtlinie spezifiziert die StringLike-Bedingung mit dem aws:Referer-Bedingungsschlüssel.

{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::examplebucket/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

Stellen Sie sicher, dass die von Ihnen verwendeten Browser den http referer-Header in der Anforderung verwenden.

Sie können den Zugriff auf Objekte im examplebucket-Bucket weiter sichern, indem Sie der Bucket-Richtlinie eine explizite Zugriffsverweigerung hinzufügen, wie im folgenden Beispiel gezeigt. Eine explizite Zugriffsverweigerung überschreibt jede Berechtigung, die Sie auf andere Weise für Objekte im examplebucket-Bucket erteilen, wie beispielsweise ACLs oder Benutzerrichtlinien.

Wichtig

Beachten Sie, das dieses Beispiel alle Benutzer (inklusive des Stammbenutzers) daran hindert, alle Amazon S3-Aktionen, einschließlich der Verwaltung von Bucket-Richtlinien, auszuführen. Erwägen Sie, eine dritte Sid hinzuzufügen, mit der dem Stammbenutzer s3:*-Aktionen gewährt werden.

{ "Version": "2012-10-17", "Id": "http referer policy example", "Statement": [ { "Sid": "Allow get requests referred by www.example.com and example.com.", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]} } }, { "Sid": "Explicit deny to ensure requests are allowed only from specific referer.", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]} } } ] }

Erteilen von Berechtigungen für eine Amazon CloudFront-Ursprungsidentität

Die im folgenden Beispiel gezeigte Bucket-Richtlinie erteilt eine CloudFront-Ursprungsidentitätsberechtigung, um alle Objekte in Ihrem Amazon S3-Bucket abzurufen (aufzulisten). Die CloudFront-Ursprungsidentität wird verwendet, um die CloudFront-Funktion für privaten Inhalt zu unterstützen. Die Richtlinie verwendet das CanonicalUser-Präfix statt AWS, um eine kanonische Benutzer-ID anzugeben. Weitere Informationen zur CloudFront-Unterstützung für die Bereitstellung privater Inhalte finden Sie im Thema Bereitstellen privater Inhalte im Entwicklerhandbuch für Amazon CloudFront. Sie müssen die kanonische Benutzer-ID für die Ursprungszugriffsidentität Ihrer CloudFront-Verteilung angeben. Weitere Informationen zur Ermittlung der kanonischen Benutzer-ID finden Sie unter Angeben eines Prinzipals in einer Richtlinie.

{ "Version":"2012-10-17", "Id":"PolicyForCloudFrontPrivateContent", "Statement":[ { "Sid":" Grant a CloudFront Origin Identity access to support private content", "Effect":"Allow", "Principal":{"CanonicalUser":"CloudFront Origin Identity Canonical User ID"}, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::examplebucket/*" } ] }

Hinzufügen einer Bucket-Richtlinie zur Anforderung einer MFA

Amazon S3 unterstützt den MFA-geschützten API-Zugriff. Mittels dieser Funktion können Sie eine Multifaktor-Authentifizierung (MFA) für den Zugriff auf Ihre Amazon S3-Ressourcen durchsetzen. Die Multi-Factor Authentication bietet eine zusätzliche Sicherheitsebene für Ihre AWS-Umgebung. Es handelt sich um eine Sicherheitsfunktion, die die Angabe eines gültigen MFA-Codes von Benutzern erfordert, mit dem das physische Eigentum eines MFA-Geräts belegt wird. Weitere Informationen finden Sie unter AWS-Multifaktor-Authentifizierung. Sie können die MFA-Authentifizierung für alle Anforderungen fordern, die auf Ihre Amazon S3-Ressourcen zugreifen.

Sie können die Forderung der MFA-Authentifizierung unter Verwendung des aws:MultiFactorAuthAge-Schlüssels in einer Bucket-Richtlinie erzwingen. IAM-Benutzer können über temporäre Anmeldeinformationen, die durch den AWS STS (Security Token Service) ausgestellt werden, auf Amazon S3-Ressourcen zugreifen. Sie geben den MFA-Code zum Zeitpunkt der STS-Anforderung an.

Wenn Amazon S3 eine Anforderung mit MFA-Authentifizierung erhält, stellt der aws:MultiFactorAuthAge-Schlüssel einen numerischen Wert bereit, der angibt, vor wie langer Zeit (in Sekunden) die temporären Anmeldeinformationen erstellt wurden. Wenn die in der Anforderung bereitgestellten temporären Anmeldeinformationen nicht mit einem MFA-Gerät erstellt wurden, ist dieser Schlüsselwert null (nicht vorhanden). In einer Bucket-Richtlinie können Sie eine Bedingung hinzufügen, um diesen Wert zu überprüfen, wie im folgenden Beispiel für eine Bucket-Richtlinie gezeigt. Die Richtlinie lehnt Amazon S3-Operationen im Ordner /taxdocuments im Bucket examplebucket ab, wenn die Anforderung nicht MFA-authentifiziert ist. Weitere Informationen zur MFA-Authentifizierung finden Sie unter Verwendung der Multifaktor-Authentifizierung (MFA) in AWS im IAM-Benutzerhandbuch.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

Die Null-Bedingung im Condition-Block wird zu true ausgewertet, wenn der aws:MultiFactorAuthAge-Schlüsselwert null ist, d. h. die temporären Anmeldeinformationen in der Anforderung wurden ohne den MFA-Schlüssel erstellt.

Die folgende Bucket-Richtlinie ist eine Erweiterung der vorhergehenden Bucket-Richtlinie. Sie beinhaltet zwei Richtlinienanweisungen. Eine Anweisung erteilt die s3:GetObject-Berechtigung für einen Bucket (examplebucket) an jeden, und eine weitere Anweisung schränkt den Zugriff auf den Ordner examplebucket/taxdocuments im Bucket weitere in, indem sie eine MFA-Authentifizierung fordert.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::examplebucket/*" } ] }

Optional können Sie eine numerische Bedingung verwenden, um die Dauer zu beschränken, für die der aws:MultiFactorAuthAge-Schlüssel gültig ist, unabhängig von der Lebensdauer der temporären Sicherheitsanmeldeinformationen, die für die Authentifizierung der Anforderung verwendet wurden. Beispielsweise überprüft die folgende Bucket-Richtlinie zusätzlich zur geforderten MFA-Authentifizierung auch, vor wie langer Zeit die temporäre Sitzung erstellt wurde. Die Richtlinie verweigert jede Operation, wenn der aws:MultiFactorAuthAge-Schlüsselwert angibt, dass die temporäre Sitzung vor mehr als einer Stunde erstellt wurde (3600 Sekunden).

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::examplebucket/*" } ] }

Erteilung von kontenübergreifenden Berechtigungen für das Hochladen von Objekten, wobei sichergestellt wird, dass der Bucket-Eigentümer volle Kontrolle besitzt

Sie können einem anderen AWS-Konto erlauben, Objekte in Ihren Bucket hochzuladen. Sie können jedoch entscheiden, dass Sie als Bucket-Eigentümer vollen Zugriff auf die in Ihren Bucket hochgeladenen Objekte haben müssen. Die folgende Richtlinie erzwingt, dass einem spezifischen AWS-Konto (111111111111) die Möglichkeit verweigert wird, Objekte hochzuladen, es sei denn, dieses Konto erteilt dem durch die E-Mail-Adresse (xyz@amazon.com) identifizierten Bucket-Eigentümer volle Kontrolle. Die StringNotEquals-Bedingung in der Richtlinie spezifiziert den s3:x-amz-grant-full-control-Bedingungsschlüssel, um die Anforderung auszudrücken (siehe Angeben von Bedingungen in einer Richtlinie).

{ "Version":"2012-10-17", "Statement":[ { "Sid":"111", "Effect":"Allow", "Principal":{"AWS":"1111111111"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::examplebucket/*" }, { "Sid":"112", "Effect":"Deny", "Principal":{"AWS":"1111111111" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::examplebucket/*", "Condition": { "StringNotEquals": {"s3:x-amz-grant-full-control":["emailAddress=xyz@amazon.com"]} } } ] }

Gewähren von Berechtigungen für Amazon S3-Bestand und Amazon S3-Analysen

Die Amazon S3-Bestandserfassung erstellt Listen der Objekte in einem S3-Bucket. Der Amazon S3-Analyseexport erstellt Ausgabedateien der in der Analyse verwendeten Daten. Der Bucket, dessen Objekte die Bestandserfassung auflistet, wird als Quell-Bucket bezeichnet. Die Buckets, in die die Bestandsdatei und die Analyseexportdatei geschrieben werden, werden als Ziel-Buckets bezeichnet. Wenn Sie einen Bestand für einen S3-Bucket oder den Analyseexport einrichten, müssen Sie eine Bucket-Richtlinie für den Ziel-Bucket erstellen. Weitere Informationen finden Sie unter Amazon S3-Bestand und Amazon S3-Analyse – Speicherklassenanalyse.

Das folgende Beispiel für eine Bucket-Richtlinie erteilt die Amazon S3-Berechtigung, Objekte aus dem Konto für den Quell-Bucket in den Ziel-Bucket zu schreiben (PUTs). Sie verwenden eine solche Bucket-Richtlinie für den Ziel-Bucket, wenn Sie einen Amazon S3-Bestand und einen Amazon S3-Analyseexport einrichten.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"InventoryAndAnalyticsExamplePolicy", "Effect":"Allow", "Principal": {"Service": "s3.amazonaws.com"}, "Action":["s3:PutObject"], "Resource":["arn:aws:s3:::destination-bucket/*"], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, "StringEquals": { "aws:SourceAccount": "1234567890", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }