Amazon S3-Bedingungsschlüssel - Amazon Simple Storage Service

Amazon S3-Bedingungsschlüssel

Mit der Sprache der Zugriffsrichtlinie können Sie bei der Erteilung von Berechtigungen Bedingungen angeben. Um Bedingungen dafür festzulegen, wann eine Richtlinie gültig ist, können Sie das optionale Element Condition oder den Block Condition verwenden. Sie können vordefinierte AWS‐weite Schlüssel und Amazon S3‐spezifische Schlüssel verwenden, um Bedingungen in einer Amazon S3-Zugriffsrichtlinie anzugeben.

Im Element Condition formulieren Sie Ausdrücke, in denen Sie boolesche Operatoren verwenden (gleich, kleiner als usw.), um die Bedingung auf Übereinstimmung mit den Werten in der Anforderung zu prüfen. Wenn Sie einem Benutzer beispielsweise die Berechtigung zum Hochladen eines Objekts erteilen, kann der Bucket-Eigentümer anfordern, dass das Objekt öffentlich lesbar ist, indem er die Bedingung StringEquals wie hier gezeigt hinzufügt:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::awsexamplebucket1/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

Im Beispiel gibt der Block Condition die Bedingung StringEquals an, die auf das angegebene Schlüssel-Wert-Paar angewendet wird, "s3:x-amz-acl":["public-read"]. Es gibt einen Satz vordefinierter Schlüssel, die Sie zum Ausdruck einer Bedingung verwenden können. Das Beispiel verwendet den Bedingungsschlüssel s3:x-amz-acl. Diese Bedingung erfordert, dass der Benutzer in jeder PUT Object-Anforderung den Header x-amz-acl mit dem Wert public-read angibt.

AWS‐weite Bedingungsschlüssel

AWS stellt einen Satz gemeinsamer Schlüssel bereit, die von allen AWS-Services unterstützt werden, die Richtlinien unterstützen. Diese Schlüssel werden als AWS‐-weite Schlüssel bezeichnet. Sie verwenden das Präfix aws:. Die vollständige Liste der AWS‐weiten Bedingungsschlüssel finden Sie unter Verfügbare AWS-Schlüssel für Bedingungen im IAM-Benutzerhandbuch.

Sie können AWS‐weite Bedingungsschlüssel in Amazon S3 verwenden. Die folgende Beispiel-Bucket-Richtlinie ermöglicht authentifizierten Benutzern das Verwenden der Aktion s3:GetObject, wenn die Anforderung aus einem bestimmten Bereich von IP-Adressen stammt (192.0.2.0.*), sofern die IP-Adresse nicht 192.0.2.188 ist. Im Bedingungsblock sind die Bedingungen IpAddress und NotIpAddress enthalten, und bei jeder Bedingung ist ein Schlüssel-Wert-Paar zur Auswertung angefügt. Beide Schlüssel-Wert-Paare in diesem Beispiel verwenden den AWS‐weiten Schlüssel aws:SourceIp.

Anmerkung

Die in der Bedingung angegebenen Schlüsselwerte IPAddress und NotIpAddress verwenden die CIDR-Notation, wie in RFC 4632 beschrieben. Weitere Informationen finden Sie unter http://www.rfc-editor.org/rfc/rfc4632.txt.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "192.0.2.0/24" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32" } } } ] }

Sie können auch andere AWS‐weite Bedingungsschlüssel in Amazon S3-Richtlinien verwenden. Beispielsweise können Sie die Bedingungsschlüssel aws:SourceVpce und aws:SourceVpc in Bucket-Richtlinien für VPC-Endpunkte angeben. Beispiele finden Sie unter Beispiel für Bucket-Richtlinien für VPC-Endpunkte für Amazon S3.

Amazon S3‐spezifische Bedingungsschlüssel

Sie können Amazon S3-Bedingungsschlüssel mit bestimmten Amazon S3-Aktionen verwenden. Jeder Bedingungsschlüssel wird dem gleichnamigen Anforderungs-Header zugeordnet, der von der API zugelassen wird und auf dem die Bedingung festgelegt werden kann. Amazon S3‐spezifische Bedingungsschlüssel diktieren das Verhalten der gleichnamigen Anforderungs-Header. Die vollständige Liste der Amazon S3‐spezifischen Bedingungsschlüssel finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon S3.

Der Bedingungsschlüssel s3:x-amz-acl, den Sie zum Erteilen der Bedingungsberechtigung s3:PutObject verwenden können, definiert das Verhalten des Anforderungs-Headers x-amz-acl, den die PUT-Objekt-API unterstützt. Der Bedingungsschlüssel s3:VersionId, den Sie für die bedingte Berechtigung für die Bedingung s3:GetObjectVersion verwenden können, definiert das Verhalten des Abfrageparameters versionId, den Sie in einer GET-Objekt-Anforderung setzen.

Die folgende Bucket-Richtlinie erteilt die Berechtigung s3:PutObject für zwei AWS-Konten, wenn die Anforderung den Header x-amz-acl enthält, durch den das Objekt öffentlich lesbar ist. Der Condition-Block verwendet die StringEquals-Bedingung und ist mit dem Schlüssel-Wert-Paar "s3:x-amz-acl":["public-read" zur Auswertung versehen. Im Schlüssel-Wert-Paar ist s3:x-amz-acl ein Amazon S3–spezifischer Schlüssel, wie durch das Präfix s3: angezeigt wird.

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

Nicht alle Bedingungen machen für alle Aktionen auch Sinn. Beispielsweise ist es sinnvoll, die Bedingung s3:LocationConstraint für eine Richtlinie einzufügen, die die Amazon S3-Berechtigung s3:CreateBucket erteilt. Es ist jedoch nicht sinnvoll, diese Bedingung in eine Richtlinie aufzunehmen, die die Berechtigung s3:GetObject erteilt. Amazon S3 kann auf semantische Fehler dieses Typs testen, die Amazon S3–spezifische Bedingungen enthalten. Wenn Sie jedoch eine Richtlinie für einen IAM-Benutzer erstellen und eine semantisch ungültige Amazon S3-Bedingung einfügen, wird kein Fehler gemeldet, da IAM keine Amazon S3-Bedingungen validieren kann.

Beispiele: Amazon S3-Bedingungsschlüssel für Objektoperationen

Dieser Abschnitt enthält Beispiele, die zeigen, wie Sie Amazon S3‐spezifische Bedingungsschlüssel für Objektoperationen verwenden können. Die vollständige Liste der Amazon S3-Aktionen, -Bedingungsschlüssel und -Ressourcen, die Sie in Richtlinien angeben können, finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon S3.

Einige der Beispielrichtlinien zeigen, wie Sie Bedingungsschlüssel mit PUT Object-Operationen verwenden können. PUT Object-Operationen ermöglichen für Zugriffskontrolllisten (ACLs) spezifische Header, mit denen Sie ACL-basierte Berechtigungen erteilen können. Mit diesen Schlüsseln kann der Bucket-Eigentümer eine Bedingung festlegen, die bestimmte Zugriffsberechtigungen erfordert, wenn der Benutzer ein Objekt hochlädt. Sie können ACL-basierte Berechtigungen auch mittels der Operation PutObjectAcl erteilen. Weitere Informationen finden Sie unter PutObjectAcl im Amazon S3Amazon Simple Storage Service API Reference. Weitere Informationen über ACLs finden Sie in Zugriffskontrolllisten (ACL) – Übersicht.

Beispiel 1: s3:PutObject-Berechtigung mit der Bedingung erteilen, dass der Bucket-Eigentümer vollständige Kontrolle erhalten muss

Die Operation PUT Object erlaubt Zugriffskontrolllisten (ACL)-spezifische Header, mit denen Sie ACL-spezifische Berechtigungen erteilen können. Mit diesen Schlüsseln kann der Bucket-Eigentümer eine Bedingung festlegen, die bestimmte Zugriffsberechtigungen erfordert, wenn der Benutzer ein Objekt hochlädt.

Angenommen, Konto A besitzt einen Bucket und der Kontoadministrator möchte Dave, einem Benutzer in Konto B, Berechtigungen zum Hochladen von Objekten erteilen. Standardmäßig gehören Objekte, die Dave hochgeladen hat, zu Konto B, und Konto A besitzt keine Berechtigungen für diese Objekte. Da der Bucket-Eigentümer die Rechnungen bezahlt, benötigt er volle Berechtigungen für die Objekte, die Dave hochlädt. Der Administrator von Konto A kann für diesen Zweck Dave die Berechtigung s3:PutObject erteilen. Dies erfolgt unter der Bedingung, dass die Anforderung ACL-spezifische Header enthält, die die vollständige Berechtigung explizit gewähren oder eine vordefinierte ACL verwenden. Weitere Informationen finden Sie unter PUT Object.

Anfordern des Headers x-amz-full-control

Sie können in der Anforderung den Header x-amz-full-control mit vollständiger Kontrollberechtigung für den Bucket-Eigentümer anfordern. Die folgende Bucket-Richtlinie erteilt dem Benutzer Dave die Berechtigung s3:PutObject mit einer Bedingung, die den Bedingungsschlüssel s3:x-amz-grant-full-control enthält, in die Anforderung den Header x-amz-full-control aufzunehmen.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } } ] }
Anmerkung

In diesem Beispiel geht es um die kontoübergreifende Berechtigung. Wenn Dave (der die Berechtigung erhält) jedoch zu dem AWS-Konto gehört, dem der Bucket gehört, ist diese bedingte Berechtigung nicht erforderlich. Grund hierfür ist, dass das übergeordnete Konto, dem Dave angehört, Eigentümer von Objekten ist, die der Benutzer hochlädt.

Hinzufügen einer expliziten Zugriffsverweigerung

Die vorherige Bucket-Richtlinie erteilt dem Benutzer Dave in Konto B eine bedingte Berechtigung. Während diese Richtlinie in Kraft ist, ist es Dave möglich, die gleiche Berechtigung ohne Bedingung über eine andere Richtlinie zu erhalten. Beispiel: Dave kann einer Gruppe angehören, der Sie die Berechtigung s3:PutObject bedingungslos erteilen. Um solche Berechtigungslücken zu vermeiden, können Sie eine strengere Zugriffsrichtlinie schreiben, indem Sie eine explizite Zugriffsverweigerung hinzufügen. In diesem Beispiel verweigern Sie explizit die Upload-Berechtigung für Benutzer Dave, wenn er nicht die erforderlichen Header in die Anforderung einbindet, die dem Bucket-Eigentümer volle Berechtigungen gewährt. Eine explizite Verweigerung ersetzt immer eine anderswo erteilte Erlaubnis. Im Folgenden finden Sie das geänderte Zugriffsrichtlinienbeispiel mit hinzugefügter expliziter Ablehnung.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringNotEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } } ] }

Testen der Richtlinie mit der AWS CLI

Wenn Sie zwei AWS-Konten haben, können Sie die Richtlinie mit AWS Command Line Interface (AWS CLI) testen. Sie fügen die Richtlinie an und verwenden die Anmeldeinformationen von Dave, um die Berechtigung mit dem AWS CLI-Befehl put-object zu testen. Sie stellen dem Benutzer Dave die Anmeldeinformationen bereit, indem Sie den Parameter --profile hinzufügen. Sie erteilen dem Bucket-Eigentümer die volle Kontrolle, indem Sie den Parameter --grant-full-control hinzufügen. Weitere Informationen zum Einrichten und Verwenden der AWS CLI finden Sie unter Einrichten der Tools für die beispielhaften Walkthroughs.

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBUserProfile

Anfordern des Headers x-amz-acl

Sie können den Header x-amz-acl mit einer vordefinierten ACL anfordern, die dem Bucket-Eigentümer die vollständige Kontrollberechtigung erteilt. Um den Header x-amz-acl in der Anforderung erforderlich zu machen, können Sie das Schlüssel-Wert-Paar im Block Condition ersetzen und den Bedingungsschlüssel s3:x-amz-acl wie im folgenden Beispiel dargestellt angeben.

"Condition": { "StringNotEquals": { "s3:x-amz-acl": "bucket-owner-full-control" }

Um die Berechtigung mithilfe der AWS CLI zu testen, geben Sie den Parameter --acl an. Die AWS CLI fügt dann beim Senden der Anforderung den Header x-amz-acl hinzu.

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --acl "bucket-owner-full-control" --profile AccountBadmin

Beispiel 2: 3:PutObject-Berechtigung unter der Bedingung erteilen, dass Objekte mit serverseitiger Verschlüsselung gespeichert werden

Angenommen, Konto A besitzt einen Bucket. Der Konto-Administrator möchte Jane, einer Benutzerin in Konto A, die Berechtigung zum Hochladen von Objekten mit einer Bedingung erteilen, dass Jane immer serverseitige Verschlüsselung anfordert, damit Amazon S3 die Objekte verschlüsselt speichert. Der Administrator von Konto A kann für diesen Zweck wie gezeigt mit dem Bedingungsschlüssel s3:x-amz-server-side-encryption arbeiten. Das Schlüssel-Wert-Paar im Block Condition gibt den Schlüssel s3:x-amz-server-side-encryption an.

"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }

Um die Berechtigung mithilfe der AWS CLI zu testen, müssen Sie den erforderlichen Parameter --server-side-encryption hinzufügen.

aws s3api put-object --bucket example1bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountBadmin

Beispiel 3: s3:PutObject-Berechtigung zum Kopieren von Objekten mit einer Einschränkung für die Kopierquelle erteilen

Wenn Sie in der PUT-Objektanforderung ein Quellobjekt angeben, handelt es sich um eine Kopieroperation (siehe PUT Object - Copy). Dementsprechend kann der Bucket-Eigentümer einem Benutzer die Berechtigung erteilen, Objekte mit Einschränkungen in Bezug auf die Quelle zu kopieren, z. B.:

  • das Kopieren von Objekten nur aus dem sourcebucket-Bucket erlauben.

  • das Kopieren von Objekten aus dem Quell-Bucket und nur den Objekten, deren Schlüsselnamen-Präfix mit public/f beginnt, erlauben (z. B. sourcebucket/public/*)

  • das Kopieren nur eines bestimmten Objekts aus dem Quell-Bucket erlauben (z. B. sourcebucket/example.jpg).

Die folgende Bucket-Richtlinie erteilt dem Benutzer Dave die Berechtigung s3:PutObject. Sie erlaubt ihm, nur Objekte mit der Bedingung zu kopieren, dass die Anforderung den Header s3:x-amz-copy-source enthält und der Header-Wert das Präfix des Schlüsselnamens /awsexamplebucket1/public/* angibt.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "cross-account permission to user in your own account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/folder", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "awsexamplebucket1/public/*" } } } ] }

Testen der Richtlinie mit der AWS CLI

Sie können die Berechtigung mit dem AWS CLI-Befehl copy-object testen. Sie geben die Quelle an, indem Sie den Parameter --copy-source hinzufügen. Das Schlüsselnamenpräfix muss dem Präfix entsprechen, das in der Richtlinie zulässig ist. Sie müssen die Anmeldeinformationen des Benutzers Dave mit dem Parameter --profile angeben. Weitere Informationen zum Festlegen der AWS CLI finden Sie unter Einrichten der Tools für die beispielhaften Walkthroughs.

aws s3api copy-object --bucket awsexamplebucket1 --key HappyFace.jpg --copy-source examplebucket/public/PublicHappyFace1.jpg --profile AccountADave

Erteilen der Berechtigung, nur ein bestimmtes Objekt zu kopieren

Die vorherige Richtlinie verwendet die Bedingung StringNotLike. Um nur das Kopieren eines bestimmten Objekts zu erlauben, müssen Sie die Bedingung von StringNotLike in StringNotEquals ändern und dann den genauen Objektschlüssel wie gezeigt angeben.

"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "awsexamplebucket1/public/PublicHappyFace1.jpg" } }

Beispiel 4: Gewähren von Zugriff auf eine bestimmte Version eines Objekts

Angenommen, Konto A besitzt einen versionsaktivierten Bucket. Der Bucket beinhaltet mehrere Versionen des Objekts HappyFace.jpg. Der Kontoadministrator möchte nun dem Benutzer Dave die Berechtigung erteilen, nur eine bestimmte Version des Objekts zu erhalten. Der Kontoadministrator erreicht dies, indem er Dave die Berechtigung s3:GetObjectVersion bedingt erteilt wie unten gezeigt. Das Schlüssel-Wert-Paar im Block Condition gibt den Bedingungsschlüssel s3:VersionId an. In diesem Fall muss Dave die genaue Objekt-Versions-ID kennen, um das Objekt abzurufen.

Weitere Informationen finden Sie unter GetObject im Amazon Simple Storage Service API Reference.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e" } } } ] }

Testen der Richtlinie mit der AWS CLI

Sie können die Berechtigungen mit dem AWS CLI;-Befehl get-object mit dem Parameter --version-id testen, der die spezifische Objektversion identifiziert. Der Befehl ruft das Objekt ab und speichert es in der Datei OutputFile.jpg.

aws s3api get-object --bucket examplebucketversionenabled --key HappyFace.jpg OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave

Beispiel 5: Objekt-Uploads auf Objekte mit einer bestimmten Speicherklasse beschränken

Angenommen, Konto A, dargestellt durch Konto-ID 123456789012, besitzt einen Bucket. Der Kontoadministrator möchte Dave, einen Benutzer in Konto A, insofern einschränken, nur Objekte in den Bucket hochladen zu können, die mit der Speicherklasse STANDARD_IA gespeichert werden. Um das Hochladen von Objekten auf eine bestimmte Speicherklasse einzuschränken, kann der Administrator von Konto A den Bedingungsschlüssel s3:x-amz-storage-class verwenden, wie in der folgenden Bucket-Beispielrichtlinie gezeigt.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-storage-class": [ "STANDARD_IA" ] } } } ] }

Beispiel 6: Erteilen von Berechtigungen basierend auf Objekt-Tags

Beispiele für die Verwendung von Objektmarkierungs-Bedingungsschlüsseln mit Amazon S3-Operationen finden Sie unter Objektmarkierung und Zugriffskontrollrichtlinien.

Beispiele — Amazon S3-Bedingungsschlüssel für Bucket-Operationen

Dieser Abschnitt enthält Beispielrichtlinien, die zeigen, wie Sie Amazon S3‐spezifische Bedingungsschlüssel für Bucket-Operationen verwenden können.

Beispiel 1: Erteilen einer Benutzerberechtigung zum Erstellen von Buckets nur in einer bestimmten Region

Angenommen, ein AWS-Kontoadministrator möchte seinem Benutzer (Dave) die Berechtigung erteilen, einen Bucket nur in der Region Südamerika (São Paulo) zu erstellen. Der Kontoadministrator kann die folgende Benutzerrichtlinie anfügen, welche die Berechtigung s3:CreateBucket mit der angegebenen Bedingung gewährt. Das Schlüssel-Wert-Paar im Block Condition gibt den Schlüssel s3:LocationConstraint und die Region sa-east-1 als seinen Wert an.

Anmerkung

In diesem Beispiel erteilt der Bucket-Eigentümer einem seiner Benutzer die Berechtigung, daher kann entweder eine Bucket-Richtlinie oder eine Benutzerrichtlinie verwendet werden. Dieses Beispiel zeigt eine Benutzerrichtlinie.

Eine Liste der Amazon S3-Regionen finden Sie unter Regionen und Endpunkte im AWS General Reference.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }

Hinzufügen einer expliziten Zugriffsverweigerung

Die vorangegangene Richtlinie hindert den Benutzer an der Erstellung eines Buckets in einer anderen Region als sa-east-1. Einige andere Richtlinien gewähren diesem Benutzer möglicherweise jedoch die Berechtigung, Buckets in einer anderen Region zu erstellen. Wenn der Benutzer beispielsweise zu einer Gruppe gehört, ist der Gruppe möglicherweise eine Richtlinie angefügt, die alle Benutzer der Gruppe zum Erstellen von Buckets in einer anderen Region berechtigt. Um sicherzustellen, dass der Benutzer keine Berechtigung zum Erstellen von Buckets in einer anderen Region erhält, können Sie in der oben gezeigten Richtlinie eine explizite Anweisung zur Ablehnung hinzufügen.

Die Anweisung Deny verwendet die Bedingung StringNotLike. Das bedeutet, dass, eine Anforderung zum Erstellen eines Buckets abgelehnt wird, wenn die Standorteinschränkung nicht sa-east-1 ist. Die explizite Verweigerung erlaubt dem Benutzer nicht, einen Bucket in einer anderen Region zu erstellen, unabhängig davon, welche andere Berechtigung der Benutzer erhält. Die folgende Richtlinie enthält eine explizite Zugriffsverweigerungsanweisung.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }

Testen der Richtlinie mit der AWS CLI

Sie können die Richtlinie mit dem folgenden create-bucket AWS CLI-Befehl testen. In diesem Beispiel wird die Datei bucketconfig.txt verwendet, um die Standortbeschränkung anzugeben. Merken Sie sich den Windows-Pfad der Datei. Sie müssen den Bucket-Namen und -Pfad entsprechend aktualisieren. Sie müssen die Anmeldeinformationen des Benutzers bereitstellen, indem Sie den Parameter --profile hinzufügen. Weitere Informationen zum Einrichten und Verwenden der AWS CLI finden Sie unter Einrichten der Tools für die beispielhaften Walkthroughs.

aws s3api create-bucket --bucket examplebucket --profile AccountADave --create-bucket-configuration file://c:/Users/someUser/bucketconfig.txt

Die Datei bucketconfig.txt gibt die Konfiguration wie folgt an.

{"LocationConstraint": "sa-east-1"}

Beispiel 2: Abrufen einer Liste von Objekten in einem Bucket mit einem bestimmten Präfix

Sie können den Bedingungsschlüssel s3:prefix verwenden, um die Antwort der API GET Bucket (ListObjects) auf Schlüsselnamen mit einem bestimmten Präfix einzuschränken. Wenn Sie der Bucket-Eigentümer sind, können Sie einen Benutzer beschränken, den Inhalt eines bestimmten Präfixes im Bucket aufzulisten. Dieser Bedingungsschlüssel ist nützlich, wenn Objekte im Bucket nach Schlüsselnamenpräfixen organisiert sind. Die Amazon S3-Konsole verwendet Schlüsselnamenpräfixe zum Anzeigen von Ordnerkonzepten. Nur die Konsole unterstützt das Ordnerkonzept. Die Amazon S3-API unterstützt ausschließlich Buckets und Objekte. Weitere Informationen zur Verwendung von Präfixen und Trennzeichen zum Filtern von Zugriffsberechtigungen finden Sie unter Walkthrough: Kontrollieren des Zugriffs auf einen Bucket mit Benutzerrichtlinien.

Wenn es beispielsweise zwei Objekte mit den Schlüsselnamen public/object2.jpg und public gibt, zeigt die Konsole die Objekte unter dem Ordner public/object1.jpg an. In der Amazon S3-API sind dies Objekte mit Präfixen, nicht Objekte in Ordnern. Wenn Sie jedoch in der Amazon S3-API die Objektschlüssel mithilfe solcher Präfixe organisieren, können Sie der Berechtigung s3:ListBucket die Bedingung s3:prefix erteilen, die dem Benutzer das Abrufen einer Liste mit Schlüsselnamen mit diesen spezifischen Präfixen ermöglicht.

In diesem Beispiel sind der Bucket-Eigentümer und das übergeordnete Konto, zu dem der Benutzer gehört, dieselben. Der Bucket-Eigentümer kann also entweder eine Bucket-Richtlinie oder eine Benutzerrichtlinie verwenden. Weitere Informationen zu anderen Bedingungsschlüsseln, die Sie mit der API „GET Bucket (ListObjects)“ verwenden können, finden Sie unter ListObjects.

-Benutzerrichtlinie

Die folgende Benutzerrichtlinie erteilt die Berechtigung für den Bucket s3:ListBucket (siehe GET Bucket (List Objects)) mit der Bedingung, dass der Benutzer in der Anforderung das Präfix prefix mit dem Wert projects anführt.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }

Die Bedingung schränkt den Benutzer ein, nur Objektschlüssel mit dem Präfix projects auflisten zu können. Die hinzugefügte explizite Verweigerung verhindert, dass die Anforderung des Benutzers auf Auflistung von Schlüsseln mit irgendeinem anderen Präfix verweigert wird, unabhängig davon, welche anderen Berechtigungen der Benutzer gegebenenfalls hat. Zum Beispiel ist es möglich, dass der Benutzer die Berechtigung erhält, Objektschlüssel ohne Einschränkung aufzulisten, entweder durch Aktualisierungen der vorherigen Benutzerrichtlinie oder durch eine Bucket-Richtlinie. Da jedoch die explizite Zugriffsverweigerung stets Vorrang hat, wird die Benutzeranforderung zum Auflisten anderer Schlüssel, die nicht das Präfix projects enthalten, abgelehnt.

Bucket-Richtlinie

Wenn Sie der oben gezeigten Richtlinie das Element Principal hinzufügen, das den Benutzer identifiziert, erhalten Sie eine Bucket-Richtlinie wie gezeigt.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringNotEquals" : { "s3:prefix": "examplefolder" } } } ] }

Testen der Richtlinie mit der AWS CLI

Sie können die Richtlinie mit dem folgenden list-object AWS CLI-Befehl testen. Im Befehl geben Sie Benutzeranmeldeinformationen mit dem Parameter --profile an. Weitere Informationen zum Einrichten und Verwenden der AWS CLI finden Sie unter Einrichten der Tools für die beispielhaften Walkthroughs.

aws s3api list-objects --bucket awsexamplebucket1 --prefix examplefolder --profile AccountADave

Wenn der Bucket versionsaktiviert ist, müssen Sie die Berechtigung s3:ListBucketVersions in der vorherigen Richtlinie erteilen, um die Objekte im Bucket auflisten zu können, und nicht die Berechtigung s3:ListBucket. Diese Berechtigung unterstützt auch den s3:prefix-Bedingungsschlüssel.

Beispiel 3: Festlegen der maximalen Anzahl von Schlüsseln

Sie können den Bedingungsschlüssel s3:max-keys verwenden, um die maximale Anzahl von Schlüsseln festzulegen, die der Anforderer in den Anforderungen GET Bucket (ListObjects) oder ListObjectVersions zurückgeben kann. Standardmäßig gibt die API bis zu 1000 Schlüssel zurück. Die Liste der numerischen Bedingungsoperatoren, die Sie mit s3:max-keys und begleitenden Beispielen verwenden können, finden Sie unter Numerische Bedingungsoperatoren im IAM-Benutzerhandbuch.