기본 루트 객체 지정 - Amazon CloudFront

기본 루트 객체 지정

사용자가 배포의 객체가 아닌 배포의 루트 URL을 요청할 경우, 특정 객체(기본 루트 객체)를 반환하도록 CloudFront를 구성할 수 있습니다. 기본 루트 객체를 지정하면 배포 콘텐츠가 노출되지 않게 할 수 있습니다.

기본 루트 객체를 지정하는 방법

배포의 콘텐츠가 노출되는 것을 방지하거나 오류가 반환되는 것을 방지하려면 다음 단계를 수행하여 배포에 대한 기본 루트 객체를 지정합니다.

배포에 대한 기본 루트 객체를 지정하려면
  1. 배포에서 가리키는 오리진에 기본 루트 객체를 업로드합니다.

    파일은 CloudFront에서 지원하는 모든 유형이 가능합니다. 파일 이름에 대한 제한 사항 목록을 보려면 DistributionConfig 섹션에서 DefaultRootObject 요소의 설명을 참조하세요.

    참고

    기본 루트 객체의 파일 이름이 너무 길거나 유효하지 않은 문자가 포함된 경우, CloudFront에서는 HTTP 400 Bad Request - InvalidDefaultRootObject 오류를 반환합니다. 또한 CloudFront에서는 10초(기본값) 동안 코드를 캐싱하고 결과를 액세스 로그에 작성합니다.

  2. 객체에 대한 권한이 CloudFront에 최소 read 액세스 권한을 부여하는지 확인합니다.

    Amazon S3 권한에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서Amazon S3의 Identity and Access Management를 참조하세요.

  3. CloudFront 콘솔 또는 CloudFront API를 사용하여 기본 루트 객체를 참조하는 배포를 업데이트합니다.

    CloudFront 콘솔을 사용하여 기본 루트 객체를 지정하려면

    1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/cloudfront/v4/home에서 CloudFront 콘솔을 엽니다.

    2. 상단 창의 배포 목록에서 업데이트하려는 배포를 선택합니다.

    3. 설정 창의 일반 탭에서 편집을 선택하세요.

    4. 편집 설정 대화 상자에서 기본 루트 객체 필드에 기본 루트 객체의 파일 이름을 입력합니다.

      index.html과 같이 객체 이름만 입력하세요. 객체 이름 앞에 /를 추가하지 마십시오.

    5. Save changes(변경 사항 저장)를 선택합니다.

    CloudFront API를 사용하여 구성을 업데이트하려면 배포에서 DefaultRootObject 요소의 값을 지정합니다. CloudFront API를 사용한 기본 루트 객체 지정에 대한 자세한 내용은 Amazon CloudFront API 참조DistributionConfig를 참조하세요.

  4. 루트 URL을 요청하여 기본 루트 객체를 활성화했는지 확인합니다. 브라우저에 기본 루트 객체가 표시되지 않는 경우 다음 단계를 수행합니다.

    1. CloudFront 콘솔에서 배포의 상태를 확인하여 배포가 모두 완료되었는지 확인합니다.

    2. 2단계와 3단계를 반복하여 올바른 권한을 부여하고 기본 루트 객체를 지정하는 배포 구성을 올바르게 업데이트했는지 확인합니다.

기본 루트 객체 작동 방식

예를 들어 다음 요청은 image.jpg 객체를 가리킵니다.

https://d111111abcdef8.cloudfront.net/image.jpg

반면에, 다음 요청은 특정 객체 대신에 앞 예제와 동일한 배포의 루트 URL을 가리킵니다.

https://d111111abcdef8.cloudfront.net/

기본 루트 객체를 정의한 경우 배포의 루트를 호출하는 최종 사용자 요청은 기본 루트 객체를 반환합니다. 예를 들어, index.html 파일을 기본 루트 객체로 지정하는 경우, 그에 대한 요청은 다음과 같습니다.

https://d111111abcdef8.cloudfront.net/

반환 형식:

https://d111111abcdef8.cloudfront.net/index.html

참고

CloudFront는 여러 개의 후행 슬래시가 있는 URL(https://d111111abcdef8.cloudfront.net///)이 https://d111111abcdef8.cloudfront.net/와 동일한지 여부를 확인하지 않습니다. 오리진 서버가 이러한 비교를 수행합니다.

기본 루트 객체를 정의한 경우 배포의 하위 디렉터리에 대한 최종 사용자 요청은 기본 루트 객체를 반환하지 않습니다. 예를 들어, index.html이 기본 루트 객체이고 CloudFront에서 CloudFront 배포 아래의 install 디렉터리에 대한 최종 사용자 요청을 받았다고 가정합니다.

https://d111111abcdef8.cloudfront.net/install/

index.html의 사본이 install 디렉터리에 나타나더라도 CloudFront에서는 기본 루트 객체를 반환하지 않습니다.

CloudFront에서 지원되는 모든 HTTP 메서드를 허용하도록 배포를 구성한 경우, 기본 루트 객체는 모든 메서드에 적용됩니다. 예를 들어 기본 루트 객체가 index.php이고 POST 요청을 도메인(https://example.com)의 루트에 제출하도록 애플리케이션을 작성한 경우, CloudFront에서는 요청을 https://example.com/index.php로 보냅니다.

CloudFront 기본 루트 객체의 동작은 Amazon S3 인덱스 문서의 동작과는 다릅니다. Amazon S3 버킷을 웹 사이트로 구성하고 인덱스 문서를 지정한 경우, 사용자가 버킷의 하위 디렉터리를 요청하더라도 Amazon S3에서는 인덱스 문서를 반환합니다. (인덱스 문서의 사본은 모든 하위 디렉터리에 나타나야 합니다.) Amazon S3 버킷을 웹 사이트로 구성하는 방법과 인덱스 문서에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서Amazon S3에서 웹 사이트 호스팅 단원을 참조하세요.

중요

기본 루트 객체는 CloudFront 배포에만 적용된다는 점에 유의하세요. 이 경우에도 오리진의 보안은 관리해야 합니다. 예를 들어, Amazon S3 오리진을 사용하는 경우, Amazon S3 버킷 ACL을 적절히 설정하여 버킷에 대해 원하는 액세스 수준을 보장해야 합니다.

루트 객체를 정의하지 않을 경우 CloudFront의 작동 방식

기본 루트 객체를 정의하지 않은 경우, 배포의 루트에 대한 요청은 오리진 서버로 전달됩니다. Amazon S3 오리진을 사용하는 경우 다음 중 하나가 반환될 수 있습니다.

  • Amazon S3 버킷의 콘텐츠 목록 - 다음 조건 중 하나에 해당하는 경우 오리진의 콘텐츠가 CloudFront를 사용하여 배포에 액세스하는 사람에게 표시됩니다.

    • 버킷이 적절하게 구성되지 않았습니다.

    • 배포에 연결된 버킷과 이 버킷에 있는 객체에 대한 Amazon S3 권한은 모두에 대한 액세스 권한을 부여합니다.

    • 최종 사용자가 오리진 루트 URL을 사용하여 오리진에 액세스합니다.

  • 오리진의 비공개 콘텐츠 목록 - 비공개 배포(사용자 및 CloudFront에만 액세스 권한이 있음)로 오리진을 구성하는 경우, 배포에 연결된 Amazon S3 버킷의 콘텐츠는 CloudFront를 통해 배포에 액세스하는 자격 증명을 가진 모두에게 표시됩니다. 이러한 경우 사용자는 오리진 루트 URL을 통해 콘텐츠에 액세스할 수 없습니다. 비공개 콘텐츠를 배포하는 방법에 대한 자세한 내용은 서명된 URL과 서명된 쿠키를 사용하여 프라이빗 콘텐츠 제공를 참조하십시오.

  • Error 403 Forbidden - 배포에 연결된 Amazon S3 버킷에 대한 권한이나 이 버킷에 있는 객체에 대한 권한이 CloudFront 및 모두에 대한 액세스를 거부하는 경우, CloudFront에서는 이 오류를 반환합니다.