Amazon S3 バケットポリシーを使用すると、汎用バケット内のオブジェクトアップロードに条件付き書き込みを強制できます。
バケットポリシーは、Amazon S3 バケットとその中のオブジェクトへのアクセス許可を付与できるリソースベースのポリシーです。バケット所有者のみが、ポリシーをバケットに関連付けることができます。バケットポリシーの詳細については、「Amazon S3 のバケットポリシー」を参照してください。
条件キー s3:if-match
または s3:if-none-match
をオプションの Condition
要素または Condition
ブロックとして使用して、ポリシーが有効になるタイミングを指定できます。これらの API は条件付きヘッダーを受け付けないため、マルチパートアップロードの場合、CreateMultipartUpload
、UploadPart
、および UploadPartCopy
オペレーションを除外するには、s3:ObjectCreationOperation
条件キーを指定する必要があります。バケットで条件を使用する方法の詳細については、「条件キーを使用したバケットポリシーの例」を参照してください。
注記
バケットポリシーを使用して条件付き書き込みを強制する場合、バケットポリシーで指定されたバケットまたはプレフィックスにコピーオペレーションを実行することはできません。If-None-Match
または If-Match
HTTP ヘッダーのない CopyObject
リクエストは 403 Access Denied
エラーで失敗します。これらの HTTP ヘッダーにより行われた CopyObject
リクエストは、501 Not
Implemented
レスポンスで失敗します。
次の例は、バケットポリシーで条件を使用して、クライアントに If-None-Match
または If-Match
HTTP ヘッダーの使用を強制する方法を示しています。
トピック
例 1: if-none-match
ヘッダーを含む PutObject
および CompleteMultipartUpload
リクエストを使用したオブジェクトのアップロードのみを許可する
このポリシーでは、リクエストに if-none-match
ヘッダーが含まれている場合、アカウント 111122223333、ユーザー Alice が amzn-s3-demo-bucket1
バケットに書き込むことを許可し、オブジェクトキーがバケットにまだ存在しないことを確認します。指定されたバケットへのすべての PutObject
および CompleteMultipartUpload
リクエストには、正常に実行するために if-none-match
ヘッダーが含まれている必要があります。このヘッダーを使用すると、オブジェクトキーがバケットに存在しない場合にのみ、お客様はこのバケットに書き込むことができます。
注記
このポリシーは、CreateMultipartUpload
、UploadPart
、および UploadPartCopy
API を使用したマルチパートアップロードを許可する s3:ObjectCreationOperation
条件キーも設定します。
{ "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: if-match
ヘッダーを含む PutObject
および CompleteMultipartUpload
リクエストを使用したオブジェクトのアップロードのみを許可する
このポリシーでは、リクエストに if-match
ヘッダーが含まれている場合にのみ、アカウント 111122223333、ユーザー Alice が amzn-s3-demo-bucket1
に書き込むことができます。このヘッダーは、S3 内のオブジェクトの ETag 値を、WRITE
オペレーション中に指定した値と比較します。ETag 値が一致しない場合、オペレーションは失敗します。指定されたバケットへのすべての PutObject
および CompleteMultipartUpload
リクエストには、正常に実行するために if-match
ヘッダーが含まれている必要があります。
注記
このポリシーは、CreateMultipartUpload
、UploadPart
、および UploadPartCopy
API を使用したマルチパートアップロードを許可する s3:ObjectCreationOperation
条件キーも設定します。
{ "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
ヘッダーを含むオブジェクトのアップロードリクエストのみを許可する
このポリシーでは、リクエストに if-none-match
または if-match
ヘッダーが含まれている場合、アカウント 111122223333、ユーザー Alice が amzn-s3-demo-bucket1
に書き込むことを許可します。これにより、Alice はバケットにキー名が存在しないオブジェクトをアップロードできます。キー名が存在する場合、オブジェクトの ETag が PUT
リクエストで指定された ETag と一致すれば、Alice はオブジェクトを上書きできます。
注記
このポリシーは、CreateMultipartUpload
、UploadPart
、および UploadPartCopy
API を使用したマルチパートアップロードを許可する s3:ObjectCreationOperation
条件キーも設定します。
{ "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
/*" } ] }