범용 버킷 삭제 - Amazon Simple Storage Service

범용 버킷 삭제

빈 Amazon S3 범용 버킷을 삭제할 수 있습니다. 범용 버킷 비우기에 대한 자세한 내용은 범용 버킷 비우기 섹션을 참조하세요.

Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 사용하여 버킷을 삭제할 수 있습니다.

중요

범용 버킷을 삭제하기 전에 다음 사항을 고려하세요.

  • 범용 버킷 이름은 글로벌 네임스페이스 내에서 고유합니다. 버킷을 삭제하면 다른 AWS 계정이 새 버킷에 대해 동일한 범용 버킷 이름을 사용할 수 있으므로 삭제된 버킷에 대한 요청을 수신할 수도 있다는 점에 유의하세요. 이 현상을 방지하고 싶거나 같은 버킷 이름을 사용하려면 버킷을 삭제하지 마세요. 버킷을 비우고 보관한 다음 필요에 따라 버킷 요청을 차단하는 것이 좋습니다. 더 이상 적극적으로 사용되지 않는 버킷의 경우 버킷 자체를 유지하면서 비용을 최소화하기 위해 버킷에서 모든 객체를 비우는 것이 좋습니다.

  • 범용 버킷을 삭제하면 버킷이 즉시 제거되지 않을 수 있습니다. 대신 Amazon S3는 삭제를 위해 버킷을 대기열에 넣습니다. Amazon S3는 AWS 리전 전반에 분산되므로 삭제 프로세스가 완전히 전파되고 시스템 전체에서 일관성을 달성하는 데 시간이 걸립니다.

  • 버킷이 정적 웹 사이트를 호스팅하고 자습서: Route 53에 등록된 사용자 지정 도메인을 사용하여 정적 웹 사이트 구성에 설명된 대로 Amazon Route 53 호스팅 영역을 생성 및 구성한 경우 버킷과 관련된 Route 53 호스팅 영역 설정을 정리해야 합니다. 자세한 내용은 2단계: Route 53 호스팅 영역 삭제 섹션을 참조하세요.

  • 버킷이 Elastic Load Balancing(ELB)에서 로그 데이터를 수신하는 경우 버킷을 삭제하기 전에 버킷으로 ELB 로그 전달을 중지하는 것이 좋습니다. 그렇지 않으면 버킷을 삭제했는데 다른 사용자가 이름이 같은 버킷을 생성하면 여러분의 로그 데이터가 해당 버킷으로 전달될 수 있습니다. ELB 액세스 로그에 대한 자세한 내용은 Classic Load Balancer 사용 설명서Access logs for your Classic Load BalancerApplication Load Balancer 사용 설명서Access logs for your Application Load Balancer를 참조하세요.

문제 해결

Amazon S3 범용 버킷을 삭제할 수 없는 경우, 다음을 고려하세요.

  • 버킷이 비어 있는지 확인 - 객체가 없는 버킷만 삭제할 수 있습니다. 버킷이 비어 있는지 확인하세요. 버킷 비우기에 대한 자세한 내용은 범용 버킷 비우기 섹션을 참조하세요.

  • 연결된 액세스 포인트가 없는지 확인 - 동일한 계정 내에 연결된 S3 액세스 포인트 또는 다중 리전 액세스 포인트가 없는 경우에만 버킷을 삭제할 수 있습니다. 버킷을 삭제하기 전에 버킷에 연결된 같은 계정의 액세스 포인트를 모두 삭제하세요.

  • s3:DeleteBucket 권한이 있어야 함 – 버킷을 삭제할 수 없는 경우 IAM 관리자와 협력하여 s3:DeleteBucket 권한을 확보합니다. IAM 권한을 확인하거나 업데이트하는 방법에 대한 자세한 내용은 IAM 사용 설명서에서 IAM 사용자의 권한 변경을 참조하세요. 문제 해결 정보는 Amazon S3의 액세스 거부(403 Forbidden) 오류 문제 해결를 참조하세요.

  • AWS Organizations 서비스 제어 정책(SCP) 및 리소스 제어 정책(RCP)의 s3:DeleteBucket Deny 문 확인 – SCP 및 RCP는 버킷에 대한 삭제 권한을 거부할 수 있습니다. 자세한 내용은 AWS Organizations 사용 설명서서비스 제어 정책리소스 제어 정책을 참조하세요.

  • 버킷 정책의 s3:DeleteBucket Deny 문 확인 – IAM 사용자 또는 역할 정책에 s3:DeleteBucket 권한이 있는데 버킷을 삭제할 수 없는 경우, 버킷 정책에 s3:DeleteBucket에 대한 Deny 문이 포함되어 있을 수 있습니다. AWS Elastic Beanstalk에서 만든 버킷에는 기본적으로 이 문이 포함된 정책이 있습니다. 버킷을 삭제하려면 먼저 이 문 또는 버킷 정책을 삭제해야 합니다.

사전 조건

범용 버킷을 삭제하려면 버킷을 비워야 합니다. 버킷 비우기에 대한 자세한 내용은 범용 버킷 비우기 섹션을 참조하세요.

S3 버킷 삭제
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 범용 버킷을 선택합니다.

  3. 버킷 목록에서 삭제할 버킷 이름 옆에 있는 옵션 버튼을 선택한 후 페이지 상단에서 삭제를 선택합니다.

  4. 버킷 삭제(Delete bucket) 페이지의 텍스트 필드에 버킷 이름을 입력하여 버킷의 삭제 여부를 확인한 다음 버킷 삭제(Delete bucket)를 선택합니다.

    참고

    버킷에 객체가 포함된 경우 버킷을 삭제하기 전에 이 버킷은 비어 있지 않음 오류 알림의 버킷 비우기 버튼을 선택하고 버킷 비우기 페이지의 지침에 따라 버킷을 비웁니다. 그런 다음 버킷 삭제 페이지로 돌아가서 버킷을 삭제합니다.

  5. 버킷을 삭제했는지 확인하려면 범용 버킷 목록을 열고 삭제한 버킷의 이름을 입력합니다. 버킷을 찾을 수 없다면 성공적으로 삭제한 것입니다.

다음 예시에서는 AWS SDK for Java를 사용하여 범용 버킷을 비우고 삭제하는 방법을 보여줍니다. 먼저 코드가 범용 버킷의 모든 객체를 삭제한 후 버킷을 삭제합니다.

다른 언어의 예제는 Amazon Simple Storage Service API 참조Use DeleteBucket with an AWS SDK or CLI를 참조하세요. 그 밖의 AWS SDK 사용에 대한 자세한 내용은 Amazon Web Services에서의 구축을 위한 도구를 참조하세요.

Java

다음 Java 예시는 객체가 포함된 버킷을 삭제합니다. 모든 객체를 삭제한 후 버킷을 삭제합니다. 이 예제는 버전 관리가 사용 설정되거나 사용 설정되지 않은 버킷에 적용됩니다.

참고

버전 관리를 사용하지 않는 버킷의 경우 모든 객체를 직접 삭제한 다음 버킷을 삭제할 수 있습니다. 버전 관리를 사용하는 버킷의 경우 버킷을 삭제하기 전에 객체 버전을 모두 삭제해야 합니다.

실제 샘플을 만들고 테스트하는 방법에 대한 지침은 AWS SDK for Java 2.x 개발자 안내서를 참조하세요.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.util.Iterator; public class DeleteBucket2 { public static void main(String[] args) { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Delete all objects from the bucket. This is sufficient // for unversioned buckets. For versioned buckets, when you attempt to delete // objects, Amazon S3 inserts // delete markers for all objects, but doesn't delete the object versions. // To delete objects from versioned buckets, delete all of the object versions // before deleting // the bucket (see below for an example). ObjectListing objectListing = s3Client.listObjects(bucketName); while (true) { Iterator<S3ObjectSummary> objIter = objectListing.getObjectSummaries().iterator(); while (objIter.hasNext()) { s3Client.deleteObject(bucketName, objIter.next().getKey()); } // If the bucket contains many objects, the listObjects() call // might not return all of the objects in the first listing. Check to // see whether the listing was truncated. If so, retrieve the next page of // objects // and delete them. if (objectListing.isTruncated()) { objectListing = s3Client.listNextBatchOfObjects(objectListing); } else { break; } } // Delete all object versions (required for versioned buckets). VersionListing versionList = s3Client.listVersions(new ListVersionsRequest().withBucketName(bucketName)); while (true) { Iterator<S3VersionSummary> versionIter = versionList.getVersionSummaries().iterator(); while (versionIter.hasNext()) { S3VersionSummary vs = versionIter.next(); s3Client.deleteVersion(bucketName, vs.getKey(), vs.getVersionId()); } if (versionList.isTruncated()) { versionList = s3Client.listNextBatchOfVersions(versionList); } else { break; } } // After all objects and object versions are deleted, delete the bucket. s3Client.deleteBucket(bucketName); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client couldn't // parse the response from Amazon S3. e.printStackTrace(); } } }

버킷에 버전 관리가 활성화되지 않은 경우 AWS CLI를 사용하여 객체가 포함된 범용 버킷을 삭제할 수 있습니다. 객체가 포함된 버킷을 삭제하면 S3 Glacier Flexible Retrieval 스토리지 클래스로 전환된 객체를 포함해 버킷의 모든 객체가 영구적으로 삭제됩니다.

버킷에 버전 관리가 사용되지 않은 경우 rb(버킷 제거) AWS CLI 명령을 --force 파라미터와 함께 사용하여 버킷과 버킷의 모든 객체를 삭제할 수 있습니다. 이 명령은 먼저 모든 객체를 삭제한 후 버킷을 삭제합니다.

버전 관리가 활성화된 경우 --force 파라미터와 함께 rb 명령을 사용하면 버전이 지정된 객체가 삭제되지 않으므로 버킷이 비어 있지 않아 버킷 삭제가 실패합니다. 버전이 지정된 객체 삭제에 대한 자세한 내용은 객체 버전 삭제를 참조하세요.

다음 명령을 사용하려면 amzn-s3-demo-bucket을 삭제하려는 버킷의 이름으로 바꾸세요.

$ aws s3 rb s3://amzn-s3-demo-bucket --force

자세한 내용은 AWS Command Line Interface 사용 설명서AWS Command Line Interface에서 상위 수준 S3 명령 사용을 참조하세요.