다른 AWS 계정에서 제 Amazon S3 버킷에 객체를 업로드할 때 해당 객체의 전체 제어 권한을 부여하도록 요구하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 1월 5일

다른 AWS 계정의 사용자가 Amazon Simple Storage Service(Amazon S3) 버킷에 객체를 업로드할 수 있도록 하고 싶습니다. 하지만 사용자가 나에게 해당 객체에 대한 완전한 제어 권한을 부여하도록 요구하고자 합니다. 어떻게 해야 합니까?

해결 방법

사용자가 버킷에 객체를 업로드할 때 bucket-owner-full-control 액세스 제어 목록(ACL)을 포함하도록 요구하는 버킷 정책을 추가합니다.

예를 들어, 이 버킷 정책은 객체의 ACL이 bucket-owner-full-control로 설정된 경우에만 ExampleUserDOC-EXAMPLE-BUCKET에 객체를 업로드할 수 있도록 지정합니다.

{
    "Id": "Policy1541018284691",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1541018283275",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            },
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/ExampleUser"
                ]
            }
        }
    ]
}

사용자는 이 버킷 정책을 추가한 후에 다음과 같이 업로드 요청의 일부로서 필수 ACL을 포함해야 합니다.

aws s3 cp example.jpg s3://DOC-EXAMPLE-BUCKET --acl bucket-owner-full-control

사용자가 업로드 요청에서 ACL 요구 사항을 충족하지 못하면 "PutObject 작업을 호출할 때 오류가 발생했습니다(AccessDenied). 액세스 거부(An error occurred (AccessDenied) when calling the PutObject operation: Access Denied)"라는 오류 메시지가 나타납니다.

다른 계정이 소유하고 있는 버킷의 기존 객체의 경우, 객체 소유자는 put-object-acl 명령을 실행하여 사용자에게 완전한 제어 권한을 부여할 수 있습니다.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key example.jpg --acl bucket-owner-full-control

bucket-owner-full-control ACL은 버킷 소유자에게 다른 계정에서 업로드한 객체에 대한 모든 액세스 권한을 부여하지만 이 ACL만으로는 객체의 소유권을 부여하지 않습니다. bucket-owner-full-control ACL을 사용하여 업로드된 객체의 소유권을 자동으로 가져오려면 S3 객체 소유권을 원하는 버킷 소유자로 설정합니다. S3 객체 소유권을 업데이트하면 bucket-owner-full-control ACL로 업로드된 새 객체가 자동으로 버킷의 계정에서 소유됩니다.