다른 AWS 계정의 사용자가 Amazon Simple Storage Service(Amazon S3) 버킷에 객체를 업로드할 수 있도록 하고 싶습니다. 하지만 사용자가 나에게 해당 객체에 대한 완전한 제어 권한을 부여하도록 요구하고자 합니다. 어떻게 해야 합니까?
해결 방법
사용자가 버킷에 객체를 업로드할 때 bucket-owner-full-control 액세스 제어 목록(ACL)을 포함하도록 요구하는 버킷 정책을 추가합니다.
예를 들어, 이 버킷 정책은 객체의 ACL이 bucket-owner-full-control로 설정된 경우에만 ExampleUser가 DOC-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로 업로드된 새 객체가 자동으로 버킷의 계정에서 소유됩니다.
관련 정보
다른 AWS 계정에서 제 Amazon S3 버킷에 업로드한 객체에 액세스할 수 없는 이유는 무엇입니까?
버킷 소유자가 완전한 제어 권한을 가지도록 하면서 계정 간 객체 업로드 권한 부여
자습서: IAM 역할을 사용한 AWS 계정 간 액세스 권한 위임
ACL 권한과 액세스 정책 권한의 매핑