

# Amazon S3 オブジェクトの削除
<a name="DeletingObjects"></a>

Amazon S3 コンソール、AWS SDK、AWS Command Line Interface (AWS CLI)、または REST API を使用して、Amazon S3 から 1 つ以上のオブジェクトを直接削除できます。たとえば、ログファイルを収集している場合は、不要になったファイルを削除することをお勧めします。ログファイルなどのオブジェクトを自動的に削除する [S3 ライフサイクルルールをセットアップ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)できます。

オブジェクトを削除するには、次のいずれかの API オペレーションを使用できます。
+ **単一のオブジェクトの削除** - Amazon S3 では `DELETE` (`DeleteObject`) API オペレーションを提供しています。これを使用すると、単一の HTTP リクエストで 1 つのオブジェクトを削除できます。
+ **複数のオブジェクトの削除** - Amazon S3 では Multi−Object Delete (`DeleteObjects`) API を提供しています。これを使用すると、単一の HTTP リクエストで最大 1,000 個のオブジェクトを削除できます。

バージョニングが有効でないバケットからオブジェクトを削除する場合、オブジェクトキー名のみを指定します。ただし、バージョニングが有効なバケットからオブジェクトを削除する場合は、オブジェクトのバージョン ID を指定して、特定のバージョンのオブジェクトを削除することができます。

## オブジェクトを削除する前に考慮すべきベストプラクティス
<a name="DeletingObjects-best-practices"></a>

オブジェクトを削除する前に、次のベストプラクティスを考慮してください。
+ [バケットのバージョニング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)を有効にします。[S3 バージョニング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)は、単純な `DeleteObject` リクエストに対する保護を追加し、誤って削除されないようにします。バージョニングされたバケットで、オブジェクトの現在のバージョンを削除するか、削除リクエストで特定のバージョン ID が指定されていない場合、Amazon S3 はオブジェクトを完全に削除しません。代わりに、S3 は削除マーカーを追加し、オブジェクトのソフト削除を発行します。削除マーカーは、新しいバージョン ID を持つオブジェクトの現在の (または最新の) バージョンになります。詳細については、「[バージョニングが有効なバケットからのオブジェクトバージョンの削除](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectVersions.html)」を参照してください。
+ 多数のオブジェクトを削除する場合や、オブジェクト作成日に基づいてプログラムでオブジェクトを削除する場合は、[バケットに S3 ライフサイクル設定を設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)します。これらの削除をモニタリングするには、[S3 ライフサイクルイベント通知を使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configure-notification.html)することをお勧めします。S3 ライフサイクル通知を設定すると、`s3:LifecycleExpiration:Delete` イベントタイプはバケット内のオブジェクトが削除されたときに通知します。また、S3 ライフサイクル設定によってオブジェクトバージョンが完全に削除された場合にも通知されます。`s3:LifecycleExpiration:DeleteMarkerCreated` イベントタイプは、S3 ライフサイクルが削除マーカーを作成するときに通知します。削除マーカーは、バージョニングされているバケット内のオブジェクトの最新バージョンが削除されると作成されます。
+ S3 ライフサイクル設定を更新する前に、ライフサイクルが意図したすべてのオブジェクトに対するアクションを完了したことを確認します。詳細については、「[バケットにライフサイクル設定を設定する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)」の「**ライフサイクルルールの更新、無効化、または削除**」セクションを参照してください。
**注記**  
S3 ライフサイクルルールは、意図しない削除を防ぐために、オブジェクトの正しいサブセットに適用する必要があります。ライフサイクルルールの作成時に、プレフィックス、オブジェクトタグ、またはオブジェクトサイズでオブジェクトをフィルタリングできます。
+ ユーザーがバケットからオブジェクトを削除してしまうことを制限することを検討してください。ユーザーを制限するには、[Amazon S3 バケットポリシー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)で次のアクションのアクセス許可を明示的に拒否する必要があります。
  + `s3:DeleteObject`、`s3:DeleteObjectVersion` (API リクエストを使用してオブジェクトを削除できるユーザーを制御するため)
  + `s3:PutLifecycleConfiguration` (S3 ライフサイクルの有効期限ルールを追加できるユーザーを制御するため)
+ [S3 レプリケーション](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)を使用してデータの複数のコピーを作成し、一度に複数の場所にレプリケートすることを検討してください。必要に応じて、送信先バケットをいくつでも選択できます。さらに、オブジェクトが意図せずに削除された場合でも、データのコピーは保持されます。
+ バージョン管理されていないバケットにオブジェクトバージョン ID を送信しないでください。また、すべてのバケット (バージョン管理されていないバケットを含む) に `s3:DeleteObject` と `s3:DeleteObjectVersion` の両方のアクセス許可を適切に設定してください。

## バージョニングが有効なバケットからのオブジェクトの削除
<a name="DeletingObjectsfromaVersion-EnabledBucket"></a>

バージョニングが有効なバケットの場合、同じオブジェクトの複数のバージョンがバケット内に存在する可能性があります。バージョニングが有効なバケットを操作する場合は、`Delete` API オペレーションで以下のオプションが可能です。
+ **バージョンを指定しない削除リクエストの指定** - オブジェクトのキーのみを指定し、バージョン ID は指定しません。この場合、Amazon S3 はオブジェクトの最新バージョンに対して削除マーカーを作成し、レスポンスでバージョン ID を返します。オブジェクトはバケットから消去されます。オブジェクトのバージョニングと削除マーカーの概念については、[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md) を参照してください。
+ **バージョンを指定した削除リクエストの指定** – キーとバージョン ID の両方を指定します。この場合、以下の結果が想定されます。
  + バージョン ID が特定のオブジェクトバージョンにマッピングされている場合、Amazon S3 はその特定のバージョンのオブジェクトを削除します。
  + バージョン ID がそのオブジェクトの削除マーカーに対応する場合、Amazon S3 は削除マーカーを削除します。削除マーカーが削除されると、オブジェクトがバケットに再表示されます。

## バージョニングが停止されたバケットからのオブジェクトの削除
<a name="Deleting-objects-versioning-suspended-bucket"></a>

バケットのバージョニングが一時停止されている場合、`Delete` API オペレーションは、バージョニングが有効になっているバケットに対して同じように動作します (現在のバージョンに null バージョン ID がある場合を除く)。詳細については、「[バージョニングが停止されたバケットからのオブジェクトの削除](DeletingObjectsfromVersioningSuspendedBuckets.md)」を参照してください。

## バージョン管理されていないバケットからのオブジェクトの削除
<a name="Deleting-objects-unversioned-bucket"></a>

バケットがバージョン変更されていない場合は、`Delete` API オペレーションでオブジェクトのキーを指定できます。Amazon S3 はオブジェクトを完全に削除します。オブジェクトの永続的な削除を防ぐには、[バケットのバージョニングを有効](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)にします。

バージョン管理されていないバケットの場合、バケットポリシーで `s3:DeleteObject` または `s3:DeleteObjectVersion` アクセス許可が明示的に拒否されていると、`DeleteObject`、`DeleteObjects`、または `DeleteObjectVersion` リクエストは `403 Access Denied` エラーになります。

## MFA 対応のバケットからのオブジェクトの削除
<a name="DeletingObjectsfromanMFA-EnabledBucket"></a>

多エレメント認証 (MFA) 対応のバケットからオブジェクトを削除する場合は、以下の点に注意してください。
+ 無効な MFA トークンを指定した場合、リクエストは常に失敗します。
+ MFA 対応のバケットがあり、バージョンを指定した削除リクエストを行う (オブジェクトのキーとバージョン ID を指定する) 場合、有効な MFA トークンを指定しないとリクエストは失敗します。さらに、MFA 対応バケットに対してマルチオブジェクト `Delete` API オペレーションを使用する際、いずれかの削除がバージョンを指定した削除リクエストである場合 (つまり、オブジェクトのキーとバージョン ID を指定した場合)、MFA トークンを指定しないとリクエスト全体が失敗します。

ただし、以下の場合、リクエストは成功します。
+ MFA 対応バケットを使用していて、バージョンを指定しない削除リクエストを行う (バージョニングされたオブジェクトを削除しない) 場合、MFA トークンを指定しなくても削除は成功します。
+ Multi−Object Delete リクエストで、MFA 対応バケットからバージョニング非対応のオブジェクトのみを削除するように指定した場合、MFA トークンを指定しなくても削除は成功します。

MFA 削除の詳細については、 を参照してください。[MFA 削除の設定](MultiFactorAuthenticationDelete.md)

**Topics**
+ [オブジェクトを削除する前に考慮すべきベストプラクティス](#DeletingObjects-best-practices)
+ [バージョニングが有効なバケットからのオブジェクトの削除](#DeletingObjectsfromaVersion-EnabledBucket)
+ [バージョニングが停止されたバケットからのオブジェクトの削除](#Deleting-objects-versioning-suspended-bucket)
+ [バージョン管理されていないバケットからのオブジェクトの削除](#Deleting-objects-unversioned-bucket)
+ [MFA 対応のバケットからのオブジェクトの削除](#DeletingObjectsfromanMFA-EnabledBucket)
+ [単一のオブジェクトの削除](delete-objects.md)
+ [複数のオブジェクトの削除](delete-multiple-objects.md)