Amazon S3에서 객체 ACL을 사용하는 사용 사례에는 어떤 것이 있나요?

최종 업데이트 날짜: 2021년 12월 21일

액세스 제어 목록(ACL)을 사용하여 내 Amazon Simple Storage Service(Amazon S3) 객체에 대한 액세스 권한을 위임하고 싶습니다. 객체 또는 버킷 ACL을 사용하는 사용 사례에는 어떤 것이 있나요?

해결 방법

Amazon S3 액세스 제어 목록(ACL)을 사용하면 S3 버킷 및 객체에 대한 액세스를 관리할 수 있습니다. 모든 S3 버킷과 객체에는 하위 리소스로서 연결된 ACL이 있습니다. ACL은 액세스 유형과 함께 액세스 권한이 부여되는 AWS 계정 또는 그룹을 정의합니다. 리소스에 대한 요청을 제출하면 Amazon S3는 해당 ACL을 확인하여 필요한 액세스 권한이 있는지 확인합니다.

객체 또는 버킷에 대한 액세스 권한이 부여된 대부분의 사용 사례에는 더 이상 ACL이 필요하지 않습니다. 그러나 경우에 따라 ACL을 사용하는 것이 더 적절할 수 있습니다. 예를 들어, 다음은 ACL을 사용하여 버킷 또는 객체 액세스를 관리해야 하는 경우에 대한 몇 가지 사용 사례입니다.

  • 객체 ACL은 버킷 소유자가 소유하지 않은 객체에 대한 액세스 권한을 부여하는 유일한 방법입니다. 기본적으로 다른 AWS 계정이 S3 버킷에 객체를 업로드하면 해당 계정(객체 작성자)이 객체를 소유합니다. 또한 객체 작성자는 객체에 대한 액세스 권한을 가지며, ACL을 사용하여 다른 사용자에게 객체에 대한 액세스 권한을 부여할 수 있습니다.
  • 객체 수준에서 사용 권한을 관리해야 하는 경우 객체 ACL을 사용할 수 있습니다. 예를 들어 전체 폴더에 대한 액세스 권한을 위임해야 하는 경우 버킷 정책을 사용할 수 있습니다. 그러나 객체에 따라 액세스 권한이 다른 경우 버킷 정책을 사용하여 개별 객체에 권한을 부여하는 것은 실용적이지 않을 수 있습니다. 따라서 객체 ACL이 객체 액세스를 관리하는 데 더 적합할 수 있습니다.
  • 다른 AWS 계정에 의해 사용자의 버킷에 작성된 새 객체를 사용자가 소유하려는 경우(ACL이 비활성화되지 않은 경우) 버킷 소유자의 기본 설정을 적용합니다. 이 설정을 사용하면 bucket-owner-full-control ACL로 작성된 새 객체를 (객체 작성자가 아니라) 버킷 소유자가 자동으로 소유합니다. 다른 모든 ACL 동작은 그대로 유지됩니다.
    참고: ACL을 비활성화하려면 S3 객체 소유권에 대한 버킷 소유자 적용 설정을 사용합니다. ACL이 비활성화되면 버킷 정책을 사용하여 서로 다른 AWS 계정에 의해 업로드된 (교차 계정) 객체가 있는 버킷을 쉽게 유지 관리할 수 있습니다. 사용자의 버킷이 S3 객체 소유권에 대해 버킷 소유자 적용 설정을 사용하는 경우 ACL 설정 또는 업데이트 요청이 실패하고 AccessControlListNotSupported 오류 코드가 반환됩니다. 하지만 ACL 읽기 요청은 계속 지원됩니다.
  • 버킷 ACL은 사용자의 버킷에 대해 특정 작업을 수행할 수 있는 권한을 Amazon CloudFront와 같은 AWS 서비스에 부여하는 데 사용할 수 있습니다. 예를 들어 CloudFront 배포를 생성 또는 업데이트하고 CloudFront 로깅을 활성화하면 CloudFront가 버킷 ACL을 업데이트합니다. 이 업데이트는 사용자의 버킷에 로그를 쓸 수 있는 FULL_CONTROL 권한을 awslogsdelivery 계정에 부여합니다. 자세한 내용은 표준 로깅을 구성하고 로그 파일에 액세스하는 데 필요한 권한을 참조하세요.

객체에 ACL 적용

예제 1

다른 AWS 계정에서 객체를 버킷에 업로드하는 경우 bucket-owner-full-control이라고 하는 미리 제공된 ACL을 사용합니다.

aws s3api put-object --bucket destination_bucket --key dir-1/myfile --body dir-1/myfile --acl bucket-owner-full-control

bucket-owner-full-control이라고 하는 미리 제공된 ACL은 버킷 소유자의 계정에 대한 액세스를 제공합니다.

참고: Amazon S3는 미리 제공된 ACL이라고 하는 사전 정의된 ACL 집합을 지원합니다(예: 이 예제에서는 bucket-owner-full-control ACL이 사용됨).

예제 2

객체 업로더는 ACL을 추가하여 다른 AWS 계정에 읽기 권한을 부여할 수도 있습니다.

aws s3api put-object --bucket destination_mybucket --key dir/myfile --body dir/myfile --grant-read emailaddress=user1@amazon.com,id=canonical-id-of-account

참고: 버지니아 북부, 캘리포니아 북부, 오레곤, 싱가포르, 시드니, 도쿄, 아일랜드 및 상파울루 AWS 리전에서는 이메일 주소만 사용하여 피부여자를 지정할 수 있습니다.

예제 3

기존 객체의 ACL을 업데이트할 수도 있습니다.

aws s3api put-object-acl --bucket destination_bucket --key dir/myfile --acl bucket-owner-full-control

예제 4

Amazon S3에는 사전 정의된 그룹 집합이 있습니다. 객체 ACL을 사용하여 이러한 사전 정의된 그룹에 속한 사용자에게 권한을 부여할 수 있습니다.

예를 들어 인증된 사용자(Authenticated Users) 그룹에 대한 액세스 권한을 부여해 인증된 AWS 사용자에게 객체 액세스 권한을 부여할 수 있습니다.

aws s3api put-object --bucket destination_mybucket --key dir/myfile --body dir/myfile --grant-read uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers

참고: 인증된 사용자(Authenticated Users) 그룹에 대한 액세스 권한을 부여하기 전에 계정 및 버킷 수준 모두에서 ACL에 대한 퍼블릭 액세스 차단(Block Public Access) 설정을 비활성화합니다. 그렇지 않으면 액세스 거부(Access Denied) 오류가 표시됩니다. ACL 관련 액세스 거부(Access Denied) 오류를 해결하려면 다음을 참조하세요. 내 Amazon S3 버킷에 객체를 추가할 수 있는 권한을 가진 사용자에게 액세스 거부 오류가 발생합니다. 그 이유는 무엇입니까?