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

최종 업데이트 날짜: 2019년 4월 26일

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

​해결 방법

다른 계정의 사용자가 사용자(버킷 소유자)에게 객체의 제어 권한을 완전히 부여할 때만 이들에게 객체를 버킷에 넣을 수 있는 권한을 부여하는 버킷 정책을 추가하십시오.

예를 들어, 이 버킷 정책은 객체의 ACL(액세스 제어 목록)이 bucket-owner-full-control로 설정된 경우에만 ExampleUserawsexamplebucket에 객체를 업로드할 수 있도록 지정합니다.

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

사용자는 이 버킷 정책을 추가한 후에 다음과 같이 업로드 요청의 일부로서 객체의 ACL을 bucket-owner-full-control로 설정해야 합니다.

aws s3 cp example.jpg s3://awsexamplebucket --acl bucket-owner-full-control

사용자가 업로드 요청에서 ACL 요구 사항을 충족하지 못하면 "An error occurred (AccessDenied) when calling the PutObject operation: Access Denied"라는 오류 메시지가 나타납니다.

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

aws s3api put-object-acl --bucket awsexamplebucket --key example.jpg --acl bucket-owner-full-control