버전 관리가 활성화된 버킷에서 삭제된 Amazon S3 객체를 검색하려면 어떻게 해야 하나요?

4분 분량
0

버전 관리가 활성화된 Amazon Simple Storage Service(S3) 버킷에서 삭제된 객체를 검색하려고 합니다. 어떻게 해야 하나요?

간략한 설명

버전 관리가 활성화된 버킷에서 객체를 삭제하면 Amazon S3가 해당 객체의 삭제 마커를 생성합니다. 그 삭제 마커가 객체의 최신 버전이 되고, 실제 객체는 이전 버전이 됩니다. 삭제 마커가 있으면, Amazon S3는 객체에 대한 요청에 객체가 삭제된 것처럼 응답합니다. 예를 들어 객체에 대한 GET 요청을 보내면 Amazon S3가 오류를 반환합니다.

다음 방법 중 하나로, 버전 관리가 활성화된 버킷에서 삭제된 객체를 검색할 수 있습니다.

  • 객체의 이전 버전 다운로드: 객체의 이전 버전(실제 객체)을 다운로드하려면 s3:GetObjectVersion 권한이 있어야 합니다.
  • 삭제 마커 제거: 삭제 마커를 제거하면 실제 객체가 객체의 최신 버전이 됩니다. 삭제 마커를 제거하려면 s3:DeleteObjectVersion 권한이 있어야 합니다. 또한 버킷을 소유하거나 생성한 AWS 계정을 사용하여 삭제 마커를 제거해야 합니다.
    참고: 버킷에 MFA 삭제가 활성화되어 있는 경우에는 지정된 다중 인증(MFA)을 사용하여 삭제 마커를 제거해야 합니다.

해결 방법

Amazon S3 콘솔을 사용하여 객체의 이전 버전 다운로드

1.    Amazon S3 콘솔을 엽니다.

2.    버킷 목록에서 삭제된 객체의 버킷을 엽니다.

3.    삭제된 객체의 폴더로 이동합니다.

4.    버전 표시를 켭니다.

5.    검색 창에 삭제된 객체의 이름을 입력합니다.

6.    객체의 이전 버전(삭제 마커가 아닌 실제 객체)을 선택합니다. **작업(Actions)**을 선택한 후 **다운로드(Download)**를 선택합니다.

AWS Command Line Interface(AWS CLI)를 사용하여 객체의 이전 버전 다운로드

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

1.    버킷에 대해 list-object-versions 명령을 실행합니다. DOC-EXAMPLE-BUCKET을 버킷의 이름으로 바꿉니다.

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt

참고: 이 예에는 결과를 지정된 키 이름 접두사로 필터링하는 --prefix 옵션이 포함되어 있습니다. 이 옵션을 사용하면 결과 수를 줄이므로 버킷에 많은 수의 객체 버전이 포함되어 있는 경우 시간이 절약됩니다.

2.    명령 출력에서 이전 객체 버전의 버전 ID(삭제 마커가 아닌 실제 객체)를 복사합니다.

3.    이전 단계에서 복사한 버전 ID에 대해 get-object 명령을 실행합니다. DOC-EXAMPLE-BUCKET을 버킷의 이름으로 바꿉니다.

aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj filename.txt

Amazon S3 콘솔을 사용하여 삭제 마커 제거

1.    삭제된 객체의 버킷을 소유하거나 생성한 AWS 계정에서 Amazon S3 콘솔을 엽니다.

2.    버킷 목록에서 삭제된 객체의 버킷을 엽니다.

3.    삭제된 객체의 폴더로 이동합니다.

4.    버전 표시를 켭니다.

5.    검색 창에 삭제된 객체의 이름을 입력합니다.

6.    객체의 삭제 마커를 선택합니다.

경고: 선택 항목을 신중하게 검토하여 삭제 마커인지 확인합니다. 삭제한 객체 버전은 검색할 수 없습니다.

7.    [Delete(삭제)]를 선택합니다.

8.    [객체 삭제] 페이지에서 올바른 삭제 마커가 나열되어 있는지 확인합니다. 그런 다음 영구 삭제를 입력하여 삭제를 확인합니다.

9.    [객체 삭제(Delete objects)]를 선택합니다.

중요: Amazon S3 콘솔을 사용하여 폴더의 삭제를 취소할 수 없습니다. 이렇게 하려면 AWS CLI 또는 AWS SDK를 사용해야 합니다.

AWS CLI를 사용하여 삭제 마커 제거

여러 객체에서 삭제 마커 제거

1.    다음 --query 파라미터를 사용하여 list-object-versions 명령을 실행합니다. DOC-EXAMPLE-BUCKET을 버킷의 이름으로 바꿉니다.

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt --query 'DeleteMarkers[?IsLatest==`true`]'

참고: 다음 예제 명령에는 지정된 키 이름 접두사로 결과를 필터링하는 --prefix 옵션이 포함되어 있습니다. 이 옵션을 사용하면 결과 수를 줄이므로 버킷에 많은 수의 객체 버전이 포함되어 있는 경우 시간이 절약됩니다.

2.    이 명령은 버킷에서 삭제된 모든 객체를 반환합니다. 명령 출력에서 검색하려는 객체의 삭제 마커의 버전 ID를 복사합니다.

경고: 버전 ID를 신중하게 검토하여 삭제 마커의 버전 ID인지 확인하세요. 삭제한 객체 버전은 검색할 수 없습니다.

3.    이전 단계에서 복사한 버전 ID에 대해 delete-object 명령을 실행합니다. DOC-EXAMPLE-BUCKET을 버킷의 이름으로 바꿉니다.

aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'

4.    삭제 마커를 제거하면 버킷의 객체를 나열할 때 실제 객체가 반환됩니다. 삭제 마커가 제거되었는지 확인하려면 ls 명령을 실행합니다. DOC-EXAMPLE-BUCKET을 버킷의 이름으로 바꿉니다.

aws s3 ls s3://DOC-EXAMPLE-BUCKET

수천 개의 객체에서 삭제 마커 제거

1.    AWS CloudShell로 이동합니다.

2.    다음 AWS CLI 명령을 실행합니다. DOC-EXAMPLE-BUCKET을 버킷의 이름으로 바꿉니다.

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 aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET

참고: 이 예에서는 GitHub의 JQ 도구를 사용하여 현재 버전 DeleteMarkers에 대한 ListObjectVersions 응답을 구문 분석합니다. 특정 사용 사례에 따라 이 사용자 지정 스크립트 예제를 변경할 수 있습니다. 기본적으로 JQ는 AWS CloudShell에 설치됩니다. 셸 환경과 상호 작용하지 않으면 셸 세션이 종료됩니다.

수백만 개의 객체에서 삭제 마커 제거

버킷에 수백만 개의 객체가 있는 경우 LIST 호출을 수행하는 데 많은 비용이 소요되므로 시간이 초과될 수 있습니다. 따라서 AWS SDK에서 사용자 지정 스크립트를 사용하는 것이 좋습니다.


AWS 공식
AWS 공식업데이트됨 일 년 전