【AWS】Amazon S3 バケットが削除できない原因と4つの対処法

  • URLをコピーしました!
目次

はじめに

Amazon S3 を利用したシステムの運用や環境整理を行う際、不要になった S3 バケットを削除しようとしてエラーが生じ、処理が進まないケースは頻繁に発生します。

S3 バケットは誤削除によるデータ消失を防ぐため、厳密な保護仕様が設けられています。「バケットが空ではない」という物理的な状態や、見落としがちなバージョニング設定、意図せず設定された S3 バケットポリシーなど、エラーの原因はさまざまです。管理者権限を持っていても、これらの条件をクリアしていない限りバケットを削除することはできません。

本記事では、Amazon S3 でバケットが削除できない場合に考えられる4つの主な原因と、それぞれの具体的な対処法について解説します。

この記事でわかること
  • S3 バケットが削除できない主な4つの原因
  • バケット内に残ったオブジェクトやバージョン情報の完全削除手順
  • S3 バケットポリシーによるアクセス拒否(Deny)の解除方法
  • IAM ユーザーに必要な削除権限(s3:DeleteBucket)の確認ポイント

主な原因

原因

バケット内にオブジェクト(ファイル)が残っている

Amazon S3 の基本仕様として、内部に1つでもオブジェクト(ファイルやフォルダ)が保存されているバケットは削除することができません。これは、誤操作による重要なデータの意図しない消失を防ぐためのフェイルセーフ(安全装置)です。

マネジメントコンソールからバケットを削除しようとしてエラーになった場合、まずは対象のバケットが「完全に空」の状態であるかを確認する必要があります。

バケットを空にする手順

対象のバケットを選択した状態で「空にする(Empty)」ボタンをクリックします。確認画面が表示されるため、指示に従って指定のテキスト(「permanently delete」など)を入力し、実行します。これにより、バケット内の現在表示されているオブジェクトが一括で削除され、バケット本体の削除が可能になります。

原因

バージョニングで過去のデータが隠れている

前述の「空にする」操作を行ってもバケットが削除できない場合、最も疑われるのが「バージョニング機能」による過去データの残存です。

バージョニングが有効になっているバケットでは、オブジェクトを削除しても画面上の通常表示から消えるだけで、内部的には「削除マーカー」という履歴データや過去のバージョンのファイルが非表示の状態で保持されています。S3 の仕様上、これらの隠れた履歴データもすべて消去しなければ、バケット本体を削除することはできません。

過去のバージョンと削除マーカーの完全削除手順

STEP
バージョン表示の有効化

バケットの「オブジェクト」タブを開き、「バージョンを表示」のトグルスイッチ(トグルボタン)をオンにします。

STEP
隠しデータ(履歴)の確認

これまで隠れていた過去のバージョンや「削除マーカー(Delete marker)」が一覧に表示されます。

STEP
履歴データを含めた完全削除

表示されたすべてのオブジェクト(履歴を含む)を選択し、改めて削除を実行します。

過去のバージョンを含めたすべてのデータが完全に消去された状態になって初めて、バケットの削除が許可されます。

原因

S3 バケットポリシーで削除が拒否(Deny)されている

バケットの中身を完全に空にしても削除できず、「アクセス権限がありません」というエラーが出る場合、S3バケットポリシーによって削除アクション(s3:DeleteBucket)が明示的に拒否(Deny)されている可能性があります。

この事象は、Elastic Beanstalk などの AWS の別サービスが環境構築時に自動生成したバケットで頻繁に発生します。管理画面では以下のようなエラーメッセージが表示されます。

バケット「elasticbeanstalk-us-east-2-***********」を削除するためのアクセス権限がありません

S3 バケットポリシーの修正手順

システムが自動生成したバケットは、誤削除を防ぐために強固なポリシーで保護されています。ユーザーに管理者権限があっても、このバケットポリシーの制限が優先されるため、手動で解除する必要があります。

STEP
アクセス許可タブの表示

Amazon S3 コンソールで対象のバケットを選択し、「アクセス許可」タブを開きます。

STEP
ポリシーの編集

「バケットポリシー」のセクションにある「編集」をクリックします。

STEP
Deny から Allow への変更

ポリシー(JSON 形式)の中から "Action": "s3:DeleteBucket" の記述を探し、その上部にある "Effect": "Deny""Allow" に書き換えるか、該当の拒否ステートメントのブロック自体を削除します。

STEP
変更の保存

設定を保存し、再度バケットの削除を実行します。

原因

IAM ユーザーに削除権限がない

バケットが空であり、バケットポリシーによる拒否設定もないにもかかわらず削除に失敗する場合、そもそも操作を行っている IAM ユーザー(または IAM ロール)自身に、バケットを削除するための権限が付与されていないことが原因として考えられます。

IAM 権限(s3:DeleteBucket)の確認

AWS IAM(Identity and Access Management)コンソールから、対象ユーザーにアタッチされているポリシーを確認します。S3 に対するフルアクセス権限(AmazonS3FullAccessなど)や、少なくとも "Action": "s3:DeleteBucket" を許可(Allow)するカスタムポリシーが設定されている必要があります。

権限が不足している場合は、社内の AWS 管理者に権限の追加を依頼するか、適切な権限を持つ別のアカウントでログインし直して削除作業を行ってください。

まとめ

本記事では、Amazon S3 バケットが削除できない場合の主な原因と対処法について解説しました。

  • バケットを削除するには、前提として内部のオブジェクトを完全に空にする必要がある。
  • バージョニングが有効な場合、非表示の履歴データや削除マーカーもすべて手動で消去する。
  • Elastic Beanstalk 等が自動生成したバケットは、バケットポリシーの Deny 設定を解除する。
  • 作業を行う IAM ユーザー自身に、バケット削除権限(s3:DeleteBucket)が付与されているか確認する。

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次