

# 条件付きリクエストを使用して S3 オペレーションに前提条件を追加する
<a name="conditional-requests"></a>

条件付きリクエストを使用すると、S3 オペレーションに前提条件を追加できます。条件付きリクエストを使用するには、Amazon S3 API オペレーションにヘッダーを追加します。このヘッダーを使用して、条件が満たされないと S3 オペレーションが失敗する条件を指定します。

条件付き読み込みは `GET`、`HEAD`、および `COPY` リクエストでサポートされています。オブジェクトのエンティティタグ (ETag) または最終更新日に基づいてオブジェクトを返すかコピーするための前提条件を追加できます。これにより、S3 オペレーションが、指定した日付以降に更新されたオブジェクトに制限される場合があります。S3 オペレーションを特定の ETag に制限することもできます。これにより、特定のオブジェクトバージョンのみを返すかコピーできます。オブジェクトメタデータの詳細については、[オブジェクトメタデータの使用](UsingMetadata.md) を参照してください。

条件付き書き込みでは、`PUT` オペレーション中にバケットに同じキー名を持つ既存のオブジェクトがないことを確認できます。これにより、同じキー名を持つ既存のオブジェクトが上書きされるのを防ぐことができます。同様に、条件付き書き込みを使用して、オブジェクトを更新する前にオブジェクトの ETag が変更されていないかどうかを確認できます。これにより、オブジェクトのコンテンツの状態を知らずに、意図せず上書きすることを防げます。[https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)、[CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)、または [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) リクエストに条件付き書き込みを使用できます。有効なキー名の詳細については、[Amazon S3 オブジェクトに命名する](object-keys.md) を参照してください。

条件付き削除では、オブジェクトを削除する前に、オブジェクトが存在するか、変更されていないかを評価します。条件付き削除は、汎用バケットとディレクトリバケットの `DeleteObject` または `DeleteObjects` API を使用して実行できます。条件付き削除の詳細については、「[条件付き削除を実行する方法](conditional-deletes.md)」を参照してください。条件付き読み取り、条件付き書き込み、または条件付き削除には追加料金はかかりません。失敗したリクエストも含め、該当するリクエストに対してのみ既存の料金が請求されます。Amazon S3 の機能と料金の詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing)」を参照してください。

**Topics**
+ [条件付き読み取りでメタデータに基づいてオブジェクトを取得またはコピーする方法](conditional-reads.md)
+ [条件付き書き込みによるオブジェクトの上書きを防ぐ方法](conditional-writes.md)
+ [条件付き削除を実行する方法](conditional-deletes.md)

# 条件付き読み取りでメタデータに基づいてオブジェクトを取得またはコピーする方法
<a name="conditional-reads"></a>

条件付き読み取りでは、S3 オペレーションに前提条件を追加するために、読み取りリクエストにヘッダーを追加できます。これらの前提条件が満たされない場合、読み取りリクエストは失敗します。

`GET`、`HEAD`、または `COPY` リクエストの条件付き読み取りを使用して、メタデータに基づいてのみオブジェクトを返すことができます。

オブジェクトをアップロードすると、Amazon S3 は S3 によってのみ変更できるシステム制御メタデータを作成します。エンティティタグ (ETag) と最終更新日は、システム制御メタデータの例です。オブジェクトの ETag は、オブジェクトの特定のバージョンを表す文字列です。最終更新日は、オブジェクトの作成日または最終更新日のどちらか新しい方を表すメタデータです。

条件付き読み取りを使用すると、オブジェクトの ETag または最終更新日に基づいてオブジェクトを返すことができます。リクエストで ETag 値を指定し、ETag 値が一致する場合にのみオブジェクトを返すことができます。これにより、オブジェクトの特定のバージョンのみを返すかコピーできます。指定した日付以降にオブジェクトが変更されている場合にのみ、読み取りリクエストで最終更新日の値を指定してオブジェクトを返すことができます。

## サポートされている API
<a name="conditional-read-apis"></a>

条件付き読み取りの使用をサポートする S3 API は、次のとおりです。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

以下のヘッダーを使用して、エンティティタグ (ETag) または最終変更日に基づくオブジェクトを返すことができます。ETag や最終変更日などのオブジェクトメタデータの詳細については、「[システムで定義されたオブジェクトメタデータ](UsingMetadata.md#SysMetadata)」を参照してください。

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)**  

+ `If-Match` — オブジェクトの ETag が指定した値と一致する場合にのみオブジェクトを返します。
+ `If-Modified-Since` — 指定された時刻以降に変更されたオブジェクトのみを返します。
+ `If-None-Match` — オブジェクトの ETag が指定した値と一致しない場合にのみオブジェクトを返します。
+ `If-Unmodified-Since` — 指定された時刻以降に変更されていないオブジェクトのみを返します。

このようなヘッダー、返されるエラー、S3 が単一のリクエストで複数の条件付きヘッダーを処理する順序の詳細については、「Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)」を参照してください。

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)**  

+ `If-Match` — オブジェクトの ETag が指定した値と一致する場合にのみオブジェクトを返します。
+ `If-Modified-Since` — 指定された時刻以降に変更されたオブジェクトのみを返します。
+ `If-None-Match` — オブジェクトの ETag が指定した値と一致しない場合にのみオブジェクトを返します。
+ `If-Unmodified-Since` — 指定された時刻以降に変更されていないオブジェクトのみを返します。

このようなヘッダー、返されるエラー、S3 が単一のリクエストで複数の条件付きヘッダーを処理する順序の詳細については、「Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)」を参照してください。

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)**  

+ `x-amz-copy-source-if-match` — オブジェクトの ETag が指定した値と一致する場合にのみ、ソースオブジェクトをコピーします。
+ `x-amz-copy-source-if-modified-since` — 指定された時刻以降に変更されたソースオブジェクトのみをコピーします。
+ `x-amz-copy-source-if-none-match` — オブジェクトの ETag が指定した値と一致しない場合にのみソースオブジェクトをコピーします。
+ `x-amz-copy-source-if-unmodified-since` — 指定された時刻以降に変更されていないソースオブジェクトのみをコピーします。
+ `If-Match` — 指定された ETag と一致する場合にのみオブジェクトをコピーします。`If-Match` は ETag 値を文字列として想定します。
+ `If-None-Match` — ETag が指定されたものと一致しない場合のみ、オブジェクトをコピーします。`If-None-Match` は「\$1」(アスタリスク) 文字を想定しています。

このようなヘッダー、返されるエラー、S3 が単一のリクエストで複数の条件付きヘッダーを処理する順序の詳細については、「Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)」を参照してください。

# 条件付き書き込みによるオブジェクトの上書きを防ぐ方法
<a name="conditional-writes"></a>

条件付き書き込みを使用することで、`WRITE` リクエストにヘッダーを追加して、Amazon S3 オペレーションの前提条件を指定できます。オブジェクトを条件付きで書き込むには、HTTP `If-None-Match` または `If-Match` ヘッダーを追加します。

`If-None-Match` ヘッダーは、バケットに既に同じキー名を持つオブジェクトがないことを検証することで、既存のデータの上書きを防ぎます。

または、`If-Match` ヘッダーを追加して、オブジェクトを書き込む前にオブジェクトのエンティティタグ (ETag) をチェックすることもできます。このヘッダーを使用すると、Amazon S3 は指定された ETag 値と S3 内のオブジェクトの ETag 値を比較します。ETag 値が一致しない場合、オペレーションは失敗となります。

バケット所有者は、バケットポリシーを使用して、アップロードされたオブジェクトに条件付き書き込みを強制できます。詳細については、「[Amazon S3 バケットに条件付き書き込みを強制する](conditional-writes-enforce.md)」を参照してください。

**注記**  
条件付き書き込みを使用するには、AWS Signature Version 4 を使用してリクエストに署名する必要があります。

**Topics**
+ [キー名に基づくオブジェクトの上書きを防ぐ方法](#conditional-write-key-names)
+ [オブジェクトが変更された場合に上書きを防ぐ方法](#conditional-write-etags)
+ [条件付き書き込みの動作](#conditional-error-response)
+ [条件付き書き込みシナリオ](#conditional-write-scenarios)
+ [Amazon S3 バケットに条件付き書き込みを強制する](conditional-writes-enforce.md)

## キー名に基づくオブジェクトの上書きを防ぐ方法
<a name="conditional-write-key-names"></a>

HTTP `If-None-Match` 条件付きヘッダーを使用すると、オブジェクトを作成したり送信先バケットにコピーしたりする前に、そのキー名に基づいて、指定されたバケットにオブジェクトが既に存在するかどうかを確認できます。

HTTP `If-None-Match` ヘッダーによる条件付き書き込みは、`WRITE` オペレーション中にオブジェクトの存在をチェックします。バケット内で同じキー名が見つかると、オペレーションは失敗します。HTTP `If-None-Match` ヘッダーがない場合、バージョン管理されていないバケットまたはバージョニングが停止されたバケットに同じキー名を持つオブジェクトをアップロードまたはコピーすると、オブジェクトは上書きされます。キー名を使用する方法の詳細については、「[Amazon S3 オブジェクトに命名する](object-keys.md)」を参照してください。

**注記**  
HTTP `If-None-Match` ヘッダーは、バージョンバケット内のオブジェクトの現在のバージョンにのみ適用されます。

HTTP `If-None-Match` ヘッダーによる条件付き書き込みを実行するには、`s3:PutObject` アクセス許可が必要です。これにより、呼び出し元はバケット内のオブジェクトの存在を確認できます。`If-None-Match` ヘッダーには \$1 (アスタリスク) 値が必要です。

`If-None-Match` ヘッダーは、次の API で使用できます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

### AWS CLI を使用した条件付き Put
<a name="conditional-writes-putobject-CLI-key-names"></a>

次の `put-object` コマンド例は、キー名が `dir-1/my_images.tar.bz2` のオブジェクトに対して条件付き書き込みを実行しようとします。

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-none-match "*"       
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

### AWS CLI を使用した条件付き Copy
<a name="conditional-writes-copyobject-CLI-key-names"></a>

次の `copy-object` コマンド例は、キー名が `dir-1/my_images.tar.bz2` のオブジェクトに対する条件付き書き込みを使用して、オブジェクトを送信先バケットにコピーしようとします。

```
aws s3api copy-object --copy-source amzn-s3-demo-bucket/key --key dir-1/my_images.tar.bz2 --bucket amzn-s3-demo-bucket2 --if-none-match "*"            
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

### AWS CLI を使用した条件付きマルチパートアップロード
<a name="conditional-writes-mpu-complete-CLI-key-names"></a>

次の `complete-multipart-upload` コマンド例は、キー名が `dir-1/my_images.tar.bz2` のオブジェクトに対する条件付き書き込みを使用して、マルチパートアップロードを完了しようとします。この例では、file:// プレフィックスを使用して、この特定のマルチパートアップロードのためにアップロードされたすべてのパートをリストする `mpustruct` という名前のローカルフォルダ内のファイルから JSON 構造をロードします。

```
aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --upload-id upload-id  --if-none-match "*"             
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

## オブジェクトが変更された場合に上書きを防ぐ方法
<a name="conditional-write-etags"></a>

オブジェクトの ETag は、オブジェクトに固有の文字列であり、オブジェクトのコンテンツへの変更を反映します。`If-Match` ヘッダーを使用して、Amazon S3 バケット内のオブジェクトの ETag 値を、`WRITE` オペレーション中に指定した値と比較できます。ETag 値が一致しない場合、オペレーションは失敗となります。ETag の詳細については、「[Content-MD5 と ETag を使用して、アップロードされたオブジェクトを検証する](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5)」を参照してください。

HTTP `If-Match` ヘッダーによる条件付き書き込みを実行するには、`s3:PutObject` と `s3:GetObject` のアクセス許可が必要です。これにより、呼び出し元は ETag をチェックし、バケット内のオブジェクトの状態を確認できます。`If-Match` ヘッダーには、文字列としての ETag 値が必要です。

`If-Match` ヘッダーは、次の API で使用できます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

### AWS CLI を使用した条件付き Put
<a name="conditional-writes-putobject-CLI-etags"></a>

次の `put-object` コマンド例は、指定された ETag 値 `6805f2cfc46c0f04559748bb039d69ae` を使用して条件付き書き込みを実行しようとします。

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69ae"         
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

### AWS CLI を使用した条件付き Copy
<a name="conditional-writes-copyobject-CLI-etags"></a>

次の `copy-object` コマンド例は、指定された ETag 値 `6805f2cfc46c0f04559748bb039d69ae` を使用して条件付き書き込みを実行しようとします。

```
aws s3api copy-object --copy-source amzn-s3-demo-bucket/key --key dir-1/my_images.tar.bz2 --bucket amzn-s3-demo-bucket2 --if-match "6805f2cfc46c0f04559748bb039d69ae"             
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

### AWS CLI を使用した条件付きマルチパートアップロード
<a name="conditional-writes-mpu-complete-CLI-etags"></a>

次の `complete-multipart-upload` コマンド例は、指定された ETag 値 `6805f2cfc46c0f04559748bb039d69ae` を使用して条件付き書き込みによるマルチパートアップロードを完了しようとします。この例では、file:// プレフィックスを使用して、この特定のマルチパートアップロードのためにアップロードされたすべてのパートをリストする `mpustruct` という名前のローカルフォルダ内のファイルから JSON 構造をロードします。

```
aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --upload-id upload-id --if-match "6805f2cfc46c0f04559748bb039d69ae"             
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

## 条件付き書き込みの動作
<a name="conditional-error-response"></a>

**`If-None-Match` ヘッダーを使用した条件付き書き込みまたはコピー**  
`If-None-Match` ヘッダーを使用した条件付き書き込みは、バケット内の既存のオブジェクトに対して評価を実行します。バケットに同じキー名を持つ既存のオブジェクトがない場合、書き込みオペレーションは成功し、`200 OK` レスポンスが返されます。既存のオブジェクトがある場合、書き込みオペレーションは失敗し、`412 Precondition Failed` レスポンスが返されます。  
バージョニングが有効なバケットでは、同じ名前の現在のオブジェクトバージョンが存在しない場合、または現在のオブジェクトバージョンに削除マーカーがある場合、書き込みオペレーションは成功します。それ以外の場合は、書き込みオペレーションは失敗して、`412 Precondition Failed` レスポンスを返します。  
同じオブジェクト名に対して複数の条件付き書き込みまたはコピーが発生すると、最初の書き込みオペレーションは成功します。その後、Amazon S3 は以降の書き込みを失敗として、`412 Precondition Failed` レスポンスを返します。  
同時リクエストが発生した場合、そのオブジェクトに対する条件付き書き込みオペレーションが完了する前に、そのオブジェクトへの削除リクエストが成功すると、`409 Conflict` レスポンスも受け取ることができます。`PutObject` で条件付き書き込みを使用する場合、`409 Conflict` エラーを受け取った後にアップロードが再試行される場合があります。`CompleteMultipartUpload` を使用する場合、`409 Conflict` エラーを受け取った後にオブジェクトを再度アップロードするには、`CreateMultipartUpload` を使用してマルチパートアップロード全体を再開する必要があります。

**`If-Match` ヘッダーを使用した条件付き書き込みまたはコピー**  
`If-Match` ヘッダーは、バケット内の既存のオブジェクトに対して評価されます。同じキー名を持ち、ETag が一致する既存のオブジェクトがある場合、書き込みオペレーションは成功し、`200 OK` レスポンスが返されます。ETag が一致しない場合、書き込みオペレーションは `412 Precondition Failed` レスポンスで失敗します。  
同時リクエストの場合には `409 Conflict` レスポンスを受け取ることもできます。  
オブジェクトに対する条件付き書き込みオペレーションが完了する前にそのオブジェクトへの削除リクエストが成功すると、オブジェクトキーが存在しなくなるため、`404 Not Found` を受け取ることになります。`404 Not Found` レスポンスを受け取ったら、オブジェクトを再アップロードする必要があります。  
同じ名前の現在のオブジェクトバージョンが存在しない場合、または現在のオブジェクトバージョンに削除マーカーがある場合、オペレーションは `404 Not Found` エラーで失敗します。

## 条件付き書き込みシナリオ
<a name="conditional-write-scenarios"></a>

2 つのクライアントが同じバケットでオペレーションを実行しているような、以下のシナリオについて考えてみましょう。

**マルチパートアップロード中の条件付き書き込み**  
実行中のマルチパートアップロードリクエストは完全には書き込まれていないため、条件付き書き込みでは考慮されません。クライアント 1 がマルチパートアップロードを使用してオブジェクトをアップロード中である、次の例を考えてみましょう。このマルチパートアップロード中、クライアント 2 は条件付き書き込みオペレーションを使用して同じオブジェクトの書き込みを正常に実行できます。その後、クライアント 1 が条件付き書き込みを使用してマルチパートアップロードを完了しようとすると、アップロードは失敗します。

**注記**  
このシナリオでは、`If-None-Match` と `If-Match` ヘッダーの両方に `412 Precondition Failed` レスポンスが返されます。

![\[同じキー名で項目を書き込む 2 つのクライアントの例。1 つは MPU の UploadPart、もう 1 つは PutObject と条件付き書き込み。その後に開始される CompleteMultipartUpload オペレーションは失敗する。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/conwrite_put_mpu.png)


**マルチパートアップロード中の同時削除**  
条件付き書き込みリクエストが完了する前に削除リクエストが正常に完了すると、Amazon S3 は書き込みオペレーションについて `409 Conflict` または `404 Not Found` レスポンスを返します。これは、先に開始された削除リクエストが条件付き書き込みオペレーションよりも優先されるためです。このような場合、新しいマルチパートアップロードを開始する必要があります。

**注記**  
このシナリオでは、`If-None-Match` ヘッダーに対する `409 Conflict` レスポンスと `If-Match` ヘッダーに対する `404 Not Found` レスポンスが生成されます。

![\[2 つのクライアントの例。1 つはマルチパートアップロードを使用し、もう 1 つはこの MPU 開始後に削除リクエストを送信する。この削除リクエストは、条件付き書き込みが開始される前に終了する。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/conwrite_delete_mpu.png)


**注記**  
ストレージコストを最小限に抑えるため、`AbortIncompleteMultipartUpload` アクションを使用して指定した日数が経過した後に不完全なマルチパートアップロードを削除するようにライフサイクルルールを設定することをお勧めします。不完全なマルチパートアップロードを削除するライフサイクルルールの作成の詳細については、「[不完全なマルチパートアップロードを中止するためのバケットライフサイクルポリシーの設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html)」を参照してください。

# Amazon S3 バケットに条件付き書き込みを強制する
<a name="conditional-writes-enforce"></a>

Amazon S3 バケットポリシーを使用すると、汎用バケット内のオブジェクトアップロードに条件付き書き込みを強制できます。

バケットポリシーは、Amazon S3 バケットとその中のオブジェクトへのアクセス許可を付与できるリソースベースのポリシーです。バケット所有者のみが、ポリシーをバケットに関連付けることができます。バケットポリシーの詳細については、「[Amazon S3 のバケットポリシー](bucket-policies.md)」を参照してください。

条件キー `s3:if-match` または `s3:if-none-match` をオプションの `Condition` 要素または `Condition` ブロックとして使用して、ポリシーが有効になるタイミングを指定できます。これらの API は条件付きヘッダーを受け付けないため、マルチパートアップロードの場合、`CreateMultipartUpload`、`UploadPart`、および `UploadPartCopy` オペレーションを除外するには、`s3:ObjectCreationOperation` 条件キーを指定する必要があります。バケットで条件を使用する方法の詳細については、「[条件キーを使用したバケットポリシーの例](amazon-s3-policy-keys.md)」を参照してください。

**注記**  
バケットポリシーを使用して条件付き書き込みを強制する場合、バケットポリシーで指定されたバケットまたはプレフィックスにコピーオペレーションを実行することはできません。`If-None-Match` または `If-Match` HTTP ヘッダーのない `CopyObject` リクエストは `403 Access Denied` エラーで失敗します。これらの HTTP ヘッダーにより行われた `CopyObject` リクエストは、`501 Not Implemented` レスポンスで失敗します。

次の例は、バケットポリシーで条件を使用して、クライアントに `If-None-Match` または `If-Match` HTTP ヘッダーの使用を強制する方法を示しています。

**Topics**
+ [例 1: `if-none-match` ヘッダーを含む `PutObject` および `CompleteMultipartUpload` リクエストを使用したオブジェクトのアップロードのみを許可する](#conditional-writes-enforce-ex1)
+ [例 2: `if-match` ヘッダーを含む `PutObject` および `CompleteMultipartUpload` リクエストを使用したオブジェクトのアップロードのみを許可する](#conditional-writes-enforce-ex2)
+ [例 3: `if-none-match` または `if-match` ヘッダーを含むオブジェクトのアップロードリクエストのみを許可する](#conditional-writes-enforce-ex3)

## 例 1: `if-none-match` ヘッダーを含む `PutObject` および `CompleteMultipartUpload` リクエストを使用したオブジェクトのアップロードのみを許可する
<a name="conditional-writes-enforce-ex1"></a>

このポリシーでは、リクエストに `if-none-match` ヘッダーが含まれている場合、アカウント 111122223333、ユーザー Alice が *amzn-s3-demo-bucket1* バケットに書き込むことを許可し、オブジェクトキーがバケットにまだ存在しないことを確認します。指定されたバケットへのすべての `PutObject` および `CompleteMultipartUpload` リクエストには、正常に実行するために `if-none-match` ヘッダーが含まれている必要があります。このヘッダーを使用すると、オブジェクトキーがバケットに存在しない場合にのみ、お客様はこのバケットに書き込むことができます。

**注記**  
このポリシーは、`CreateMultipartUpload`、`UploadPart`、および `UploadPartCopy` API を使用したマルチパートアップロードを許可する `s3:ObjectCreationOperation` 条件キーも設定します。

------
#### [ JSON ]

****  

```
{
    "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` リクエストを使用したオブジェクトのアップロードのみを許可する
<a name="conditional-writes-enforce-ex2"></a>

このポリシーでは、リクエストに `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` ヘッダーを含むオブジェクトのアップロードリクエストのみを許可する
<a name="conditional-writes-enforce-ex3"></a>

このポリシーでは、リクエストに `if-none-match` または `if-match` ヘッダーが含まれている場合、アカウント 111122223333、ユーザー Alice が *amzn-s3-demo-bucket1* に書き込むことを許可します。これにより、Alice はバケットにキー名が存在しないオブジェクトをアップロードできます。キー名が存在する場合、オブジェクトの ETag が `PUT` リクエストで指定された ETag と一致すれば、Alice はオブジェクトを上書きできます。

**注記**  
このポリシーは、`CreateMultipartUpload`、`UploadPart`、および `UploadPartCopy` API を使用したマルチパートアップロードを許可する `s3:ObjectCreationOperation` 条件キーも設定します。

------
#### [ JSON ]

****  

```
{
    "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/*"
        }
    ]
}
```

------

# 条件付き削除を実行する方法
<a name="conditional-deletes"></a>

条件付き削除を使用すると、オブジェクトを削除する前に、オブジェクトが存在するか、変更されていないかを評価できます。条件付き削除は、S3 汎用バケットとディレクトリバケットの `DeleteObject` または `DeleteObjects` API オペレーションを使用して実行できます。まず、条件付き削除リクエストを行うときに、`HTTP If-Match` ヘッダーに前提条件値として `*` を指定してオブジェクトが存在するかどうかを確認するか、`ETag` を `If-Match` ヘッダーに指定してオブジェクトが変更されたかどうかを確認できます。

S3 バケットまたは Identity and Access Management (IAM) ポリシーを使用して、汎用バケットレベルで条件付き削除を適用できます。詳細については、「[Amazon S3 バケットに条件付き削除を強制する](conditional-delete-enforce.md)」を参照してください。

**注記**  
条件付き削除の評価は、オブジェクトの最新バージョンにのみ適用されます。

**Topics**
+ [オブジェクトを削除する前にオブジェクトが変更されたかどうかを確認する方法](#conditional-deletes-etags)
+ [オブジェクトを削除する前にオブジェクトが存在するかどうかを確認する方法](#conditional-delete)
+ [Amazon S3 バケットに条件付き削除を強制する](conditional-delete-enforce.md)

## オブジェクトを削除する前にオブジェクトが変更されたかどうかを確認する方法
<a name="conditional-deletes-etags"></a>

 条件付き削除を使用すると、オブジェクトの偶発的な削除からアプリケーションを保護できます。`HTTP If-Match` ヘッダーと `ETag` 値を使用して、オブジェクトが変更されたかどうかを確認できます。S3 バケット内のオブジェクトの `ETag` 値が、削除オペレーション中に指定した `ETag` と一致しない場合、オペレーションは失敗します。`DeleteObjects` オペレーションを使用して複数のオブジェクトを条件付きで削除するには、XML リクエスト本文のオブジェクトの `ETag` 要素に `ETag` 値を指定する必要があります。詳細については、「[Content-MD5 と ETag を使用して、アップロードされたオブジェクトを検証する](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5)」を参照してください。

**注記**  
`ETag` 値を持つ `If-Match` ヘッダーで条件付き削除を実行するには、`s3:DeleteObject` および `s3:GetObject` アクセス許可が必要です。

`ETag` 値を持つ `If-Match` ヘッダーは、バケット内の既存のオブジェクトに対して評価されます。同じキー名と一致する `ETag` を持つ既存のオブジェクトがある場合、`DeleteObject` リクエストは成功し、`204 No content` レスポンスを返します。`ETag` が一致しない場合、削除オペレーションは `412 Precondition Failed` レスポンスで失敗します。`DeleteObjects` オペレーションを使用して複数のオブジェクトを条件付きで削除するには、XML リクエスト本文のオブジェクトの `ETag` 要素に `ETag` の値を指定できます。リクエストが成功すると、`DeleteObjects` オペレーションは `200 OK` で応答し、レスポンスの本文内の各オブジェクトのステータスを提供します。前提条件が成功すると、そのオブジェクトのレスポンスはレスポンスの本文の `<Deleted>` 要素にキャプチャされます。前提条件が失敗した場合、そのオブジェクトのレスポンスはレスポンス本文の `<Error>` 要素にキャプチャされます。

 同時リクエストが発生した場合、そのオブジェクトに対する条件付き書き込みオペレーションが完了する前に、そのオブジェクトへの `DELETE` または `PUT` リクエストが成功すると、`409 Conflict` エラーレスポンスを受け取ることもあります。オブジェクトに対する条件付き書き込みオペレーションが完了する前にそのオブジェクトへの削除リクエストが成功すると、オブジェクトキーが存在しなくなるため、`404 Not Found` を受け取ることになります。

`ETag` 値を持つ `If-Match` ヘッダーは、次の API で使用できます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### の使用AWS CLI
<a name="conditional-deletes-deleteobject-CLI-etags"></a>

次の `delete-object` コマンド例は、指定された ETag 値 `6805f2cfc46c0f04559748bb039d69al` を使用して条件付き削除を実行しようとします。

```
aws s3api delete-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69al"       
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html)」を参照してください。

次の `delete-objects` コマンド例は、指定された ETag 値 `6805f2cfc46c0f04559748bb039d69al` を使用して条件付き削除を実行しようとします。

```
aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "6805f2cfc46c0f04559748bb039d69al"}]}' 
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

## オブジェクトを削除する前にオブジェクトが存在するかどうかを確認する方法
<a name="conditional-delete"></a>

 `*` 値を持つ `If-Match` ヘッダーを使用して、オブジェクトを削除する前にオブジェクトが存在するかどうかを確認できます。`*` 値は、オブジェクトが変更されたかどうかにかかわらず、オブジェクトが存在する場合にのみオペレーションを続行する必要があることを示します。

削除マーカーは、オブジェクトが削除されたことを示す、バージョニングされた S3 汎用バケットの特殊なオブジェクトです。これらは、以前のバージョンを保持しながらオブジェクトが削除されるようにするプレースホルダーです。したがって、`DeleteObject` API で `If-Match:*` を使用する場合、オペレーションはオブジェクトが存在する場合にのみ `204 No Content` で成功します。オブジェクトの最新バージョンが削除マーカーである場合、オブジェクトは存在せず、`DeleteObject` API は失敗して `412 Precondition Failed` レスポンスを返します。削除マーカーの詳細については、「[削除マーカーの使用](DeleteMarker.md)」を参照してください。

`DeleteObjects` オペレーションを使用して複数のオブジェクトを条件付きで削除するには、XML リクエスト本文のオブジェクトの `ETag` 要素に `*` を指定できます。前提条件が成功すると、`DeleteObjects` オペレーションは `200 OK` で応答し、レスポンスの本文内の各オブジェクトのステータスを提供します。前提条件が成功すると、そのオブジェクトのレスポンスはレスポンスの本文の `<Deleted>` 要素にキャプチャされます。前提条件が失敗した場合、そのオブジェクトのレスポンスはレスポンス本文の `<Error>` 要素にキャプチャされます。いずれかの前提条件を評価するときにオブジェクトが存在しない場合、S3 はリクエストを拒否し、`Not Found` エラーレスポンスを返します。

**注記**  
 条件付き削除を実行するには、`If-Match:*` および `s3:DeleteObject` アクセス許可が必要です。

`*` 値を持つ `If-Match` ヘッダーは、次の API で使用できます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### の使用AWS CLI
<a name="conditional-deleteobject-CLI-etags"></a>

次の `delete-object` コマンド例は、キー名が `my_images.tar.bz2` で値が `*` (任意の ETag を表す) であるオブジェクトに対して条件付き削除を実行しようとします。

```
aws s3api delete-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --if-match "*"
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html)」を参照してください。

次の `delete-objects` コマンド例は、キー名が `my_images.tar.bz2` で値が `*` (任意の ETag を表す) であるオブジェクトに対して条件付き削除を実行しようとします。

```
aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "*"}]}' 
```

詳細については、**AWS CLI コマンドリファレンスの「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html)」を参照してください。

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド**」の「[AWS Command Line Interface とは](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。

# Amazon S3 バケットに条件付き削除を強制する
<a name="conditional-delete-enforce"></a>

 Amazon S3 バケットポリシーを使用すると、汎用バケット内のオブジェクトに条件付き削除を含む `If-Match` ヘッダーを強制できます。`If-Match` ヘッダーが存在しない場合、リクエストは `403 Access Denied` で拒否されます。バケットポリシーは、バケットとその中のオブジェクトへのアクセス許可を付与できるリソースベースのポリシーです。バケット所有者のみが、ポリシーをバケットに関連付けることができます。バケットポリシーの詳細については、「[Amazon S3 のバケットポリシー](bucket-policies.md)」を参照してください。

次の例は、バケットポリシーで条件を使用して、クライアントに `If-Match` HTTP ヘッダーの使用を強制する方法を示しています。

**Topics**
+ [例 1: `ETag` 値を持つ `If-Match` ヘッダーを使用して条件付き削除のみを許可する](#conditional-writes-enforce-ex1)
+ [例 2: `*` 値を持つ `If-Match` ヘッダーを使用して条件付き削除のみを許可する](#conditional-deletes-enforce-ex2)

## 例 1: `ETag` 値を持つ `If-Match` ヘッダーを使用して条件付き削除のみを許可する
<a name="conditional-writes-enforce-ex1"></a>

このバケットポリシーを使用して、`ETag` 値を持つ `If-Match` ヘッダーを含む `DeleteObject` および `DeleteObjects` リクエストを使用した条件付き削除のみを許可できます。条件のない削除はすべて拒否され、条件付き削除は成功します。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowConditionalDeletes",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "false"
                }
            }
        },
         {
            "Sid": "AllowGetObjectBecauseConditionalDeleteIfMatchETag",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

## 例 2: `*` 値を持つ `If-Match` ヘッダーを使用して条件付き削除のみを許可する
<a name="conditional-deletes-enforce-ex2"></a>

このバケットポリシーを使用して、`*` 値を持つ `If-Match` ヘッダーを含む `DeleteObject` および `DeleteObjects` リクエストを使用した条件付き削除のみを許可できます。条件のない削除はすべて拒否され、条件付き削除は成功します。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowConditionalDeletes",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "false"
                }
            }
        }
    ]
}
```