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

버킷의 가상 호스팅

가상 호스팅은 한 웹 서버에 있는 여러 웹 사이트에 서비스를 제공하는 기능입니다. 사이트를 구분하는 한 가지 방법은 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월 30일 이후에 생성된 버킷은 가상 호스팅 방식의 요청만 지원합니다. 이 날짜 당일 또는 이전에 생성된 버킷에 대해서는 경로 방식의 요청이 계속 지원됩니다. 자세한 내용은 Amazon S3 Path Deprecation Plan - The Rest of the Story를 참조하십시오.

가상 호스팅 방식 요청

가상 호스팅 방식의 URL에서 버킷 이름은 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 별칭으로 구성해야 합니다. 자세한 내용은 Amazon S3 URL을 CNAME으로 사용자 지정 단원을 참조하십시오. 이 예에서는 다음을 사용합니다.

  • 버킷 이름 ‐ awsexamplebucket1.net

  • 키 이름 ‐ homepage.html

URL은 다음과 같습니다.

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

예제는 다음과 같습니다.

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

Amazon S3 URL을 CNAME으로 사용자 지정

필요에 따라 웹 사이트 또는 서비스에 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 공급자에 따라 다릅니다. 자세한 내용은 서버 설명서를 참조하거나, 제공자에게 문의하십시오.

제한 사항

SSL

가상 호스팅 URL은 비 SSL(HTTP) 요청에서만 지원됩니다.

SOAP

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.amazonaws.com

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

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

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

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

경로 방식 요청

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

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