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 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 und verwenden das Präfix aws:
. Eine vollständige Liste der AWS-weiten Schlüssel ist im Abschnitt Verfügbare AWS-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:SourceIp
AWS-weiten Schlüssel.
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. Spezifische Beispiele finden Sie unter Steuern des Zugriffs von VPC-Endpunkten mit Bucket-Richtlinien.
Bei einigen globalen AWS-Bedingungsschlüsseln werden nur bestimmte Ressourcentypen unterstützt. Prüfen Sie daher, ob Amazon S3 den globalen Bedingungsschlüssel und den Ressourcentyp unterstützt, die Sie verwenden möchten, oder ob Sie stattdessen einen spezifischen Bedingungsschlüssel von Amazon S3 verwenden müssen. Eine vollständige Liste der unterstützten Ressourcentypen und Bedingungsschlüssel für Amazon S3 finden Sie unter Aktionen, Ressourcen und Bedingungen.
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 s3:PutObject
-Berechtigung 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 eine(n) IAM-Benutzer oder -Rolle erstellen und eine semantisch ungültige Amazon-S3-Bedingung einfügen, wird kein Fehler gemeldet, weil IAM keine Amazon-S3-Bedingungen validieren kann.