Beispiele für Amazon-S3-Bedingungsschlüssel - Amazon Simple Storage Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiele für Amazon-S3-Bedingungsschlüssel

Sie können die Sprache der Zugriffsrichtlinie verwenden, um Bedingungen anzugeben, wenn Sie Berechtigungen erteilen. Sie können das optionale Element Condition oder den Condition-Block verwenden, um anzugeben, unter welchen Bedingungen eine Richtlinie wirksam ist.

Richtlinien, die Amazon-S3-Bedingungsschlüssel für Objekt- und Bucket-Vorgänge verwenden, finden Sie in den folgenden Beispielen. Weitere Informationen über Bedingungsschlüssel finden Sie unter Amazon-S3-Bedingungsschlüssel. Eine 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 in der Service-Autorisierungs-Referenz.

Beispiele – Amazon-S3-Bedingungsschlüssel für Objekt-Vorgänge

Dieser Abschnitt enthält Beispiele, die zeigen, wie Sie Amazon-S3-spezifische Bedingungsschlüssel für Objekt-Vorgänge verwenden können. Eine 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 in der Service-Autorisierungs-Referenz.

Einige der Beispielrichtlinien zeigen, wie Sie Bedingungsschlüssel mit PUT Object-Vorgänge verwenden können. PUT Object-Vorgänge ermöglichen für Access Control List (ACL) 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 auch ACL-basierte Berechtigungen mit der -PutObjectAcl Operation erteilen. Weitere Informationen finden Sie unter PutObjectAcl in der API-Referenz zu Amazon S3 Amazon Simple Storage Service. Weitere Informationen über ACLs finden Sie in Zugriffskontrolllisten (ACL) – Übersicht.

Beispiel 1: Erteilen von s3:PutObject permission mit einer Bedingung, die erfordert, dass der Bucket-Eigentümer die volle Kontrolle erhält

Die Operation PUT Object erlaubt Access Control List (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 Akua, einem Benutzer in Konto B, Berechtigungen zum Hochladen von Objekten erteilen. Standardmäßig gehören Objekte, die Akua hochlädt, Konto B, und Konto A hat keine Berechtigungen für diese Objekte. Da der Bucket-Eigentümer die Rechnungen zahlt, benötigt er volle Berechtigungen für die Objekte, die Akua hochlädt. Der Administrator von Konto A kann dies tun, indem er Akua die s3:PutObject Berechtigung erteilt, mit der Bedingung, dass die Anforderung ACL-spezifische Header enthält, die entweder explizit die volle Berechtigung erteilen oder eine vordefinierte ACL verwenden. Weitere Informationen finden Sie unter PUT Object.

Erzwingen des - x-amz-full-control Headers

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 Akua die s3:PutObject Berechtigung mit einer Bedingung, die den s3:x-amz-grant-full-control Bedingungsschlüssel verwendet, der erfordert, dass die Anforderung den x-amz-full-control Header enthält.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/Akua" }, "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 Akua (der die Berechtigung erhält) jedoch zu dem gehört AWS-Konto , dem der Bucket gehört, ist diese bedingte Berechtigung nicht erforderlich. Dies liegt daran, dass das übergeordnete Konto, zu dem Akua gehört, Eigentümer von Objekten ist, die der Benutzer hochlädt.

Hinzufügen einer expliziten Zugriffsverweigerung

Die vorangehende Bucket-Richtlinie gewährt dem Benutzer Akua in Konto B eine bedingte Berechtigung. Während diese Richtlinie in Kraft ist, ist es möglich, dass Akua dieselbe Berechtigung ohne Bedingung über eine andere Richtlinie erhält. Beispielsweise kann Akua zu einer Gruppe gehören, und Sie erteilen der Gruppe die s3:PutObject Berechtigung ohne Bedingung. 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 dem Benutzer Akua explizit die Upload-Berechtigung, wenn er nicht die erforderlichen Header in die Anforderung aufnimmt, die dem Bucket-Eigentümer vollständige Berechtigungen erteilt. 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 haben AWS-Konten, können Sie die Richtlinie mit der AWS Command Line Interface (AWS CLI) testen. Sie fügen die Richtlinie an und verwenden die Anmeldeinformationen von Akua, um die Berechtigung mit dem folgenden AWS CLI put-object Befehl zu testen. Sie geben die Anmeldeinformationen von Akua an, indem Sie den --profile Parameter 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 finden Sie AWS CLI unter Entwickeln mit Amazon S3 über die AWS CLI.

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

Erzwingen des - x-amz-acl Headers

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": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }

Um die Berechtigung mit der zu testen AWS CLI, geben Sie den Parameter an--acl. Der fügt AWS CLI dann den x-amz-acl Header hinzu, wenn er die Anforderung sendet.

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

Beispiel 2: Erteilen einer s3:PutObject -Berechtigung, die die Speicherung von Objekten mit serverseitiger Verschlüsselung erfordert

Angenommen, Konto A besitzt einen Bucket. Der Konto-Administrator möchte Jane, einer Benutzerin in Konto A, die Berechtigung zum Hochladen von Objekten mit der 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" }}

Wenn Sie die Berechtigung mit der testen AWS CLI, müssen Sie den erforderlichen Parameter mit dem --server-side-encryption Parameter hinzufügen.

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

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

Wenn Sie in der PUT Object-Anforderung 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 (Akua) die s3:PutObject Berechtigung. 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/Akua" }, "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/Akua" }, "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 copy-object Befehl 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 dem Benutzer Akua-Anmeldeinformationen mit dem ---profileParameter bereitstellen. Weitere Informationen zum Einrichten der finden Sie AWS CLI unter Entwickeln mit Amazon S3 über die AWS CLI.

aws s3api copy-object --bucket awsexamplebucket1 --key HappyFace.jpg --copy-source examplebucket/public/PublicHappyFace1.jpg --profile AccountAAkua
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: Zugriff auf eine bestimmte Version eines Objekts gewähren

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

Weitere Informationen finden Sie unter GetObject in der API-Referenz zu Amazon Simple Storage Service.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Akua" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Akua" }, "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 get-object Befehl mit dem --version-id Parameter 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 AccountAAkua

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 Akua, einen Benutzer in Konto A, einschränken, um nur Objekte in den Bucket hochladen zu können, die in der STANDARD_IA Speicherklasse gespeichert sind. 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/Akua" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition": { "StringEquals": { "s3:x-amz-storage-class": [ "STANDARD_IA" ] } } } ] }

Beispiel 6: Erteilen von Berechtigungen basierend auf Objekt-Markierungen

Beispiele für die Verwendung von Objektmarkierungs-Bedingungsschlüsseln mit Amazon-S3-Vorgänge finden Sie unter Markierungs- und Zugriffskontrollrichtlinien.

Beispiel 7: Beschränken des Zugriffs durch die AWS-Konto ID des Bucket-Eigentümers

Sie können entweder den Schlüssel aws:ResourceAccount oder den Schlüssel s3:ResourceAccount verwenden, um Endpunktrichtlinien für IAM oder Virtual Private Cloud (VPC) zu schreiben, die den Benutzer- oder Anwendungszugriff auf die Amazon-S3-Buckets einschränken, die einer bestimmten AWS-Konto -ID gehören. Sie können diesen Bedingungsschlüssel verwenden, wenn Sie Clients in Ihrer VPC daran hindern möchten, auf Buckets zuzugreifen, die Sie nicht besitzen.

Beachten Sie jedoch, dass einige - AWS Services auf den Zugriff auf AWS verwaltete Buckets angewiesen sind. Daher kann es auch den Zugriff auf diese Ressourcen beeinflussen, wenn Sie den Schlüssel aws:ResourceAccount oder s3:ResourceAccount in Ihrer IAM-Richtlinie verwenden.

Weitere Informationen und Beispiele finden Sie in den folgenden Ressourcen:

Beispiel 8: Erfordern einer minimalen TLS-Version

Sie können den Schlüssel s3:TlsVersion condition verwenden, um IAM-, Virtual Private Cloud Endpoint (VPCE)- oder Bucket-Richtlinien zu schreiben, die den Benutzer- oder Anwendungszugriff auf Amazon S3-Buckets basierend auf der vom Client verwendeten TLS-Version einschränken. Sie können diesen Bedingungsschlüssel verwenden, um Richtlinien zu schreiben, die eine minimale TLS-Version erfordern.

Diese Bucket-Beispielrichtlinie lehnt PutObject Anforderungen von Clients ab, die eine TLS-Version unter 1.2 haben, z. B. 1.1 oder 1.0.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }

Diese Beispiel-Bucket-Richtlinie erlaubt PutObject Anforderungen von Clients mit einer TLS-Version höher als 1.1, z. B. 1.2, 1.3 oder höher.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }

Beispiele – Amazon-S3-Bedingungsschlüssel für Bucket-Vorgänge

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

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

Angenommen, ein AWS-Konto Administrator möchte seinem Benutzer (Akua) 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.

Die Liste der Amazon-S3-Regionen finden Sie unter Regionen und Endpunkte in der Allgemeine AWS-Referenz.

{ "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 finden Sie AWS CLI unter Entwickeln mit Amazon S3 über die AWS CLI.

aws s3api create-bucket --bucket examplebucket --profile AccountAAkua --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 s3:prefix Bedingungsschlüssel verwenden, um die Antwort der GET Bucket (ListObjects)-API auf Schlüsselnamen mit einem bestimmten Präfix zu beschrä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 Kontrollieren des Zugriffs auf einen Bucket mit Benutzerrichtlinien.

Wenn es beispielsweise zwei Objekte mit den Schlüsselnamen public/object1.jpg und public/object2.jpg gibt, zeigt die Konsole die Objekte unter dem Ordner public 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 die Berechtigung s3:ListBucket mit der 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 GET Bucket (ListObjects)-API verwenden können, finden Sie unter ListObjects.

Richtlinie für Benutzer:

Die folgende Benutzerrichtlinie erteilt die s3:ListBucket-Berechtigung (siehe GET Bucket (List Objects)) mit der Bedingung, dass der Benutzer in der Anforderung das 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. z. B. 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": "projects" } } } ] }
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 finden Sie AWS CLI unter Entwickeln mit Amazon S3 über die AWS CLI.

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

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 s3:max-keys Bedingungsschlüssel verwenden, um die maximale Anzahl von Schlüsseln festzulegen, die der Anforderer in einem GET Bucket (ListObjects) oder einer ListObjectVersions Anforderung 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.