버전 관리가 활성화된 Amazon Simple Storage Service(Amazon S3) 범용 버킷에서 삭제한 객체를 검색하려고 합니다.
간략한 설명
참고: S3 버전 관리는 범용 버킷에만 사용할 수 있습니다. 디렉터리 및 테이블 버킷은 S3 버전 관리를 지원하지 않습니다.
버전 관리가 사용된 버킷에서 객체를 삭제하면 Amazon S3에서 해당 객체에 대한 삭제 마커를 만듭니다. 삭제 마커는 객체의 현재 버전이 되고 객체는 이전 버전이 됩니다. Amazon S3는 삭제 마커를 사용하여 객체를 삭제한 것처럼 객체에 대한 요청에 응답합니다. 예를 들어, 객체에 대한 GET 요청을 보내면 Amazon S3는 오류를 반환합니다.
버전 관리가 사용된 버킷에서 삭제한 객체를 검색하려면 다음 작업 중 하나를 수행하십시오.
- 객체의 이전 버전을 다운로드합니다. s3:GetObjectVersion 권한이 있어야 합니다.
- s3:DeleteObjectVersion 권한이 있는 AWS 계정을 사용하여 삭제 마커를 제거합니다. 그러면 삭제되지 않은 최신 버전이 객체의 최신 버전이 되므로 버전이 지정된 버킷에서 이전에 삭제한 객체에 액세스할 수 있습니다.
- 참고: 버킷에서 다중 인증(MFA) 삭제를 구성한 경우 MFA 삭제를 사용하여 삭제 마커를 제거해야 합니다.
해결 방법
중요: 버킷에서 영구적으로 삭제한 데이터는 복구할 수 없습니다.
Amazon S3 콘솔을 사용하여 객체의 이전 버전 다운로드
다음 단계를 완료하십시오.
- Amazon S3 콘솔을 엽니다.
- 탐색 창에서 버킷을 선택한 다음, 삭제된 객체의 버킷을 선택합니다.
- 객체의 버전 목록을 보려면 버전 표시를 활성화합니다.
- 검색하려는 삭제된 객체의 버전을 선택합니다.
- 작업을 선택한 다음, 다운로드를 선택합니다.
AWS CLI를 사용하여 이전 버전의 객체 다운로드
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오. 다음 명령에서 DOC-EXAMPLE-BUCKET을 버킷 이름으로 바꿉니다.
다음 단계를 완료하십시오.
-
list-object-versions 명령을 실행하여 객체 버전을 목록으로 표시합니다.
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/
참고: 위 명령에는 결과를 지정된 키 이름 접두사로 필터링하는 --prefix 옵션이 포함되어 있습니다. 버킷에 여러 객체 버전이 포함된 경우 이 옵션을 사용하여 결과 수를 줄입니다.
-
명령 출력에서 객체 이전 버전의 버전 ID를 기록해 둡니다.
-
get-object 명령을 실행하여 버전을 검색합니다.
aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj filename.txt
Amazon S3 콘솔을 사용하여 삭제 마커 제거
다음 단계를 완료하십시오.
- 삭제된 객체의 버킷을 소유한 계정에서 Amazon S3 콘솔을 엽니다.
- 탐색 창에서 버킷을 선택한 다음, 삭제된 객체의 버킷을 선택합니다.
- 객체의 버전 목록을 보려면 버전 표시를 활성화합니다.
- 객체의 삭제 마커를 선택합니다.
중요: 객체 자체가 아닌 삭제 마커를 선택해야 합니다. 그렇지 않으면 객체를 검색할 수 없습니다.
- 객체 삭제 페이지의 **객체를 영구적으로 삭제하시겠습니까?**에 영구적으로 삭제를 입력합니다.
- 삭제를 선택합니다.
중요: Amazon S3 콘솔을 사용하여 폴더 삭제를 취소할 수 없습니다. 대신 AWS CLI 또는 AWS SDK를 사용해야 합니다.
AWS CLI를 사용하여 삭제 마커 제거
AWS CLI를 사용하여 여러 객체, 수천 개의 객체 또는 수백만 개의 객체에서 삭제 마커를 제거할 수 있습니다.
여러 객체의 삭제 마커 제거
다음 단계를 완료하십시오.
-
--query 파라미터를 사용하여 다음 list-object-versions 명령을 실행합니다.
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --query 'DeleteMarkers[*].{Key: Key, VersionId: VersionId}'
참고: 위 명령에는 결과를 지정된 키 이름 접두사로 필터링하는 --prefix 옵션이 포함되어 있습니다.
-
명령 출력에서 삭제 마커의 버전 ID를 기록해 둡니다.
중요: 삭제 마커의 버전 ID를 기록해 두어야 합니다. 객체 버전을 삭제하면 객체를 검색할 수 없습니다.
-
delete-object 명령을 실행하여 삭제 마커를 제거합니다.
aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'
-
삭제 마커가 제거되었는지 확인하려면 ls 명령을 실행합니다.
aws s3 ls s3://DOC-EXAMPLE-BUCKET
수천 개의 객체에 있는 삭제 마커 제거
경고: 다음 list-object-versions 명령을 실행하기 전에 데이터를 백업하는 것이 모범 사례입니다. 이 명령은 s3api delete-object API 작업을 사용하여 식별된 삭제 마커 객체를 삭제합니다. 객체 삭제는 영구적인 작업입니다. 이 명령 구조를 수정하면 예기치 않은 데이터 손실이 발생할 수 있습니다.
다음 단계를 완료하십시오.
- AWS CloudShell 콘솔을 엽니다.
- list-object-versions 명령을 실행합니다.
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --output json --query 'DeleteMarkers[?IsLatest==`true`].[Key, VersionId]' | jq -r '.[] | "--key " + "'\\\"'" + .[0] + "'\\\"'" + " --version-id " + .[1]' | xargs -L1 -t aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET
참고: 위 명령은 jq 도구를 사용하여 현재 버전 DeleteMarkers에 대한 ListObjectVersions 응답을 구문 분석합니다. 기본적으로 jq는 AWS CloudShell에 설치됩니다. 쉘 환경과 상호 작용하지 않으면 쉘 세션이 종료됩니다. jq 도구에 대한 자세한 내용은 jq 웹 사이트의 ./jq를 참조하십시오.
수백만 개의 객체에 있는 삭제 마커 제거
버킷에 있는 수백만 개의 객체에서 삭제 마커를 제거하려면 AWS SDK와 함께 사용자 지정 스크립트를 사용하십시오. 자세한 내용은 AWS SDK 사용 탭을 펼치십시오.
참고: 수백만 개의 객체가 있는 버킷에서 list-object-versions를 실행하면 시간이 초과될 수 있습니다.