Dieses Handbuch wird nicht mehr aktualisiert. Aktuelle Informationen und Anweisungen finden Sie im neuen Amazon S3-Benutzerhandbuch.
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 für Amazon S3 spezifische
Schlüssel verwenden, um Bedingungen in einer Amazon S3-Zugriffsrichtlinie festzulegen.
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.
Themen
AWS-weite Bedingungsschlüssel
AWS stellt eine Reihe gemeinsamer Schlüssel zur Verfügung, die von allen AWS-Services
unterstützt werden, die Richtlinien unterstützen. Diese Schlüssel werden als AWS-weite Schlüssel bezeichnet und verwenden das Präfix aws:
. Eine vollständige Liste der AWS-weiten Schlüssel ist im Abschnitt Verfügbare Schlüssel für Bedingungen des IAM-Benutzerhandbuchs enthalten.
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
.
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 vom API zugelassenen gleichen Namensanforderungsheader zugeordnet, auf den die Bedingung festgelegt werden kann. Amazon S3-spezifische Bedingungsschlüssel bestimmen das Verhalten der Anforderungs-Header mit demselben Namen. 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 ist.
{ "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"] } } } ] }
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 s3:GetObject
-Genehmigung erteilt. Amazon S3 kann auf semantische Fehler dieses Typs testen, die
Amazon S3-spezifische Bedingungen beinhalten. 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, weil 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 in der Amazon S3 Amazon Simple Storage Service-API-Referenz. 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
" } } } ] }
In diesem Beispiel geht es um die kontoübergreifende Berechtigung. Wenn Dave (der die Berechtigung erhält) zum AWS-Konto gehört, dem der Bucket gehört, ist diese bedingte Berechtigung allerdings 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 der AWS-Befehlszeilenschnittstelle
(AWS CLI) testen. Sie fügen die Richtlinie an und verwenden die Anmeldeinformationen
von Dave, um die Berechtigung mit dem folgenden 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 des 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 des AWS-CLI zu testen, führen Sie den Parameter --acl
an. Das AWS-CLI fügt dann beim Senden der Anfrage 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 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" }
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 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 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 zur Einrichtung von der AWS CLI erhalten Sie unter
Einrichten der Tools für die beispielhaften Walkthroughs.
aws s3api copy-object --bucket
awsexamplebucket1
--key HappyFace.jpg --copy-sourceexamplebucket
/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 in der Amazon Simple Storage Service-API-Referenz.
{ "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-idAaaHbAQitwiL_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.
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 in der Allgemeinen 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 AWS-CLI-Befehl create-bucket
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 des 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 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 API „GET Bucket (ListObjects)“ verwenden können, finden Sie unter ListObjects.
-Benutzerrichtlinie
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. 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 AWS-CLI-Befehl list-object
testen. Im Befehl geben Sie Benutzeranmeldeinformationen mit dem Parameter --profile
an. Weitere Informationen zum Einrichten und Verwenden des 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.