Erzwingen bedingter Schreibvorgänge in Amazon-S3-Buckets - 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.

Erzwingen bedingter Schreibvorgänge in Amazon-S3-Buckets

Mithilfe der Amazon-S3-Bucket-Richtlinien können Sie bedingte Schreibvorgänge für Objekt-Uploads in Ihren Allzweck-Buckets erzwingen.

Eine Bucket-Richtlinie ist eine auf Ressourcen basierende Richtlinie, die Sie verwenden können, um Zugriffsberechtigungen für Ihren Amazon-S3-Bucket und die darin enthaltenen Objekte zu erteilen. Nur der Bucket-Eigentümer kann einem Bucket eine Richtlinie zuordnen. Weitere Informationen zu Bucket-Richtlinien finden Sie unter Bucket-Richtlinien für Amazon S3.

Sie können die Bedingungsschlüssel s3:if-match oder s3:if-none-match als optionales Condition-Element oder Condition-Block verwenden, um anzugeben, wann eine Richtlinie wirksam ist. Bei mehrteiligen Uploads müssen Sie den s3:ObjectCreationOperation Bedingungsschlüssel angeben, um die UploadPartCopy Operationen CreateMultipartUploadUploadPart, und auszuschließen, da diese APIs keine bedingten Header akzeptieren. Weitere Informationen über die Verwendung von Bedingungen in Bucket-Richtlinien finden Sie unter Beispiele für Bucket-Richtlinien mit Bedingungsschlüsseln.

Anmerkung

Wenn Sie eine Bucket-Richtlinie verwenden, um bedingte Schreibvorgänge zu erzwingen, können Sie keine Kopiervorgänge in den Bucket oder das Präfix ausführen, das in Ihrer Bucket-Richtlinie angegeben ist. CopyObject-Anforderungen ohne If-None-Match- oder If-Match-HTTP-Header schlagen mit einem 403 Access Denied-Fehler fehl. CopyObject-Anforderungen, die mit diesen HTTP-Headern gestellt wurden, schlagen mit einer 501 Not Implemented-Antwort fehl.

Die folgenden Beispiele zeigen, wie Bedingungen in einer Bucket-Richtlinie verwendet werden, um Clients dazu zu zwingen, einen If-None-Match- oder If-Match-HTTP-Header zu verwenden.

Beispiel 1: Nur Objekt-Uploads zulassen, die PutObject- und CompleteMultipartUpload-Anforderungen verwenden, die den if-none-match-Header enthalten

Diese Richtlinie ermöglicht es dem Konto 111122223333, dem Benutzer Alice, in den amzn-s3-demo-bucket1 Bucket zu schreiben, wenn die Anforderung den if-none-match Header enthält. Dadurch wird sichergestellt, dass der Objektschlüssel nicht bereits im Bucket vorhanden ist. Alle PutObject- und CompleteMultipartUpload-Anforderungen an den angegebenen Bucket müssen den if-none-match-Header enthalten. Mithilfe dieses Headers können Kunden nur dann in diesen Bucket schreiben, wenn der Objektschlüssel nicht im Bucket vorhanden ist.

Anmerkung

Diese Richtlinie legt auch den s3:ObjectCreationOperation Bedingungsschlüssel fest, der mehrteilige Uploads unter Verwendung von, und ermöglicht. CreateMultipartUpload UploadPart UploadPartCopy APIs

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowConditionalPut", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-none-match": "false" } } }, { "Sid": "AllowConditionalPutwithMPUs", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Bool": { "s3:ObjectCreationOperation": "false" } } } ] }

Beispiel 2: Nur Objekt-Uploads zulassen, die PutObject- und CompleteMultipartUpload-Anforderungen verwenden, die den if-match-Header enthalten

Diese Richtlinie erlaubt dem Konto 111122223333, Benutzerin Alice, nur dann in den amzn-s3-demo-bucket1 zu schreiben, wenn die Anforderung den if-match-Header enthält. Dieser Header vergleicht den ETag Wert eines Objekts in S3 mit einem Wert, den Sie während des WRITE Vorgangs angeben. Wenn die ETag Werte nicht übereinstimmen, schlägt der Vorgang fehl. Alle PutObject- und CompleteMultipartUpload-Anforderungen an den angegebenen Bucket müssen den if-match-Header enthalten.

Anmerkung

Diese Richtlinie legt auch den s3:ObjectCreationOperation Bedingungsschlüssel fest, der mehrteilige Uploads unter Verwendung von CreateMultipartUploadUploadPart, und ermöglicht. UploadPartCopy APIs

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", }, { "Sid": "BlockNonConditionalObjectCreation", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-match": "true" }, "Bool": { "s3:ObjectCreationOperation": "true" } } }, { "Sid": "AllowGetObjectBecauseConditionalPutIfMatchETag", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }

Beispiel 3: Nur Objekt-Uploads zulassen, die den if-none-match- oder if-match-Header enthalten

Diese Richtlinie erlaubt dem Konto 111122223333, Benutzerin Alice, in den amzn-s3-demo-bucket1 zu schreiben, wenn die Anforderung den if-none-match- oder if-match-Header enthält. Auf diese Weise kann Alice ein Objekt hochladen, wenn der Schlüsselname nicht im Bucket existiert, oder wenn der Schlüsselname existiert, kann Alice das Objekt überschreiben, wenn das Objekt dem in der Anfrage ETag angegebenen ETag entspricht. PUT

Anmerkung

Diese Richtlinie legt auch den s3:ObjectCreationOperation Bedingungsschlüssel fest, der mehrteilige Uploads unter Verwendung vonCreateMultipartUpload, und UploadPart ermöglicht. UploadPartCopy APIs

{ "Version": "2012-10-17", "Statement": [ { "Sid": " AllowConditionalPutifAbsent", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-none-match": "false" } } }, { "Sid": "AllowConditionalPutIfMatchEtag", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-match": "false" } } }, { "Sid": "AllowConditionalObjectCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Bool": { "s3:ObjectCreationOperation": "false" } } }, { "Sid": " AllowGetObjectBecauseConditionalPutIfMatchETag", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }