Amazon Simple Storage Service (Amazon S3) バケットを削除できないのですが、その理由がわかりません。
解決策
前提条件
Amazon S3 バケットを削除する前に、次の点を確認してください。
- Amazon S3 の名前空間は、すべての AWS アカウントで共有されます。バケット名を削除すると、その名前はすべてのユーザーが使用できるようになります。別の AWS アカウントがバケット名を取得している場合、そのバケット名を再度利用することはできません。バケットは完全に削除するのではなく、空にするのがベストプラクティスです。
- 静的ウェブサイトとしてホストされているバケットについては、バケットに関連する Amazon Route 53 ホストゾーンの設定を確認して更新してください。
- バケットにログデータが配信されている場合は、削除する前にそのバケットへのログの配信を停止してください。
Amazon S3 バケットが空でない
Amazon S3 バケットを削除するには、バケットを空にする必要があります。AWS マネジメントコンソール、AWS コマンドラインインターフェイス (AWS CLI)、または SDK を使用して、バケットを手動で削除します。バケットが大きく、バージョニングが設定されている場合、オブジェクトを手動で削除するには時間がかかります。そのような場合は、Amazon S3 ライフサイクル設定を使用してバケットを空にしてください。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
バージョニングが設定されているバケット、または停止中のバケットの場合、ライフサイクル設定に次のルールを含めます。
- ルール 1: 作成されてから X 日後に現在のすべてのバージョンのオブジェクトを期限切れにする。オブジェクトが古いバージョンになった Y 日後にそれらすべてを完全に削除する。
- ルール 2: すべての単独の削除マーカーと不完全なマルチパートアップロードを Z 日後に期限切れにする。
バージョニングが設定されていないバケットの場合、ライフサイクル設定に次のルールを含めます。
- ルール 1: オブジェクトが作成されてから X 日後にそれらすべての現在のバージョンを期限切れにする。
- ルール 2: すべての不完全なマルチパートアップロードを Z 日後に期限切れにする。
注: この例でバケットをすばやく削除するには、X、Y、Z を 1 日に設定します。
Amazon S3 は、毎日午前 12:00 (UTC) にライフサイクルルールを実行します。ライフサイクルルールが実行されると、有効期限の対象となるすべてのオブジェクトに削除のマークが付けられます。ライフサイクルポリシーアクションは非同期であるため、オブジェクトがバケットから物理的に削除されるまでには数日かかります。オブジェクトに削除のマークが付けられると、そのオブジェクトに関連付けられているストレージの料金は請求されなくなります。
AWS CLI を使用する
バージョニングが設定されていない Amazon S3 バケットからオブジェクトを完全に削除するには、次のコマンドを実行します。
aws s3 rm s3://bucket-name --recursive
バージョニングが設定されているか、停止中の Amazon S3 バケットからすべてのオブジェクトを完全に削除するには、次のコマンドを実行します。
aws s3api delete-objects --bucket BUCKET_NAME --delete "$(aws s3api list-object-versions --bucket BUCKET_NAME --output=json --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"
Amazon S3 コンソールを使用する
- Amazon S3 コンソールを開きます。
- ナビゲーションペインで、[バケット] を選択します。
- [バケット] で、空にしたいバケットを選択します。その後、[空にする] をクリックします。
- [バケットを空にする] ページで、テキストフィールドに「完全に削除」と入力して、バケット内のすべてのオブジェクトを削除します。その後、[空にする] をクリックします。
- (オプション) [空のバケット: ステータス] ページを確認して、空になるプロセスを表示できます。
**注:**Amazon S3 バケット内のオブジェクトバージョンがガバナンスモードでロックされている場合、AWS Identity and Access Management (IAM) には「s3:BypassGovernanceRetention」アクセス許可が必要です。ガバナンスモードをバイパスするには、リクエストに「x-amz-bypass-governance-retention:true」というヘッダーを含める必要があります。AWS マネジメントコンソールで行われるリクエストの場合、コンソールは必要なアクセス許可があるリクエストにこのヘッダーを自動的に適用して、ガバナンスモードをバイパスします。
保持期間中、でコンプライアンスモードで保護されているオブジェクトバージョンを IAM ID で削除することはできません。これには、アカウントのルートユーザーも含まれます。保持期間が過ぎたら、コンプライアンスモードで保護されているオブジェクトを削除します。バケットが空になったら、Amazon S3 バケットを削除します。
Amazon S3 バケットにアクセスポイントが関連付けられている
Amazon S3 バケットを削除する前に、バケットにアタッチされているすべてのアクセスポイントを削除する必要があります。詳細については、「アクセスポイントの削除」を参照してください。
DeleteBucket リクエストを行う IAM ID に十分なアクセス許可がない
Amazon S3 バケットを削除する IAM ID に IAM ポリシーの DeleteBucket アクセス許可を付与してください。または、Amazon S3 のバケットポリシーに DeleteBucket アクションを実行するアクセス許可を付与してください。
明示的な DENY ステートメントが削除を妨げている
明示的な DENY ステートメントは、明示的な ALLOW ステートメントよりも優先されます。次のポリシーに明示的な DENY ステートメントが含まれていないことを確認してください。
- IAM ID の IAM ポリシー
- Amazon S3 バケットポリシー
- Virtual Private Cloud (VPC) エンドポイントポリシー
AWS Elastic Beanstalk がバケットを作成すると、デフォルトでポリシーに明示的な DENY ステートメントが含まれます。Amazon S3 バケットを削除する前に、明示的な DENY ステートメントまたはバケットポリシーを削除してください。
関連情報
バケットを空にする
S3 オブジェクトロックの仕組み
バケットの削除