버킷 소유자 조건을 사용하여 버킷 소유권 확인 - Amazon Simple Storage Service

버킷 소유자 조건을 사용하여 버킷 소유권 확인

Amazon S3 버킷 소유자 조건은 S3 작업에 사용하는 버킷이 예상한 AWS 계정에 속하도록 보장합니다.

대부분의 S3 작업은 특정 S3 버킷에서 읽거나 씁니다. 이러한 작업에는 객체 업로드, 복사 및 다운로드, 버킷 구성 검색 또는 수정, 객체 구성 검색 또는 수정 등이 포함됩니다. 이러한 작업을 수행할 때 요청에 버킷의 이름을 포함하여 사용할 버킷을 지정합니다. 예를 들어 S3에서 객체를 검색하려면 버킷의 이름과 해당 버킷에서 검색할 객체 키를 지정하는 요청을 합니다.

Amazon S3은 버킷 이름을 기반으로 버킷을 식별하기 때문에 요청에 잘못된 버킷 이름을 사용할 경우 애플리케이션이 실수로 예상과 다른 버킷에 대해 작업을 수행할 수 있습니다. 이와 같은 상황에서 의도하지 않은 버킷 상호 작용을 피하기 위해 버킷 소유자 조건을 사용할 수 있습니다. 버킷 소유자 조건을 사용하면 대상 버킷이 예상되는 AWS 계정에 속해 있는지 확인할 수 있으므로 S3 작업이 의도한 영향을 받는지 확인할 수 있습니다.

버킷 소유자 조건을 사용해야 하는 경우

예상되는 버킷 소유자의 계정 ID를 알고 있으면서 지원되는 S3 작업을 수행할 때마다 버킷 소유자 조건을 사용하는 것이 좋습니다. 버킷 소유자 조건은 모든 S3 객체 작업과 대부분의 S3 버킷 작업에 사용할 수 있습니다. 버킷 소유자 조건을 지원하지 않는 S3 작업 목록은 규제 및 제한 단원을 참조하십시오.

버킷 소유자 조건 사용의 이점을 확인하려면 AWS 고객 Bea에 대한 다음 시나리오를 고려하십시오.

  1. Bea가 Amazon S3을 사용하는 애플리케이션을 개발합니다. Bea가 개발 중 테스트 전용 AWS 계정을 사용하여 bea-data-test라는 버킷을 생성하고 bea-data-test에 요청하도록 애플리케이션을 구성합니다.

  2. Bea가 애플리케이션을 배포하면서 깜빡 잊고 프로덕션 AWS 계정에서 버킷을 사용하도록 애플리케이션을 재구성하지 않습니다.

  3. 프로덕션 환경에서 Bea의 애플리케이션이 bea-data-test에 요청하고 이 요청이 성공합니다. 이로 인해 프로덕션 데이터가 Bea의 테스트 계정에 있는 버킷에 기록됩니다.

Bea는 버킷 소유자 조건을 사용하여 이와 같은 상황으로부터 보호할 수 있습니다. 버킷 소유자 조건을 사용할 경우 Bea는 요청에 예상 버킷 소유자의 AWS 계정 ID를 포함할 수 있습니다. 그러면 Amazon S3에서 각 요청을 처리하기 전에 버킷 소유자의 계정 ID를 확인합니다. 실제 버킷 소유자가 예상 버킷 소유자와 일치하지 않으면 요청이 실패합니다.

Bea가 버킷 소유자 조건을 사용할 경우 앞에서 설명한 시나리오에서 Bea의 애플리케이션이 실수로 테스트 버킷에 기록하는 것을 방지할 수 있습니다. 대신, 3단계에서 수행한 애플리케이션의 요청이 실패하며 Access Denied 오류 메시지가 표시됩니다. Bea는 버킷 소유자 조건을 사용하여 잘못된 AWS 계정의 버킷과 실수로 상호 작용할 위험을 없앨 수 있습니다.

버킷 소유자 확인

버킷 소유자 조건을 사용하려면 요청에 예상 버킷 소유자를 지정하는 파라미터를 포함해야 합니다. 대부분의 S3 작업에는 단일 버킷만 포함되며 버킷 소유자 조건을 사용하려면 이 단일 파라미터만 필요합니다. CopyObject 작업의 경우 이 첫 번째 파라미터는 대상 버킷의 예상 소유자를 지정하며, 원본 버킷의 예상 소유자를 지정하려면 두 번째 파라미터를 포함합니다.

버킷 소유자 조건 파라미터를 포함하는 요청을 하면 S3은 요청을 처리하기 전에 지정된 파라미터와 비교하여 버킷 소유자의 계정 ID를 확인합니다. 파라미터가 버킷 소유자의 계정 ID와 일치하면 S3이 요청을 처리합니다. 파라미터가 버킷 소유자의 계정 ID와 일치하지 않으면 요청이 실패하고 Access Denied 오류 메시지가 표시됩니다.

AWS Command Line Interface(AWS CLI), AWS SDK 및 Amazon S3 REST API에서 버킷 소유자 조건을 사용할 수 있습니다. AWS CLI 및 Amazon S3 REST API에서 버킷 소유자 조건을 사용하는 경우 다음 파라미터 이름을 사용합니다.

액세스 방법 비복사 작업에 대한 파라미터 복사 작업 원본 파라미터 복사 작업 대상 파라미터
AWS CLI --expected-bucket-owner --expected-source-bucket-owner --expected-bucket-owner
Amazon S3 REST API x-amz-expected-bucket-owner 헤더 x-amz-source-expected-bucket-owner 헤더 x-amz-expected-bucket-owner 헤더

AWS SDK에서 버킷 소유자 조건을 사용하는 데 필요한 파라미터 이름은 언어에 따라 다릅니다. 필요한 파라미터를 확인하려면 원하는 언어에 대한 SDK 설명서를 참조하십시오. SDK 설명서는 AWS에서의 구축을 위한 도구에서 찾을 수 있습니다.

다음 예제에서는 AWS CLI 또는 AWS SDK for Java 2.x를 사용하여 Amazon S3에 버킷 소유자 조건을 구현하는 방법을 보여 줍니다.

예제: 객체 업로드

다음 예제에서는 버킷 소유자 조건을 사용하여 객체를 S3 버킷 DOC-EXAMPLE-BUCKET1에 업로드함으로써 AWS 계정 111122223333DOC-EXAMPLE-BUCKET1을 소유하는지 확인합니다.

AWS CLI
aws s3api put-object \ --bucket DOC-EXAMPLE-BUCKET1 --key exampleobject --body example_file.txt \ --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void putObjectExample() { S3Client s3Client = S3Client.create();; PutObjectRequest request = PutObjectRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .key("exampleobject") .expectedBucketOwner("111122223333") .build(); Path path = Paths.get("example_file.txt"); s3Client.putObject(request, path); }

예제: 객체 복사

다음 예제에서는 S3 버킷 DOC-EXAMPLE-BUCKET1에서 S3 버킷 DOC-EXAMPLE-BUCKET2object1 객체를 복사합니다. 버킷 소유자 조건을 사용하여 버킷이 다음 표에 따라 예상 계정에 속해 있는지 확인합니다.

버킷 예상 소유자
DOC-EXAMPLE-BUCKET1 111122223333
DOC-EXAMPLE-BUCKET2 444455556666
AWS CLI
aws s3api copy-object --copy-source DOC-EXAMPLE-BUCKET1/object1 \ --bucket DOC-EXAMPLE-BUCKET2 --key object1copy \ --expected-source-bucket-owner 111122223333 --expected-bucket-owner 444455556666
AWS SDK for Java 2.x
public void copyObjectExample() { S3Client s3Client = S3Client.create(); CopyObjectRequest request = CopyObjectRequest.builder() .copySource("DOC-EXAMPLE-BUCKET1/object1") .destinationBucket("DOC-EXAMPLE-BUCKET2") .destinationKey("object1copy") .expectedSourceBucketOwner("111122223333") .expectedBucketOwner("444455556666") .build(); s3Client.copyObject(request); }

예제: 버킷 정책 검색

다음 예제에서는 버킷 소유자 조건을 사용하여 S3 버킷 DOC-EXAMPLE-BUCKET1에 대한 액세스 정책을 검색함으로써 AWS 계정 111122223333DOC-EXAMPLE-BUCKET1을 소유하는지 확인합니다.

AWS CLI
aws s3api get-bucket-policy --bucket DOC-EXAMPLE-BUCKET1 --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void getBucketPolicyExample() { S3Client s3Client = S3Client.create(); GetBucketPolicyRequest request = GetBucketPolicyRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .expectedBucketOwner("111122223333") .build(); try { GetBucketPolicyResponse response = s3Client.getBucketPolicy(request); } catch (S3Exception e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } }

규제 및 제한

Amazon S3 버킷 소유자 조건에는 다음과 같은 규제 및 제한이 있습니다.

  • 버킷 소유자 조건 파라미터의 값은 AWS 계정 ID(12자리 숫자 값)여야 합니다. 서비스 보안 주체는 지원되지 않습니다.

  • 버킷 소유자 조건은 CreateBucket, ListBuckets 또는 AWS S3 제어에 포함된 모든 작업에서 사용할 수 없습니다. Amazon S3은 이러한 작업에 대한 요청에 포함된 모든 버킷 소유자 조건 파라미터를 무시합니다.

  • 버킷 소유자 조건은 확인 파라미터에 지정된 계정이 버킷을 소유하고 있는지만 확인하며 버킷의 구성은 확인하지 않습니다. 또한 버킷의 구성이 특정 조건을 충족하거나 과거 상태와 일치함을 보장하지 않습니다.