スキップしてコンテンツを表示

Amazon S3 バケットを削除できない理由を知りたいです。

所要時間2分
0

Amazon Simple Storage Service (Amazon S3) バケットを削除できない原因を解決したいです。

解決策

前提条件

Amazon S3 バケットを削除する前に、次の手順を実行してください。

  • 静的ウェブサイトとしてホストされているバケットで、そのバケットに関連する Amazon Route 53 ホストゾーンの設定を確認して更新します。
  • バケットが Elastic Load Balancing (ELB) からログデータを受信している場合は、バケットを削除する前に、そのバケットへのログ配信を停止します。

注: バケット名を削除すると、その名前はすべてのユーザーが使用できるようになります。別の AWS アカウントがそのバケット名を使用するようになった場合、同じ名前は再使用できません。バケットは削除せず、空にすることをおすすめします。

S3 バケットが空でない

Amazon S3 バケットを削除するには、そのバケットを空にする必要があります。Amazon S3 コンソール、AWS コマンドラインインターフェイス (AWS CLI)、SDK のいずれかを使用してバケットを手動で空にします。バケットが大きく、バージョニングが設定済みである場合は、オブジェクトを手動削除すると時間がかかります。この場合は、Amazon S3 ライフサイクル設定を使用してバケットを空にします。

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

バケットにバージョニングが設定されているか、ステータスが Suspended の場合は、ライフサイクル設定に次のルールを含めます。

  • ルール 1: 作成されてから X 日後に現在のすべてのバージョンのオブジェクトを失効させる。オブジェクトが現在のバージョンではなくなった Y 日後に、該当するすべてのオブジェクトを完全に削除する。
  • ルール 2: すべての単独の削除マーカーと不完全なマルチパートアップロードを Z 日後に失効させる。

バージョニングを設定していないバケットでは、ライフサイクル設定に次のルールを含めます。

  • ルール 1: オブジェクトが作成されてから X 日後にそれらすべての現在のバージョンを期限切れにする。
  • ルール 2: すべての不完全なマルチパートアップロードを Z 日後に期限切れにする。

注: バケットを早期に削除するには、XYZ1 日に設定します。

Amazon S3 ライフサイクルルールは、毎日 1 回実行されます。ライフサイクルルールが実行されると、失効の対象となるすべてのオブジェクトに削除のマークが付けられます。ライフサイクルポリシーアクションは非同期であるため、オブジェクトがバケットから物理的に削除されるまでには数日かかります。オブジェクトに削除のマークが付けられると、そのオブジェクトに関連付けられているストレージの料金は請求されなくなります。

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}}')"

注: bucket-nameは、実際の Amazon S3 バケット名に置き換えます。

Amazon S3 コンソールを使用する

次の手順を実行します。

  1. Amazon S3 コンソールを開きます。
  2. ナビゲーションペインで空にするバケットを選択し、[空にする] を選択します。
  3. [バケットを空にする] ページで、テキストフィールドに permanently delete と入力し、バケット内のすべてのオブジェクトを削除した後、[空にする] を選択します。
  4. (オプション) [バケットを空にする: ステータス] ページを参照すると、進行状況を確認できます。

注: Amazon S3 バケット内のオブジェクトバージョンがガバナンスモードの場合、AWS Identity and Access Management (IAM) には s3:BypassGovernanceRetention アクセス許可が必要です。ガバナンスモードをバイパスするには、リクエストに x-amz-bypass-governance-retention:true というヘッダーを含める必要があります。AWS マネジメントコンソールで行うリクエストでは、コンソールは必要なアクセス許可があるリクエストにこのヘッダーを自動的に適用することで、ガバナンスモードをバイパスします。

保持期間中は、IAM ID はコンプライアンスモードで保護されているオブジェクトバージョンを削除できません。これには、AWS アカウントの root ユーザーも含まれます。保持期間が過ぎた後に、コンプライアンスモードで保護されたオブジェクトを削除します。バケットを空にした後に、Amazon S3 バケットを削除します。

アクセスポイントがバケットに関連付けられている

Amazon S3 バケットを削除する前に、バケットにアタッチされているすべてのアクセスポイントを削除する必要があります。同じアカウント内の S3 アクセスポイントまたはマルチリージョンアクセスポイントがアタッチされているバケットは削除できません。

IAM ID に十分なアクセス許可が欠けている

バケットの削除に使用する IAM ID の IAM ポリシーで、DeleteBucket アクセス許可を付与します。または、バケットポリシーに delete-bucket API アクションを含めます。

明示的な DENY ステートメントが原因で削除できない

明示的な DENY ステートメントは、明示的な ALLOW ステートメントよりも優先されます。IAM ID、バケット、仮想プライベートクラウド (VPC) のポリシーに明示的な DENY ステートメントが含まれていないことを確認します。

AWS Elastic Beanstalk がバケットを作成すると、ポリシーにはデフォルトで明示的な DENY ステートメントが含まれます。Amazon S3 バケットを削除する前に、明示的な DENY ステートメントまたはバケットポリシーを削除します。

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ