Amazon S3 버킷에서 퍼블릭 소유 객체(익명)의 소유권을 변경하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 23일

Amazon Simple Storage Service(Amazon S3) 버킷에 퍼블릭(익명) 소유권이 있는 객체가 있습니다. 내 AWS 계정이 객체를 소유하도록 객체의 소유권을 변경하려면 어떻게 해야 합니까?

간략한 설명

기본적으로 Amazon S3 객체는 객체를 업로드한 자격 증명이 소유합니다. 즉, 버킷에 대한 퍼블릭 쓰기 액세스를 허용하면 퍼블릭(익명) 사용자가 업로드한 객체를 공개적으로 소유합니다. 보안 문제를 방지하기 위한 모범 사례는 버킷에 대한 퍼블릭 액세스를 차단하는 것입니다.

익명 사용자가 객체를 버킷에 이미 업로드한 경우 객체 소유권을 변경하려면 객체의 ACL을 수정해야 합니다. 객체의 ACL을 변경하여 버킷 소유자(사용자 AWS 계정)에게 객체에 대한 모든 권한을 부여합니다.

참고: Amazon S3 객체 소유권을 사용하여 다른 AWS 계정에서 업로드한 객체의 소유권을 제어할 수도 있습니다.

해결 방법

다음 단계에 따라 객체의 소유권을 버킷을 소유한 AWS 계정으로 변경합니다.

1.    객체 ACL을 추가하려면 AWS 명령줄 인터페이스(AWS CLI)를 사용하여 put-object-acl 명령을 실행합니다. 버킷 소유자에게 객체에 대한 제어 권한을 부여하는 ACL을 추가하려면 bucket-owner-full-control 값과 함께 -acl 옵션을 포함합니다. 그런 다음 -no-sign-request 옵션을 포함하여 요청에 대한 익명 자격 증명을 사용합니다. 필요한 옵션이 포함된 전체 put-object-acl 명령은 다음과 비슷합니다.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject  --acl bucket-owner-full-control   --no-sign-request

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

2.    소유권 변경을 적용하려면 객체를 그 자체에 복사해야 합니다. 다음과 유사한 cp 명령을 실행하여 이 작업을 수행할 수 있습니다.

aws s3 cp s3://DOC-EXAMPLE-BUCKET/awsexampleobject  s3://DOC-EXAMPLE-BUCKET/awsexampleobject --storage-class STANDARD

참고: 예제 명령에서 --storage class 값을 사용 사례에 적용할 수 있는 스토리지 클래스로 변경해야 합니다. 또한 객체에 필요한 다른 cp 명령 옵션을 포함해야 합니다.

3.    소유권 변경을 확인하려면 다음과 같이 get-object-acl 명령을 실행합니다.

aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject

명령은 다음과 유사하게 객체의 소유자를 표시하는 출력을 반환합니다.

{
    "Owner": {
        "DisplayName": "jane",
        "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099"
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "jane",
                "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        }]}

4.    버킷에서 버전 관리를 활성화한 경우 2단계의 cp 명령에서 생성된 객체의 이전 버전도 삭제해야 합니다. 이전 객체 버전에는 퍼블릭(익명) 소유권이 있습니다. 이 객체 버전을 삭제하려면 먼저 버킷에서 list-object-version 명령을 실행합니다. 명령의 —prefix 옵션을 포함하여 퍼블릭 소유권이 있는 객체로 결과를 필터링합니다.

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

명령 출력에서 퍼블릭 소유권이 있는 객체 버전의 버전 ID를 복사합니다. 그런 다음 삭제하려는 버전 ID에 대해 delete-object 명령을 실행합니다.

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

경고: 버전 ID를 신중하게 검토하여 퍼블릭 소유권이 있는 객체 버전의 버전 ID가 맞는지 확인하세요. 삭제한 객체 버전은 검색할 수 없습니다.