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

버킷의 가상 호스팅

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

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

중요

SSL과 함께 가상 호스팅 스타일 버킷을 사용하는 경우 SSL 와일드카드 인증서는 점(.)이 포함되지 않은 버킷만 일치합니다. 이 제한을 해결하려면 HTTP를 사용하거나 고유한 인증서 확인 논리를 직접 작성합니다. 자세한 내용은 AWS 뉴스 블로그에 있는 Amazon S3 경로 사용 중지 계획을 참조하세요.

경로 방식 요청

현재 Amazon S3는 모든 AWS 리전에서 가상 호스팅 방식 및 경로 방식 URL 액세스를 모두 지원합니다. 그러나 경로 스타일 URL은 향후 중단될 예정입니다. 자세한 내용은 다음 중요 참고 사항을 참조하세요.

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

https://s3.region-code.amazonaws.com/bucket-name/key-name

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

https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/puppy.jpg
중요

업데이트(2020년 9월 23일) – 고객이 가상 호스팅 스타일 URL로 전환하는 데 필요한 시간을 가질 수 있도록 경로 스타일 URL의 사용 중단을 연기하기로 결정했습니다. 자세한 내용은 AWS 뉴스 블로그에서 Amazon S3 경로 사용 중지 계획 - 나머지 이야기를 참조하세요.

주의

웹 브라우저에서 액세스할 웹 사이트 콘텐츠를 호스팅할 때는 경로 스타일 URL을 사용하지 마세요. 브라우저의 동일 오리진 보안 모델을 방해할 수 있습니다. 웹 사이트 콘텐츠를 호스팅하려면 S3 웹 사이트 엔드포인트 또는 CloudFront 배포를 사용하는 것이 좋습니다. 자세한 내용은 웹 사이트 엔드포인트AWS 퍼스펙티브 지침 패턴에서 React 기반 단일 페이지 애플리케이션을 Amazon S3 및 CloudFront에 배포를 참조하세요.

가상 호스팅 방식 요청

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

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

https://bucket-name.s3.region-code.amazonaws.com/key-name

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

https://DOC-EXAMPLE-BUCKET1.s3.us-west-2.amazonaws.com/puppy.png

HTTP Host 헤더 버킷 사양

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

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

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

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

예시

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

예 - 경로 방식 URL 및 요청

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

  • 버킷 이름 ‐ example.com

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

  • 키 이름 ‐ homepage.html

URL은 다음과 같습니다.

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

요청은 다음과 같습니다.

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

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

GET /example.com/homepage.html HTTP/1.0

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

예 - 가상 호스팅 방식 URL 및 요청

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

  • 버킷 이름DOC-EXAMPLE-BUCKET1

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

  • 키 이름homepage.html

URL은 다음과 같습니다.

http://DOC-EXAMPLE-BUCKET1.s3.eu-west-1.amazonaws.com/homepage.html

요청은 다음과 같습니다.

GET /homepage.html HTTP/1.1 Host: DOC-EXAMPLE-BUCKET1.s3.eu-west-1.amazonaws.com
예 — CNAME 별칭 메서드

이 메서드를 사용하려면 DNS 이름을 bucket-name.s3.us-east-1.amazonaws.com의 CNAME 별칭으로 구성해야 합니다. 자세한 내용은 CNAME 레코드를 사용하여 Amazon S3 URL 사용자 지정 섹션을 참조하세요.

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

  • 버킷 이름 ‐ example.com

  • 키 이름homepage.html

URL은 다음과 같습니다.

http://www.example.com/homepage.html

예제는 다음과 같습니다.

GET /homepage.html HTTP/1.1 Host: www.example.com

CNAME 레코드를 사용하여 Amazon S3 URL 사용자 지정

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

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

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

images.example.com CNAME images.example.com.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 별칭에서 사용될 수 있습니다. 엔드포인트에 대한 자세한 내용은 요청 엔드포인트를 참조하십시오. 사용자 지정 도메인을 사용하여 정적 웹 사이트를 만들려면 자습서: Route 53에 등록된 사용자 지정 도메인을 사용하여 정적 웹 사이트 구성을 참조하세요.

중요

CNAME과 함께 사용자 지정 URL을 사용하는 경우 구성하는 CNAME 또는 별칭 레코드에 대해 일치하는 버킷이 있는지 확인해야 합니다. 예를 들어, S3를 사용하여 웹 콘텐츠를 게시하기 위해 www.example.comlogin.example.com에 대한 DNS 항목을 생성하는 경우 버킷 www.example.comlogin.example.com을 모두 생성해야 합니다.

일치하는 버킷이 없는 S3 엔드포인트를 가리키는 CNAME 또는 별칭 레코드가 구성된 경우 소유권이 동일하지 않더라도 모든 AWS 사용자는 해당 버킷을 생성하고 구성된 별칭으로 콘텐츠를 게시할 수 있습니다.

같은 이유로 버킷을 삭제할 때 해당 CNAME 또는 별칭을 변경하거나 제거하는 것이 좋습니다.

호스트 이름과 Amazon S3 버킷 연결

CNAME 별칭을 사용하여 호스트 이름과 Amazon S3 버킷 연결
  1. 제어하는 도메인에 속한 호스트 이름을 선택합니다.

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

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

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

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

    예:

    images.example.com CNAME images.example.com.s3.us-west-2.amazonaws.com

    중요

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

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

제한 사항

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

이전 버전과의 호환성

다음 섹션에서는 경로 스타일 및 가상 호스팅 스타일 URL 요청과 관련된 Amazon S3 이전 버전과의 다양한 호환성 측면을 다룹니다.

레거시 엔드포인트

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

중요

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

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

https://bucket-name.s3.region-code.amazonaws.com/key-name

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

https://s3.region-code.amazonaws.com/bucket-name/key-name

s3‐리전

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

https://bucket-name.s3-region-code.amazonaws.com

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

https://DOC-EXAMPLE-BUCKET1.s3-us-west-2.amazonaws.com

레거시 전역 엔드포인트

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

bucket-name.s3.amazonaws.com

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

https://DOC-EXAMPLE-BUCKET1.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 임시 리디렉션 오류가 표시됩니다.