Amazon S3 버킷을 사용한 작업 - Amazon Simple Storage Service

Amazon S3 버킷을 사용한 작업

Amazon S3에 데이터(사진, 동영상, 문서 등)를 업로드하려면 우선 하나의 AWS 리전에 S3 버킷을 만들어야 합니다. 그런 다음 이 버킷에 객체를 얼마든지 업로드할 수 있습니다.

구현 측면에서 버킷과 객체는 리소스이고, Amazon S3는 이를 관리하기 위한 API를 제공합니다. 예를 들어 Amazon S3 API를 사용하여 버킷을 만들고 객체를 업로드할 수 있습니다. 이러한 작업은 Amazon S3 콘솔을 사용하여 수행할 수도 있습니다. 이 콘솔은 Amazon S3 API를 사용하여 Amazon S3에 요청을 보냅니다.

이 단원에서는 버킷을 사용을 사용하는 방법에 대해 설명합니다. 객체 작업에 대한 자세한 내용은 Amazon S3 객체로 작업을 참조하십시오.

Amazon S3 버킷 이름은 전역 수준에서 고유하며, 네임스페이스는 모든 AWS 계정이 공유합니다. 따라서 버킷이 생성된 후에는 해당 버킷이 삭제될 때까지 어떤 AWS 리전에서도 다른 AWS 계정이 해당 버킷 이름을 사용할 수 없습니다. 가용성 또는 보안 확인 목적을 위해 특정 버킷 명명 규칙에 의존하면 안 됩니다. 버킷 이름 지정 지침은 버킷 규제 및 제한을 참조하십시오.

Amazon S3은 사용자가 지정한 리전에 버킷을 만듭니다. 지연 시간을 최적화하고, 비용을 최소화하며, 규제 요건을 해결하려면 지리적으로 가까운 AWS 리전을 선택합니다. 예를 들어 유럽에 거주할 경우 유럽(아일랜드) 또는 유럽(프랑크푸르트) 리전에서 버킷을 생성하는 것이 유리할 수 있습니다. Amazon S3 리전 목록은 AWS 일반 참조리전 및 엔드포인트를 참조하십시오.

참고

특정 AWS 리전에서 만든 버킷에 속하는 객체는 명시적으로 다른 리전으로 보내지 않는 한 해당 리전을 벗어나지 않습니다. 예를 들어 유럽(아일랜드) 리전에 저장된 객체는 해당 리전을 벗어나지 않습니다.

버킷 생성

Amazon S3는 버킷을 만들고 관리할 수 있는 API를 제공합니다. 기본적으로 AWS 계정 각각에 대해 최대 100개의 버킷을 만들 수 있습니다. 버킷이 더 필요한 경우 서비스 한도 증가를 제출하여 계정버킷 한도 를 최대 1,000개의 버킷 으로 늘릴 수 있습니다. 버킷 한도 상승을 제출하는 방법은 AWS 일반 참조AWS 서비스 제한을 참조하십시오. 버킷에 저장할 수 있는 객체 수에는 제한이 없습니다.

버킷을 만들려면 버킷의 이름과 버킷을 만들려는 AWS 리전을 제공해야 합니다. 버킷 이름 지정에 대한 자세한 내용은 버킷 이름 지정 규칙을 참조하십시오.

아래 나열된 방법 중 하나를 사용하여 버킷을 만들 수 있습니다. 예제는 버킷 생성 예제을 참조하십시오.

Amazon S3 콘솔

Amazon S3 콘솔을 사용하여 버킷을 만들 수 있습니다. 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서버킷 생성을 참조하십시오.

REST API

REST API를 사용하여 버킷을 생성하는 방법은 요청 인증을 위한 코드를 작성해야 하므로 번거로울 수 있습니다. 자세한 내용은 Amazon Simple Storage Service API ReferencePUT 버킷을 참조하십시오. 대신 AWS Management 콘솔 또는 AWS SDK를 사용하는 것이 좋습니다.

AWS SDK

AWS SDK를 사용하여 버킷을 만드는 경우, 먼저 클라이언트를 만든 다음 이 클라이언트를 사용하여 버킷 생성 요청을 보냅니다. 클라이언트 또는 버킷을 만들 때 리전을 지정하지 않으면 Amazon S3는 기본 리전인 미국 동부(버지니아 북부)을 사용합니다. 또한 특정 리전을 지정할 수도 있습니다. 사용 가능한 AWS 리전 목록은 AWS General Reference리전 및 엔드포인트를 참조하십시오. AWS 리전 활성화 또는 비활성화에 대한 자세한 내용은 AWS General ReferenceAWS 리전 관리를 참조하십시오.

모범 사례로서, 동일한 리전에 클라이언트 및 버킷을 만들어야 합니다. 2019년 3월 20일 이후에 리전이 시작된 경우 클라이언트와 버킷이 동일한 리전에 있어야 합니다. 그러나 미국 동부(버지니아 북부) 리전의 클라이언트를 사용하여 2019년 3월 20일 이전에 시작된 모든 리전에 버킷을 생성할 수 있습니다. 자세한 내용은 레거시 엔드포인트 단원을 참조하십시오.

클라이언트 만들기

클라이언트를 생성할 때 클라이언트를 생성할 AWS 리전을 지정해야 합니다. 리전을 지정하지 않으면 Amazon S3는 기본 리전으로 미국 동부(버지니아 북부)에 버킷을 생성합니다. 클라이언트를 생성하여 듀얼 스택 엔드포인트에 액세스하려면 AWS 리전을 지정해야 합니다. 자세한 내용은 듀얼 스택 엔드포인트 단원을 참조하십시오.

클라이언트를 만들면 리전은 리전별 엔드포인트로 매핑됩니다. 클라이언트는 이 엔드포인트를 사용하여 Amazon S3와 통신합니다.

s3.<region>.amazonaws.com

예를 들어, eu-west-1 리전을 지정하여 클라이언트를 만들면 다음과 같이 리전별 엔드포인트로 매핑됩니다.

s3.eu-west-1.amazonaws.com

버킷 생성

버킷을 만들 때 리전을 지정하지 않으면 Amazon S3는 미국 동부(버지니아 북부) 리전에 버킷을 만듭니다. 따라서 특정 리전에 버킷을 생성하려는 경우에는 버킷을 생성할 때 리전을 지정해야 합니다.

2020년 9월 30일 이후에 생성된 버킷은 가상 호스팅 방식의 요청만 지원합니다. 이 날짜 당일 또는 이전에 생성된 버킷에 대해서는 경로 방식의 요청이 계속 지원됩니다. 자세한 내용은 Amazon S3 Path Deprecation Plan - The Rest of the Story를 참조하십시오.

권한 정보

AWS 계정 루트 자격 증명을 사용하여 버킷을 만들고 기타 Amazon S3 작업을 수행할 수 있습니다. 하지만 AWS는 AWS 계정의 루트 자격 증명을 사용하여 버킷 생성과 같은 요청을 하지 않을 것을 권장합니다. 대신 IAM 사용자를 만들고 이 사용자에게 모든 액세스 권한을 부여합니다(기본적으로 사용자는 권한이 없음). 이러한 사용자를 관리자 사용자라고 합니다. 자체 계정의 루트 자격 증명 대신 관리자 사용자 자격 증명을 사용하여 AWS와 연동하면서 버킷 생성, 사용자 생성, 권한 부여 등의 작업을 수행할 수 있습니다.

자세한 내용은 루트 계정 자격 증명 대 IAM 사용자 자격 증명(AWS 일반 참조)과 IAM 모범 사례(IAM 사용 설명서)를 참조하십시오.

리소스를 만든 AWS 계정은 해당 리소스의 소유자가 됩니다. 예를 들어, 자신의 AWS 계정에 IAM 사용자를 만들고 버킷을 만들 수 있는 사용자 권한을 부여하면, 이 사용자가 버킷을 만들 수 있습니다. 하지만 사용자는 버킷을 소유하지 않으며, 이 사용자가 속한 AWS 계정에서 버킷을 소유합니다. 사용자가 다른 버킷 작업을 수행하려면 리소스 소유자로부터 추가 권한을 받아야 합니다. Amazon S3 리소스 권한 관리에 대한 자세한 내용은 Amazon S3의 ID 및 액세스 관리 단원을 참조하십시오.

버킷에 대한 퍼블릭 액세스 관리

ACL(액세스 제어 목록), 버킷 정책 또는 둘 다를 통해 버킷 및 객체에 퍼블릭 액세스 권한이 부여됩니다. Amazon S3 리소스에 대한 퍼블릭 액세스를 관리할 수 있도록 Amazon S3는 퍼블릭 액세스 차단 설정을 제공합니다. Amazon S3 퍼블릭 액세스 차단 설정은 ACL 및 버킷 정책을 재정의하여 이러한 리소스에 대한 퍼블릭 액세스에 균일한 제한을 적용할 수 있도록 합니다. 개별 버킷 또는 계정의 모든 버킷에 퍼블릭 액세스 차단 설정을 적용할 수 있습니다.

모든 Amazon S3 버킷 및 객체의 퍼블릭 액세스가 차단되도록 하려면 계정에 대해 퍼블릭 액세스 차단 설정 4개를 모두 켜는 것이 좋습니다. 이러한 설정은 모든 현재 및 미래 버킷에 대한 퍼블릭 액세스를 차단합니다.

이 설정을 적용하기 전에 퍼블릭 액세스 없이 애플리케이션이 올바르게 작동하는지 확인합니다. 버킷 또는 객체에 대한 특정 수준의 퍼블릭 액세스가 필요한 경우(예를 들어 Amazon S3 정적 웹 사이트 호스팅에 설명된 대로 정적 웹 사이트를 호스팅하는 경우), 스토리지 사용 사례에 적합하도록 개별 설정을 사용자 지정할 수 있습니다. 자세한 내용은 Amazon S3 퍼블릭 액세스 차단 사용 단원을 참조하십시오.

버킷 액세스

Amazon S3 콘솔을 사용하여 버킷에 액세스할 수 있습니다. 콘솔 UI를 사용하여 코드를 작성하지 않고 거의 모든 버킷 작업을 수행할 수 있습니다.

프로그래밍 방식으로 버킷에 액세스할 경우 Amazon S3는 RESTful 아키텍처를 지원하며, 이 아키텍처에서 버킷과 객체는 리소스이고 각각 고유한 리소스 URI를 갖습니다.

Amazon S3는 버킷 액세스에 대해 가상 호스팅 방식과 경로 방식 URL을 모두 지원합니다. 버킷은 경로 방식과 가상 호스팅 방식의 URL을 사용하여 액세스할 수 있기 때문에 DNS를 준수하는 버킷 이름으로 버킷을 만드는 것이 좋습니다. 자세한 내용은 버킷 규제 및 제한 단원을 참조하십시오.

참고

가상 호스팅 스타일 및 경로 스타일 요청은 S3 점(.) 리전 엔드포인트 구조(s3.Region)를 사용합니다(예: https://my-bucket.s3.us-west-2.amazonaws.com). 그러나 일부 이전 Amazon S3 리전은 S3 대시(-) 리전 엔드포인트 s3-Region도 지원합니다(예: https://my-bucket.s3-us-west-2.amazonaws.com). 버킷이 이러한 리전 중 하나에 있는 경우 서버 액세스 로그 또는 CloudTrail 로그에 s3-Region 엔드포인트가 표시될 수 있습니다. 요청에 이 엔드포인트 구조를 사용하지 않는 것이 좋습니다.

가상 호스팅 방식 액세스

가상 호스팅 방식의 요청에서 버킷 이름은 URL에서 도메인 이름의 일부입니다.

Amazon S3 가상 호스팅 스타일 URL은 다음 형식을 따릅니다.

https://bucket-name.s3.Region.amazonaws.com/key name

이 예제에서 my-bucket은 버킷 이름이고, 미국 서부(오레곤)는 리전이며, puppy.png는 키 이름입니다.

https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png

가상 호스팅 방식 액세스에 대한 자세한 내용은 가상 호스팅 방식 요청 단원을 참조하십시오.

경로 방식 액세스

Amazon S3에서 경로 스타일 URL은 다음 형식을 따릅니다.

https://s3.Region.amazonaws.com/bucket-name/key name

예를 들어 미국 서부(오레곤) 리전에서 이름이 mybucket인 버킷을 생성하고 해당 버킷의 puppy.jpg 객체에 액세스하려는 경우 다음 경로 스타일 URL을 사용할 수 있습니다.

https://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg

자세한 내용은 경로 방식 요청 단원을 참조하십시오.

중요

2020년 9월 30일 이후에 생성된 버킷은 가상 호스팅 방식의 요청만 지원합니다. 이 날짜 당일 또는 이전에 생성된 버킷에 대해서는 경로 방식의 요청이 계속 지원됩니다. 자세한 내용은 Amazon S3 Path Deprecation Plan - The Rest of the Story를 참조하십시오.

IPv6을 통해 S3 버킷에 액세스

Amazon S3에는 인터넷 프로토콜 버전 6(IPv6) 및 IPv4 모두를 통해 S3 버킷에 요청하는 것을 지원하는 여러 개의 듀얼 스택 엔드포인트가 있습니다. 자세한 내용은 IPv6을 통해 요청 단원을 참조하십시오.

S3 액세스 포인트를 통해 버킷 액세스

버킷에 직접 액세스하는 것 외에도 S3 액세스 포인트를 통해 버킷에 액세스할 수 있습니다. S3 액세스 포인트에 대한 자세한 내용은 Amazon S3 액세스 포인트를 사용한 데이터 액세스 관리 단원을 참조하십시오.

S3 액세스 포인트는 가상 호스트 스타일의 주소 지정만 지원합니다. 액세스 포인트를 통해 버킷의 주소를 지정하려면 다음 형식을 사용합니다.

https://AccessPointName-AccountId.s3-accesspoint.region.amazonaws.com.
참고
  • 액세스 포인트 이름에 대시(-) 문자가 포함된 경우 URL에 대시를 포함시키고 계정 ID 앞에 다른 대시를 삽입합니다. 예를 들어 us-west-2 리전의 123456789012 계정에서 소유한 finance-docs라는 액세스 포인트를 사용하려면 해당 URL은 https://finance-docs-123456789012.s3-accesspoint.us-west-2.amazonaws.com입니다.

  • S3 액세스 포인트는 HTTP에 의한 액세스를 지원하지 않으며 HTTPS에 의한 보안 액세스만 지원합니다.

S3://를 사용하여 버킷 액세스

일부 AWS 서비스에서는 S3://bucket을 사용하여 Amazon S3 버킷을 지정해야 합니다. 올바른 형식이 아래에 나와 있습니다. 이 형식을 사용할 경우 버킷 이름에 리전이 포함되지 않습니다.

s3://bucket-name/key-name

예를 들어 앞의 경로 방식 단원에서 설명한 샘플 버킷을 사용하는 경우 다음과 같습니다.

s3://mybucket/puppy.jpg

버킷 구성 옵션

Amazon S3는 버킷을 구성하기 위한 다양한 옵션을 지원합니다. 예를 들어 웹 사이트 호스팅용으로 버킷을 구성하고, 버킷의 객체 수명 주기를 관리하는 구성을 추가하며, 버킷에 대한 모든 액세스를 로그로 기록하도록 버킷을 구성할 수 있습니다. Amazon S3는 버킷 구성 정보를 저장 및 관리할 수 있는 하위 리소스를 지원합니다. Amazon S3 API를 사용하여 이러한 하위 리소스를 만들고 관리할 수 있습니다. 하지만 콘솔이나 AWS SDK를 사용할 수도 있습니다.

참고

또한 객체 수준 구성도 제공됩니다. 예를 들어, 객체에 고유한 ACL(액세스 통제 목록)을 구성하여 객체 수준 권한을 구성할 수 있습니다.

이들 리소스는 특정 버킷이나 객체의 컨텍스트에 존재하므로 하위 리소스라고 합니다. 다음 표에는 버킷별 구성을 관리할 수 있는 하위 리소스가 나와 있습니다.

하위 리소스 설명

cors(cross-origin 리소스 공유)

cross-origin 요청을 허용하도록 버킷을 구성할 수 있습니다.

자세한 내용은 Cross-Origin 리소스 공유 활성화를 참조하십시오.

이벤트 알림

지정한 버킷 이벤트의 알림을 받도록 버킷을 설정할 수 있습니다.

자세한 내용은 Amazon S3 이벤트 알림 구성 단원을 참조하십시오.

수명 주기

버킷의 객체에 대해 명확한 수명 주기를 정의한 수명 주기 규칙을 정의할 수 있습니다. 예를 들어, 생성 후 1년이 지난 객체를 보관하거나, 10년이 지난 객체를 삭제하는 규칙을 정의할 수 있습니다.

자세한 내용은 객체 수명 주기 관리를 참조하십시오.

location

버킷을 만들려면 Amazon S3가 버킷을 생성할 AWS 리전을 지정해야 합니다. Amazon S3는 이 정보를 location 하위 리소스에 저장하고 이 정보를 검색하기 위한 API를 제공합니다.

logging

로깅을 사용하여 버킷에 대한 액세스 요청을 추적할 수 있습니다. 각 액세스 로그 레코드는 한 액세스 요청에 대한 세부 정보(요청자, 버킷 이름, 요청 시간, 요청 작업, 응답 상태, 오류 코드 등)를 제공합니다. 액세스 로그 정보는 보안 및 액세스 감사에 유용할 수 있습니다. 또한 고객층을 파악하고 Amazon S3 결제 요금을 확인할 수 있습니다.  

자세한 내용은 Amazon S3 서버 액세스 로깅 단원을 참조하십시오.

객체 잠금

S3 객체 잠금을 사용하려면 버킷에 대해 활성화합니다. 버킷에 있는 새 객체에 적용할 기본 보관 모드와 기간을 선택적으로 구성할 수도 있습니다.

자세한 내용은 버킷 구성 단원을 참조하십시오.

정책ACL(액세스 통제 목록)

모든 리소스(버킷과 객체)는 기본적으로 비공개입니다. Amazon S3는 버킷 수준 권한을 부여하고 관리할 수 있도록 버킷 정책과 ACL(액세스 제어 목록) 옵션을 모두 지원합니다. Amazon S3는 권한 정보를 policyacl 하위 리소스에 저장합니다.

자세한 내용은 Amazon S3의 ID 및 액세스 관리 단원을 참조하십시오.

복제

복제는 서로 다른 AWS 리전 또는 동일한 AWS 리전의 버킷 간에 객체를 비동기식으로 자동 복사하는 것을 말합니다. 자세한 내용은 복제 단원을 참조하십시오.

requestPayment

기본적으로 버킷에서의 다운로드에 대한 요금은 해당 버킷을 만든 AWS 계정(버킷 소유자)이 지불합니다. 버킷 소유자는 이 하위 리소스를 사용하여, 다운로드를 요청하는 사용자에게 다운로드 요금이 부과되도록 지정할 수 있습니다. Amazon S3는 이 하위 리소스를 관리하기 위한 API를 제공합니다.

자세한 내용은 요청자 지불 버킷 단원을 참조하십시오.

tagging

비용 할당 태그를 버킷에 추가하여 AWS 비용을 분류하고 추적할 수 있습니다. 버킷의 태그를 저장 및 관리하기 위해 Amazon S3는 tagging 하위 리소스를 제공합니다. AWS는 버킷에 적용된 태그를 사용하여 사용 내역 및 비용을 태그별로 집계한 비용 할당 보고서를 만듭니다.

자세한 내용은 S3 버킷에 대한 결제 및 사용 보고 단원을 참조하십시오.

전송 속도 향상

Transfer Acceleration은 거리가 먼 클라이언트와 S3 버킷 간에 파일을 빠르고, 쉽고, 안전하게 전송할 수 있게 해줍니다. Transfer Acceleration은 전 세계적으로 분산되어 있는 Amazon CloudFront의 엣지 로케이션을 활용합니다.

자세한 내용은 Amazon S3 Transfer Acceleration 단원을 참조하십시오.

버전 관리

버전 관리는 실수로 덮어쓰거나 삭제하는 경우 복구할 수 있도록 해주는 기능입니다.

실수로 객체를 잘못 삭제하거나 덮어쓰는 경우 이를 복구할 수 있도록 하기 위해 버전 관리 기능을 사용하는 것이 좋습니다.

자세한 내용은 버전 관리 사용 단원을 참조하십시오.

웹 사이트

버킷을 정적 웹 사이트 호스팅용으로 구성할 수 있습니다. Amazon S3는 website 하위 리소스를 만들어 이 구성을 저장합니다.

자세한 내용은 Amazon S3에서 정적 웹 사이트 호스팅을 참조하십시오.