Amazon S3 객체 삭제하기
Amazon S3 객체 삭제하기
S3에 저장한 객체를 더 이상 쓸 일이 없다면 Amazon S3 콘솔, AWS SDK, AWS Command Line Interface(AWS CLI), 또는 REST API를 사용해 객체 하나나 여러 개를 바로 삭제할 수 있어요. 예를 들어 로그 파일을 계속 모으고 있다면 더 이상 필요 없을 때 삭제하는 게 좋겠죠. S3 Lifecycle 규칙을 설정해 로그 파일 같은 객체를 자동으로 삭제하게 할 수도 있어요.
객체를 삭제하려면 다음 API 작업 중 하나를 사용할 수 있어요.
- 단일 객체 삭제 — Amazon S3는
DELETE(DeleteObject) API 작업을 제공해서 단일 HTTP 요청으로 객체 하나를 삭제할 수 있게 해줘요. - 여러 객체 삭제 — Amazon S3는 Multi-Object Delete(
DeleteObjects) API 작업을 제공해서 단일 HTTP 요청으로 최대 1,000개 객체를 삭제할 수 있게 해줘요.
버전 관리가 활성화되지 않은 버킷에서 객체를 삭제할 때는 객체 키 이름만 제공하면 돼요. 반면 버전 관리가 활성화된 버킷에서 객체를 삭제할 때는 객체의 특정 버전을 삭제하려고 버전 ID를 제공할 수 있어요.
출처: 문서
본문
객체 삭제 전에 고려할 모범 사례
객체를 삭제하기 전에 다음 모범 사례를 고려해 보세요.
-
버킷 버전 관리를 활성화하세요. S3 버전 관리는 단순한
DeleteObject요청에 대한 보호 기능을 더해 실수로 인한 삭제를 막아줘요. 버전 관리 버킷에서 객체의 현재 버전을 삭제하거나, 삭제 요청이 특정 버전 ID를 지정하지 않으면 S3는 객체를 영구 삭제하지 않아요. 대신 S3는 삭제 마커를 추가해서 객체를 소프트 삭제(soft delete)해요. 그리고 그 삭제 마커가 새 버전 ID를 가진 객체의 현재(최신) 버전이 돼요. 자세한 내용은 버전 관리 버킷에서 객체 버전 삭제하기를 참고하세요. -
많은 수의 객체를 삭제하거나, 객체 생성 날짜를 기준으로 프로그래밍 방식으로 삭제하려면 버킷에 S3 Lifecycle 구성을 설정하세요. 이런 삭제를 모니터링하려면 S3 Lifecycle 이벤트 알림을 사용하는 것을 권장해요. S3 Lifecycle 알림을 구성하면
s3:LifecycleExpiration:Delete이벤트 유형이 버킷 안 객체가 삭제될 때 알려줘요. 또한 S3 Lifecycle 구성으로 객체 버전이 영구 삭제될 때도 알려줘요.s3:LifecycleExpiration:DeleteMarkerCreated이벤트 유형은 S3 Lifecycle이 삭제 마커를 만들 때 알려줘요. 삭제 마커는 버전 관리 버킷에서 객체의 현재 버전이 삭제될 때 만들어져요. -
S3 Lifecycle 구성을 업데이트하기 전에, Lifecycle이 모든 대상 객체에 대한 작업을 완료했는지 확인하세요. 자세한 내용은 버킷에 S3 Lifecycle 구성 설정하기의 Lifecycle 규칙 업데이트·비활성화·삭제 섹션을 참고하세요.
참고
의도치 않은 삭제를 막으려면 S3 Lifecycle 규칙이 올바른 객체 하위 집합에 적용되어야 해요. Lifecycle 규칙을 만들 때 접두사, 객체 태그, 객체 크기로 객체를 필터링할 수 있어요.
-
사용자가 버킷에서 객체를 제거하거나 삭제하지 못하도록 제한하는 것을 고려하세요. 사용자를 제한하려면 Amazon S3 버킷 정책에서 다음 작업에 대한 권한을 명시적으로 거부해야 해요.
s3:DeleteObject,s3:DeleteObjectVersion(API 요청으로 객체를 삭제할 수 있는 사람을 제어)s3:PutLifecycleConfiguration(S3 Lifecycle 만료 규칙을 추가할 수 있는 사람을 제어)
-
S3 복제(Replication)를 사용해 데이터의 복사본을 여러 개 만들고 여러 위치에 한 번에 복제하는 것을 고려하세요. 필요한 만큼 많은 대상 버킷을 선택할 수 있어요. 게다가 객체가 의도치 않게 삭제되어도 데이터의 복사본이 남아 있어요.
-
객체 버전 ID를 버전 관리되지 않은 버킷으로 보내지 마세요. 그리고 버전 관리되지 않은 버킷을 포함한 모든 버킷에서
s3:DeleteObject와s3:DeleteObjectVersion권한을 모두 올바르게 설정하세요.
버전 관리 버킷에서 객체 삭제
버킷이 버전 관리(versioning)로 활성화되어 있다면 같은 객체의 여러 버전이 버킷에 존재할 수 있어요. 버전 관리 버킷을 다룰 때 Delete API 작업은 다음 옵션을 제공해요.
-
비버전 지정 삭제 요청 — 버전 ID가 아니라 객체의 키만 지정해요. 이 경우 S3는 객체의 현재 버전 위에 삭제 마커를 만들고 그 버전 ID를 응답으로 반환해요. 이렇게 하면 객체가 버킷에서 사라진 것처럼 보여요. 객체 버전 관리와 삭제 마커 개념에 대한 내용은 S3 버전 관리로 객체의 여러 버전 유지하기를 참고하세요.
-
버전 지정 삭제 요청 — 키와 버전 ID를 모두 지정해요. 이 경우 다음 결과가 가능해요.
- 버전 ID가 특정 객체 버전을 가리키면 S3는 그 객체 버전을 삭제해요.
- 버전 ID가 객체의 삭제 마커를 가리키면 S3는 그 삭제 마커를 삭제해요. 삭제 마커가 삭제되면 객체가 버킷에 다시 나타나요.
버전 관리 중단 버킷에서 객체 삭제
버킷이 버전 관리 중단(versioning-suspended) 상태라면 Delete API 작업은 버전 관리 활성화 버킷과 동일하게 동작해요(현재 버전이 null 버전 ID를 가질 때만 예외예요). 자세한 내용은 버전 관리 중단 버킷에서 객체 삭제하기를 참고하세요.
버전 관리되지 않은 버킷에서 객체 삭제
버킷이 버전 관리되지 않았다면 Delete API 작업에서 객체의 키를 지정할 수 있고, S3는 객체를 영구 삭제해요. 객체의 영구 삭제를 막으려면 버킷 버전 관리를 활성화하세요.
버전 관리되지 않은 버킷의 경우, 버킷 정책에서 s3:DeleteObject 또는 s3:DeleteObjectVersion 권한이 명시적으로 거부되어 있다면, 모든 DeleteObject, DeleteObjects, DeleteObjectVersion 요청은 403 Access Denied 오류가 나요.
MFA 활성화 버킷에서 객체 삭제
다중 인증(MFA)이 활성화된 버킷에서 객체를 삭제할 때 다음을 기억해 두세요.
- 유효하지 않은 MFA 토큰을 제공하면 요청은 항상 실패해요.
- MFA 활성화 버킷에서 버전 지정 삭제 요청(객체 키와 버전 ID 제공)을 하면, 유효한 MFA 토큰을 제공하지 않는 경우 요청이 실패해요. 또한 MFA 활성화 버킷에서 multi-object
DeleteAPI 작업을 사용할 때, 삭제 중 어느 하나라도 버전 지정 삭제 요청(객체 키와 버전 ID 지정)이라면 MFA 토큰을 제공하지 않으면 전체 요청이 실패해요.
하지만 다음 경우에는 요청이 성공해요.
- MFA 활성화 버킷에서 비버전 지정 삭제 요청(버전 지정 객체가 아닌 삭제)을 하고 MFA 토큰을 제공하지 않아도 삭제는 성공해요.
- MFA 활성화 버킷에서 버전 지정되지 않은 객체만 삭제하는 Multi-Object Delete 요청을 하고 MFA 토큰을 제공하지 않아도 삭제는 성공해요.
MFA 삭제에 대한 내용은 MFA 삭제 구성하기를 참고하세요.