다른 AWS 계정의 사용자가 내 Amazon Simple Storage Service(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 요구 사항을 충족하지 못하면 다음과 같은 오류 메시지가 표시됩니다.
"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로 업로드되는 모든 새 객체를 자동으로 소유합니다.
관련 정보
다른 AWS 계정에서 Amazon S3 버킷에 업로드한 객체에 액세스할 수 없는 이유는 무엇인가요?
미리 준비된 ACL을 사용한 버킷 관리
IAM 자습서: IAM 역할을 사용하여 AWS 계정 전체에 대한 액세스 위임
ACL 권한 및 액세스 정책 권한 매핑