버킷의 가상 호스팅 - Amazon Simple Storage Service

새로운 Amazon S3 사용 설명서에 오신 것을 환영합니다! Amazon S3 사용 설명서에는 사용 중지된 세 가지 설명서(Amazon S3 개발자 안내서, Amazon S3 콘솔 사용 설명서, Amazon S3 시작 안내서)에 나온 정보와 지침이 통합되어 있습니다.

버킷의 가상 호스팅

가상 호스팅은 한 웹 서버에 있는 여러 웹 사이트에 서비스를 제공하는 기능입니다. 사이트를 구분하는 한 가지 방법은 URI의 경로 이름 부분 대신 요청의 명백한 호스트 이름을 사용하는 것입니다. 일반적인 Amazon S3 REST 요청은 요청-URI 경로의 슬래시로 구분된 구성 요소를 사용하여 버킷을 지정합니다. 또는 Amazon S3 가상 호스팅을 통해 HTTP Host 헤더를 사용하여 REST API 호출 버킷을 처리할 수 있습니다. 실제로 Amazon S3은 Host의 의미를 https://bucketname.s3.Region.amazonaws.com에서 대부분의 버킷이 제한된 요청 유형에 대해 자동으로 액세스가 가능하다고 해석합니다. Amazon S3 리전 및 엔드포인트의 전체 목록은 AWS 일반 참조에서 Amazon S3 엔드포인트 및 할당량을 참조하세요.

가상 호스팅에는 다른 이점도 있습니다. 또한 등록된 도메인 이름 뒤에 버킷 이름을 지정하고 해당 이름을 Amazon S3용 DNS 별칭으로 만들어 Amazon S3 리소스의 URL을 http://my.bucketname.com/처럼 완전하게 사용자 지정할 수 있습니다. 또한 버킷의 가상 서버에 있는 “루트 디렉터리”에 게시할 수도 있습니다. 이 기능은 기존의 많은 애플리케이션이 이 표준 위치에서 파일을 검색하기 때문에 중요할 수 있습니다. 예를 들어, favicon.ico, robots.txt, crossdomain.xml은 모두 루트에서 검색될 수 있습니다.

중요

SSL과 함께 가상 호스팅 방식의 버킷을 사용할 경우, SSL 와일드카드 인증서는 점(“.”)을 포함하지 않는 버킷에만 매핑됩니다. 이 문제를 해결하려면 HTTP를 사용하거나, 인증서 확인 로직을 직접 작성합니다. 자세한 내용은 Amazon S3 경로 사용 중지 계획을 참조하세요.

경로 방식 요청

현재 Amazon S3에서는 모든 리전에서 가상 호스팅 방식의 액세스와 경로 방식의 액세스를 지원하지만 변경될 예정입니다(다음 중요 참조).

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월 23일) - 고객이 가상 호스팅 방식의 URL로 전환하는 데 필요한 시간을 확보할 수 있도록 경로 방식 URL의 사용 중지를 연기하기로 결정했습니다. 자세한 내용은 AWS 뉴스 블로그에서 Amazon S3 경로 사용 중지 계획 - 나머지 이야기를 참조하세요.

가상 호스팅 방식 요청

가상 호스팅 방식의 URI에서 버킷 이름은 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

HTTP 호스트 헤더 버킷 사양

GET 요청이 SSL 엔드포인트를 사용하지 않는 한 HTTP Host 헤더를 사용하여 요청에 대한 버킷을 지정할 수 있습니다. REST 요청의 Host 헤더는 다음과 같이 해석됩니다.

  • Host 헤더가 생략되었거나 그 값이 s3.Region.amazonaws.com이면, 요청 버킷은 요청-URI의 슬래시로 구분된 첫 번째 구성 요소가 되고 요청 키는 요청-URI의 나머지 부분이 됩니다. 이는 일반적인 메서드로 이 단원의 첫 번째 예제와 두 번째 예제에 나와 있습니다. 호스트 헤더를 생략하는 것은 HTTP 1.0 요청에만 유효합니다.

  • 또는 Host 헤더 값이 .s3.Region.amazonaws.com으로 끝나는 경우 버킷 이름이 Host 헤더 값에서 .s3.Region.amazonaws.com까지의 선행 구성 요소가 됩니다. 요청에 대한 키는 요청-URI입니다. 이 해석은 이 단원의 세 번째와 네 번째 예제에 나와 있는 것처럼 버킷을 .s3.Region.amazonaws.com의 하위 도메인으로 표시합니다.

  • 그렇지 않은 경우 요청에 대한 버킷은 Host 헤더의 소문자 값이며 요청에 대한 키는 요청-URI입니다. 이 해석은 버킷 이름과 동일한 DNS 이름을 등록하고 이 이름을 Amazon S3용 CNAME 별칭으로 구성한 경우에 유용합니다. 도메인 이름 등록 및 DNS 구성 절차는 본 가이드에서 다루지 않지만, 이 단원의 마지막 예제에 나와 있습니다.

예제

이 단원은 예제 URL 및 요청을 제공합니다.

예 경로 방식

이 예에서는 다음을 사용합니다.

  • 버킷 이름 ‐ awsexamplebucket1.net

  • 리전 - 미국 동부(버지니아 북부)

  • 키 이름 ‐ homepage.html

URL은 다음과 같습니다.

http://s3.us-east-1.amazonaws.com/awsexamplebucket1.net/homepage.html

요청은 다음과 같습니다.

GET /awsexamplebucket1.net/homepage.html HTTP/1.1 Host: s3.us-east-1.amazonaws.com

HTTP 1.0을 사용한 요청 및 host 헤더 생략은 다음과 같습니다.

GET /awsexamplebucket1.net/homepage.html HTTP/1.0

DNS를 준수하는 이름에 대한 자세한 내용은 제한 사항을 참조하십시오. 키에 대한 자세한 내용은 를 참조하십시오.

예 가상 호스팅 방식

이 예에서는 다음을 사용합니다.

  • 버킷 이름 ‐ awsexamplebucket1.eu

  • 리전 ‐ 유럽(아일랜드)

  • 키 이름 ‐ homepage.html

URL은 다음과 같습니다.

http://awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com/homepage.html

요청은 다음과 같습니다.

GET /homepage.html HTTP/1.1 Host: awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com

예 CNAME 메서드

이 메서드를 사용하려면 DNS 이름을 bucketname.s3.us-east-1.amazonaws.com의 CNAME 별칭으로 구성해야 합니다. 자세한 내용은 CNAME을 사용하여 Amazon S3 URL 사용자 지정 단원을 참조하세요. 이 예에서는 다음을 사용합니다.

  • 버킷 이름 ‐ awsexamplebucket1.net

  • 키 이름 ‐ homepage.html

URL은 다음과 같습니다.

http://www.awsexamplebucket1.net/homepage.html

예제는 다음과 같습니다.

GET /homepage.html HTTP/1.1 Host: www.awsexamplebucket1.net

CNAME을 사용하여 Amazon S3 URL 사용자 지정

필요에 따라 웹 사이트 또는 서비스에 s3.Region.amazonaws.com이 표시되지 않게 할 수도 있습니다. 예를 들어 Amazon S3에 웹 사이트 이미지를 호스팅할 경우 http://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/ 대신 http://images.awsexamplebucket1.net/을 선호할 수 있습니다. DNS를 준수하는 이름의 버킷은 http://BucketName.s3.Region.amazonaws.com/[Filename]과 같이 참조될 수 있습니다(예: http://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/mydog.jpg). CNAME을 사용하여 images.awsexamplebucket1.net을 Amazon S3 호스트 이름으로 매핑함으로써 이전 URL이 http://images.awsexamplebucket1.net/mydog.jpg가 될 수 있습니다.

버킷 이름은 CNAME과 동일해야 합니다. 예를 들어 images.awsexamplebucket1.netimages.awsexamplebucket1.net.s3.us-east-1.amazonaws.com으로 매핑하기 위한 CNAME을 만드는 경우 http://images.awsexamplebucket1.net/filenamehttp://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/filename은 모두 동일합니다.

CNAME DNS 레코드는 도메인 이름으로 적절한 가상 호스팅 방식 호스트 이름의 별칭을 사용해야 합니다. 예를 들어 버킷 이름과 도메인 이름이 images.awsexamplebucket1.net이고 버킷이 미국 동부(버지니아 북부) 리전에 있는 경우, CNAME 레코드의 별칭은 images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com으로 지정되어야 합니다.

images.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com.

Amazon S3은 호스트 이름을 사용하여 버킷 이름을 확인합니다. 따라서 CNAME과 버킷 이름은 동일해야 합니다. 예를 들어, www.example.comwww.example.com.s3.us-east-1.amazonaws.com. http://www.example.com을 액세스하는 경우, Amazon S3은 다음과 같은 요청을 받습니다.

GET / HTTP/1.1 Host: www.example.com Date: date Authorization: signatureValue

Amazon S3은 원래 호스트 이름 www.example.com만 볼 수 있으며 요청을 해결하는 데 사용한 CNAME 매핑을 알지 못합니다.

모든 Amazon S3 엔드포인트는 CNAME에서 사용할 수 있습니다. 예를 들어, s3.ap-southeast-1.amazonaws.com은 CNAME에서 사용될 수 있습니다. 엔드포인트에 대한 자세한 내용은 요청 엔드포인트를 참조하십시오.

CNAME을 사용하여 호스트 이름과 Amazon S3 버킷을 연결하려면

  1. 제어하는 도메인에 속한 호스트 이름을 선택합니다.

    이 예제는 images 도메인의 awsexamplebucket1.net 하위 도메인을 사용합니다.

  2. 호스트 이름과 일치하는 버킷을 만듭니다.

    이 예제에서 호스트 및 버킷 이름은 images.awsexamplebucket1.net입니다. 버킷 이름은 호스트 이름과 정확하게 일치해야 합니다.

  3. Amazon S3 버킷에 대한 별칭으로 호스트 이름을 정의하는 CNAME 레코드를 만듭니다.

    예:

    images.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-west-2.amazonaws.com

    중요

    요청 라우팅으로 인해, CNAME 레코드는 앞의 예제에 나와 있는 것처럼 정확하게 정의해야 합니다. 그렇지 않은 경우 제대로 작동하는 것처럼 보일 수 있으나 결국 예기치 않은 동작이 발생합니다.

    DNS를 구성하는 절차는 해당 DNS 서버나 DNS 공급자에 따라 다릅니다. 자세한 내용은 서버 설명서를 참조하거나, 제공자에게 문의하십시오.

제한 사항

HTTP를 통한 SOAP 지원은 중단되었지만 HTTPS를 통해 계속해서 사용할 수 있습니다. 새로운 Amazon S3 기능은 SOAP에 대해 지원되지 않습니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

이전 버전과의 호환성

레거시 엔드포인트

일부 리전에서 레거시 엔드포인트를 지원합니다. 서버 액세스 로그 또는 CloudTrail 로그에 이러한 엔드포인트가 표시될 수 있습니다. 자세한 내용은 아래 정보를 검토하세요. Amazon S3 리전 및 엔드포인트의 전체 목록은 AWS 일반 참조에서 Amazon S3 엔드포인트 및 할당량을 참조하세요.

중요

로그에 레거시 엔드포인트가 표시될 수도 있지만 항상 표준 엔드포인트 구문을 사용하여 버킷에 액세스하는 것이 좋습니다.

Amazon S3 가상 호스팅 방식 URL은 다음 형식을 사용합니다.

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

Amazon S3에서 경로 방식 URL은 다음 형식을 사용합니다.

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

s3‐리전

일부 이전 Amazon S3 리전에서는 S3과 리전 사이에 점이 있는 엔드포인트(예: S3.us-west-2) 대신 대시가 있는 엔드포인트(예: S3‐us-west-2)를 지원합니다. 버킷이 이러한 리전 중 하나에 있는 경우, 서버 액세스 로그 또는 CloudTrail 로그에 다음과 같은 엔드포인트 형식이 표시될 수 있습니다.

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

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

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

레거시 전역 엔드포인트

일부 리전에서는 레거시 전역 엔드포인트를 사용하여 리전별 엔드포인트를 지정하지 않는 요청을 구성할 수 있습니다. 레거시 전역 엔드포인트 지점은 다음과 같습니다.

bucket-name.s3.amazonaws.com

레거시 전역 엔드포인트를 사용하는 요청이 서버 액세스 로그 또는 CloudTrail 로그에 표시될 수 있습니다. 이 예제에서 버킷 이름은 my-bucket이며 레거시 전역 엔드포인트가 표시됩니다.

https://my-bucket.s3.amazonaws.com

미국 동부(버지니아 북부)에 대한 가상 호스팅 방식의 요청

레거시 전역 엔드포인트를 사용한 요청은 기본적으로 미국 동부(버지니아 북부)로 이동합니다. 따라서 레거시 전역 엔드포인트는 미국 동부(버지니아 북부)에 대한 리전 엔드포인트 대신 사용되기도 합니다. 미국 동부(버지니아 북부)에 버킷을 생성하고 전역 엔드포인트를 사용하는 경우 Amazon S3은 기본적으로 요청을 이 리전으로 라우팅합니다.

다른 리전에 대한 가상 호스팅 방식 요청

또한 레거시 전역 엔드포인트는 지원되는 다른 리전의 가상 호스팅 방식 요청에도 사용됩니다. 2019년 3월 20일 이전에 시작된 리전에 버킷을 생성하고 레거시 전역 엔드포인트를 사용하는 경우 Amazon S3은 DNS를 업데이트하여 요청을 올바른 위치로 다시 라우팅하며, 이로 인해 시간이 걸릴 수 있습니다. 그 동안 기본 규칙이 적용되며 가상 호스팅 방식의 요청은 미국 동부(버지니아 북부) 리전으로 이동합니다. 그런 다음 Amazon S3이 HTTP 307 리디렉션을 사용하여 올바른 리전으로 리디렉션합니다. 2019년 3월 20일 이후에 시작된 리전의 S3 버킷인 경우 DNS는 버킷이 있는 AWS 리전으로 요청을 직접 라우팅하지 않습니다. 대신, HTTP 400 Bad Request 오류를 반환합니다. 자세한 내용은 요청 만들기 섹션을 참조하세요.

경로 방식 요청

미국 동부(버지니아 북부) 리전에서는, 레거시 전역 엔드포인트를 경로 방식 요청에 사용할 수 있습니다.

다른 모든 리전에서 경로 방식 구문을 사용할 경우 버킷에 액세스할 때 리전별 엔드포인트를 사용해야 합니다. 버킷이 상주하는 리전의 엔드포인트와 다른 엔드포인트 또는 레거시 전역 엔드포인트가 있는 버킷에 액세스하려고 하면 HTTP 응답 코드 307 임시 리디렉션 오류와 리소스에 대한 올바른 URI를 나타내는 메시지가 표시됩니다. 예를 들어 미국 서부(오레곤) 리전에 생성된 버킷에 https://s3.amazonaws.com/bucket-name을 사용하는 경우 HTTP 307 임시 리디렉션 오류가 표시됩니다.