本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過使用 Amazon S3 儲存貯體政策,您可以對一般用途儲存貯體中的物件上傳強制執行條件式寫入。
儲存貯體政策是以資源為基礎的政策,您可以使用這些政策來將存取許可授予 Amazon S3 儲存貯體及其中物件。只有儲存貯體擁有者可建立政策與儲存貯體的關聯。如需儲存貯體政策的詳細資訊,請參閱「Amazon S3 的儲存貯體政策」。
您可以使用條件索引鍵 s3:if-match
或 s3:if-none-match
作為選用 Condition
元素或 Condition
區塊來指定政策何時生效。對於分段上傳,您必須指定 s3:ObjectCreationOperation
條件索引鍵來排除 CreateMultipartUpload
、UploadPart
和 UploadPartCopy
操作,因為這些 API 不接受條件式標頭。如需在儲存貯體政策中使用條件的詳細資訊,請參閱使用條件索引鍵的儲存貯體政策範例。
注意
如果您使用儲存貯體政策來強制執行條件式寫入,則無法對儲存貯體政策中指定的儲存貯體或字首執行複製操作。沒有 If-None-Match
或 If-Match
HTTP 標頭的 CopyObject
請求會失敗並顯示 403 Access Denied
錯誤。使用這些 HTTP 標頭提出的 CopyObject
請求會失敗並顯示 501 Not
Implemented
回應。
下列範例示範如何在儲存貯體政策中使用條件來強制用戶端使用 If-None-Match
或 If-Match
HTTP 標頭。
主題
範例 1:僅允許使用 PutObject
和包含 if-none-match
標頭的 CompleteMultipartUpload
請求上傳物件
如果請求包含 if-none-match
標頭,此政策允許帳戶 111122223333、使用者 Alice 寫入儲存amzn-s3-demo-bucket1
貯體,確保儲存貯體中不存在物件金鑰。對指定儲存貯體提出的所有 PutObject
和 CompleteMultipartUpload
請求都必須包含 if-none-match
標頭才能成功。使用此標頭時,只有在儲存貯體中不存在物件金鑰時,客戶才能寫入此儲存貯體。
注意
此政策也會設定 s3:ObjectCreationOperation
條件索引鍵,以允許使用 CreateMultipartUpload
、UploadPart
和 UploadPartCopy
API 進行分段上傳。
{ "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" } } } ] }
範例 2:僅允許使用 PutObject
和包含 if-match
標頭的 CompleteMultipartUpload
請求上傳物件
此政策允許帳戶 111122223333 使用者 Alice 只有在請求包含 if-match
標頭時,才能寫入 amzn-s3-demo-bucket1
。此標頭會將 S3 中物件的 ETag 值與您在 WRITE
操作期間提供的 ETag 值進行比較。如果 ETag 值不相符,操作將會失敗。對指定儲存貯體提出的所有 PutObject
和 CompleteMultipartUpload
請求都必須包含 if-match
標頭才能成功。
注意
此政策也會設定 s3:ObjectCreationOperation
條件索引鍵,以允許使用 CreateMultipartUpload
、UploadPart
和 UploadPartCopy
API 進行分段上傳。
{ "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
/*" } ] }
範例 3:僅允許包含 if-none-match
或 if-match
標頭的物件上傳請求
此政策允許帳戶 111122223333 使用者 Alice 在請求包含 if-none-match
或 if-match
標頭時寫入 amzn-s3-demo-bucket1
。這可讓 Alice 在儲存貯體中不存在金鑰名稱時上傳物件;如果金鑰名稱存在,則 Alice 可以在物件 ETag 符合 PUT
請求中提供的 ETag 時覆寫物件。
注意
此政策也會設定 s3:ObjectCreationOperation
條件索引鍵,以允許使用 CreateMultipartUpload
、UploadPart
和 UploadPartCopy
API 進行分段上傳。
{ "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
/*" } ] }