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 Operationen CreateMultipartUpload, UploadPart und UploadPartCopy 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.
Themen
Beispiel 1: Nur Objekt-Uploads zulassen, die PutObject- und CompleteMultipartUpload-Anforderungen verwenden, die den if-none-match-Header enthalten
Diese Richtlinie erlaubt es dem Konto 111122223333, Benutzer Alice, in den Bucket amzn-s3-demo-bucket1 zu schreiben, wenn die Anfrage den Header if-none-match enthält, um sicherzustellen, 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 mithilfe der CreateMultipartUpload-, UploadPart- und UploadPartCopy-APIs ermöglicht.
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 mithilfe der CreateMultipartUpload-, UploadPart- und UploadPartCopy-APIs ermöglicht.
{ "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. Damit kann Alice ein Objekt hochladen, wenn der Schlüsselname im Bucket nicht existiert, oder wenn der Schlüsselname existiert, kann Alice das Objekt überschreiben, wenn der ETag des Objekts mit dem ETag übereinstimmt, der in der Anforderung PUT angegeben wurde.
Anmerkung
Diese Richtlinie legt auch den s3:ObjectCreationOperation-Bedingungsschlüssel fest, der mehrteilige Uploads mithilfe der CreateMultipartUpload-, UploadPart- und UploadPartCopy-APIs ermöglicht.