CloudFront를 사용하여 Amazon S3에서 호스팅되는 정적 웹 사이트를 제공하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 7월 30일

Amazon Simple Storage Service (Amazon S3) 버킷에서 정적 웹 사이트를 호스팅한 다음 Amazon CloudFront 배포를 통해 웹 사이트를 제공하려고 합니다. 어떻게 해야 합니까?

간략한 설명

Amazon S3에서 호스팅되는 정적 웹 사이트를 제공하려면 다음 구성 중 하나를 사용하여 CloudFront 배포를 배포하면 됩니다.

  • REST API 엔드포인트를 오리진으로 사용하고 OAI(Origin Access Identity)로 액세스 제한
  • 웹 사이트 엔드포인트를 오리진으로 사용하고 익명(퍼블릭) 액세스 허용
  • 웹 사이트 엔드포인트를 오리진으로 사용하고 Referer 헤더로 액세스 제한

두 엔드포인트 유형에 대한 자세한 내용은 Amazon 웹 사이트와 REST API 엔드포인트 간의 주요 차이점을 참조하십시오.

해결 방법

다음 단계에 따라 오리진으로 사용하려는 S3 엔드포인트 유형이 포함된 CloudFront 배포를 구성합니다.

REST API 엔드포인트를 오리진으로 사용하고 OAI로 액세스 제한

  1. Amazon S3 콘솔을 사용하여 버킷을 생성하고 웹 사이트 파일을 업로드합니다.
  2. CloudFront 웹 배포를 생성합니다. 사용 사례에 필요한 배포 설정에 더해 다음을 입력합니다.
    [Origin Domain Name]에서 생성한 버킷을 선택합니다.
    [Restrict Bucket Access]에서 [Yes]를 선택합니다.
    [Origin Access Identity]에서 [Create a New Identity]를 선택합니다.
    [Comment]에서 기본값을 유지하도록 선택할 수 있습니다. 또는 OAI에 대한 사용자 지정 레이블을 입력할 수 있습니다.
    [Grant Read Permissions on Bucket]에서 [Yes, Update Bucket Policy]를 선택합니다.
  3. 웹 사이트에 SSL(HTTPS)를 사용하지 않으려는 경우 다음 단계로 진행합니다. 웹 사이트에 SSL을 사용하려면 [SSL Certificate]에서 [Default CloudFront Certificate] 또는 [Custom SSL Certificate]를 선택할 수 있습니다. 또는 [Request or Import a Certificate with ACM]를 선택하여 인증서를 요청할 수 있습니다.
    중요: 배포에 대한 대체 도메인 이름(CNAME)을 입력한 경우 CNAME는 선택한 SSL 인증서와 일치해야 합니다. 자세한 내용은 대체 도메인 이름과 HTTPS 사용을 참조하십시오.
  4. [Create Distribution]을 선택합니다.
  5. 웹 사이트의 CNAME가 CloudFront 배포의 도메인 이름을 가리키도록 도메인의 DNS 레코드를 업데이트합니다. CloudFront 콘솔에서 d1234abcd.cloudfront.net과 유사한 형식의 배포 도메인 이름을 찾을 수 있습니다.
  6. DNS 변경 사항이 전파되고 이전 DNS 항목이 만료될 때까지 기다립니다.

웹 사이트 엔드포인트를 오리진으로 사용하고 익명(퍼블릭) 액세스 허용

참고: 이 구성은 웹 사이트의 버킷에 대한 퍼블릭 읽기 액세스를 허용합니다. 자세한 내용은 웹 사이트 액세스에 필요한 권한을 참조하십시오.

  1. Amazon S3 콘솔을 사용하여 버킷을 생성하고 버킷에서 정적 웹 사이트 호스팅을 활성화합니다.
  2. [Static website hosting] 대화 상자에서 버킷의 엔드포인트를 맨 앞의 http://를 제외하고 복사합니다. 형식은 awsexamplebucket.s3-website-region.amazonaws.com과 유사합니다. 나중 단계에서 이 형식의 엔드포인트가 필요합니다.
  3. 생성한 버킷에 대한 퍼블릭 읽기 액세스를 허용하는 버킷 정책을 추가합니다.
  4. CloudFront 웹 배포를 생성합니다. 사용 사례에 필요한 배포 설정에 더해 다음을 입력합니다.
    [Origin Domain Name]에 2단계에서 복사한 엔드포인트를 입력합니다.
  5. 웹 사이트에 SSL(HTTPS)를 사용하지 않으려는 경우 다음 단계로 진행합니다. 웹 사이트에 SSL을 사용하려면 [SSL Certificate]에서 [Default CloudFront Certificate] 또는 [Custom SSL Certificate]를 선택할 수 있습니다. 또는 [Request or Import a Certificate with ACM]을 선택하여 인증서를 요청할 수 있습니다.
    중요: 배포에 대한 대체 도메인 이름(CNAME)을 입력한 경우 CNAME는 선택한 SSL 인증서와 일치해야 합니다. 자세한 내용은 대체 도메인 이름과 HTTPS 사용을 참조하십시오.
  6. [Create Distribution]을 선택합니다.
  7. 웹 사이트의 CNAME가 CloudFront 배포의 도메인 이름을 가리키도록 도메인의 DNS 레코드를 업데이트합니다. CloudFront 콘솔에서 d1234abcd.cloudfront.net과 유사한 형식의 배포 도메인 이름을 찾을 수 있습니다.
  8. DNS 변경 사항이 전파되고 이전 DNS 항목이 만료될 때까지 기다립니다.

웹 사이트 엔드포인트를 오리진으로 사용하고 Referer 헤더로 액세스 제한

참고: 이 구성은 배포에 사용자 지정 Referer 헤더를 설정한 후 버킷 정책을 사용하여 사용자 지정 Referer 헤더가 있는 요청에 대해서만 액세스를 허용하는 방법으로 액세스를 제한합니다. 이 설정에 의해 허용되는 액세스가 사용 사례의 요구 사항을 충족하는지 여부를 확인하십시오.

  1. Amazon S3 콘솔을 사용하여 버킷을 생성하고 버킷에서 정적 웹 사이트 호스팅을 활성화합니다.
  2. [Static website hosting] 대화 상자에서 버킷의 엔드포인트를 맨 앞의 http://를 제외하고 복사합니다. 형식은 awsexamplebucket.s3-website-region.amazonaws.com과 유사합니다. 나중 단계에서 이 형식의 엔드포인트가 필요합니다.
  3. CloudFront 웹 배포를 생성합니다. 사용 사례에 필요한 배포 설정에 더해 다음을 입력합니다.
    [Origin Domain Name]에 2단계에서 복사한 엔드포인트를 입력합니다.
    [Origin Custom Headers]에서 [Header Name] 아래에 Referer를 입력합니다. [Value] 아래에 오리진(S3 버킷)으로 전달하려는 사용자 지정 헤더를 입력합니다. 오리진에 대한 액세스를 제한하려면 임의 값을 입력하거나 본인만 알고 있는 값을 선택합니다.
  4. 웹 사이트에 SSL(HTTPS)를 사용하지 않으려는 경우 다음 단계로 진행합니다. 웹 사이트에 SSL을 사용하려면 [SSL Certificate]에서 [Default CloudFront Certificate] 또는 [Custom SSL Certificate]를 선택할 수 있습니다. 또는 [Request or Import a Certificate with ACM]을 선택하여 인증서를 요청할 수 있습니다.
    중요: 배포에 대한 대체 도메인 이름(CNAME)을 입력한 경우 CNAME는 선택한 SSL 인증서와 일치해야 합니다. 자세한 내용은 대체 도메인 이름과 HTTPS 사용을 참조하십시오.
  5. [Create Distribution]을 선택합니다.
  6. Amazon S3 콘솔에서 웹 사이트의 버킷을 엽니다. 그런 다음 3단계에서 정의한 사용자 지정 Referer 헤더가 요청에 포함되는 조건에서 s3:GetObject를 허용하는 버킷 정책을 추가합니다.
    참고: 사용자 지정 Referer 헤더가 포함되지 않은 요청에 대한 액세스를 차단하려면 버킷 정책에서 명시적 deny 문을 사용합니다.
  7. 웹 사이트의 CNAME가 CloudFront 배포의 도메인 이름을 가리키도록 도메인의 DNS 레코드를 업데이트합니다. CloudFront 콘솔에서 d1234abcd.cloudfront.net과 유사한 형식의 배포 도메인 이름을 찾을 수 있습니다.
  8. DNS 변경 사항이 전파되고 이전 DNS 항목이 만료될 때까지 기다립니다.