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

7분 분량
0

Amazon Simple Storage Service(Amazon S3) 버킷에 정적 웹사이트를 호스팅하고 싶습니다. 그런 다음 Amazon CloudFront 배포를 통해 웹 사이트에 서비스를 제공하고 싶습니다.

간략한 설명

Amazon S3에서 호스팅되는 정적 웹 사이트를 서비스하려면 다음 구성 중 하나를 사용하여 CloudFront 배포를 배포하십시오.

  • REST API 엔드포인트를 오리진으로 사용하고 오리진 액세스 제어 (OAC) 또는오리진 액세스 ID (OAI)로 액세스를 제한
    **참고:**오리진 액세스 제어(OAC)를 사용하여 액세스를 제한하는 것이 가장 좋습니다. 오리진 액세스 ID(OAI)는 이 프로세스를 위한 기존 방법입니다.
  • 웹 사이트 엔드포인트를 오리진으로 사용하고 익명(퍼블릭) 액세스를 허용
  • 웹 사이트 엔드포인트를 오리진으로 사용하고 Referer 헤더를 사용하여 액세스를 제한
  • AWS CloudFormation을 사용하여 정적 웹 사이트 엔드포인트를 오리진으로 배포하고 CloudFront를 가리키는 사용자 지정 도메인을 배포

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

해결 방법

오리진으로 사용하려는 S3 엔드포인트 유형으로 CloudFront 배포를 구성하려면 다음 단계를 완료하십시오.

REST API 엔드포인트를 오리진으로 사용하고 OAC 또는 OAI (레거시) 를 사용하여 액세스를 제한

1.    Amazon S3 콘솔을 사용하여 버킷을 생성하고 웹 사이트 파일을 업로드합니다.

**참고:**이 구성에서는 버킷에서 정적 웹 사이트 호스팅을 켤 필요가 없습니다. 이 구성에서는 정적 웹 사이트 호스팅 기능의 웹 사이트 엔드포인트 대신 버킷의 REST API 엔드포인트를 사용합니다.

2.    CloudFront 웹 배포를 생성합니다. 사용 사례 배포 설정 외에도 다음 섹션 중 하나의 단계를 완료하여 Amazon S3 오리진에 대한 액세스를 제한합니다. OAI는 레거시 설정이므로 OAC를 사용하는 것이 가장 좋습니다.

OAC

배포를 생성할 때 오리진 도메인 필드에 Amazon S3 버킷 이름을 입력합니다.

오리진 액세스에서 **오리진 액세스 제어 설정(권장)**을 선택합니다.

Origin 액세스 제어 드롭다운 목록에서 OAC 이름을 선택하고 제어 설정 생성을 선택합니다.

대화상자에서 컨트롤 설정의 이름을 지정합니다**.**기본 설정인 **서명 요청(권장)**을 그대로 두는 것이 좋습니다. 그런 다음 생성을 선택합니다.

CloudFront는 배포를 생성한 후 Amazon S3 버킷에 액세스할 수 있는 권한을 OAC에 부여하는 정책 문을 제공합니다. 정책 복사를 선택하고 S3 버킷 정책 구성에 정책을 붙여넣습니다.

OAI

배포를 생성할 때 오리진 도메인 필드에 Amazon S3 버킷 이름을 입력합니다.

오리진 액세스에서 레거시 액세스 ID를 선택합니다.

오리진 액세스 ID 드롭다운 목록에서 오리진 액세스 ID 이름을 선택합니다. 그런 다음 새 OAI 생성을 선택합니다.

대화 상자에서 새 오리진 액세스 ID의 이름을 지정하고 생성을 선택합니다.

버킷 정책에서 예, 버킷 정책을 업데이트합니다를 선택합니다.

3.    배포를 만들 때는 웹 사이트에 SSL(HTTPS)을 사용하는 것이 가장 좋습니다. HTTPS와 함께 사용자 지정 도메인을 사용하려면 **사용자 지정 SSL 인증서를 선택합니다.**새 인증서를 요청하려면 인증서 요청을 선택합니다. 사용자 지정 도메인을 사용하지 않는 경우에도 배포에 cloudfront.net 도메인 이름과 함께 HTTPS를 사용할 수 있습니다.
**중요:**배포를 위해 대체 도메인 이름(CNAME)을 입력한 경우 CNAME은 선택한 SSL 인증서와 일치해야 합니다. SSL 인증서 관련 문제를 해결하려면 CloudFront 배포에 사용자 지정 SSL 인증서를 사용할 때 발생하는 문제를 해결하려면 어떻게 해야 하나요?를 참조하십시오.

  1. 웹 사이트 도메인이 CloudFront를 가리키도록 도메인의 DNS 레코드를 업데이트합니다. CloudFront 콘솔에서 배포의 도메인 이름을 찾습니다. 도메인 이름은 다음 예와 비슷합니다. d1234abcd.cloudfront.net.

5.    DNS 변경 내용이 전파되고 이전 DNS 항목이 만료될 때까지 기다리십시오.
**참고:**이전 DNS 값이 만료되는 데 걸리는 시간은 호스팅 영역에 설정된 TTL 값에 따라 달라집니다. 또한 로컬 리졸버가 해당 TTL 값을 사용하는지 여부에 따라 달라집니다.

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

이 구성을 사용하면 웹 사이트 버킷에 대한 퍼블릭 읽기 액세스가 허용됩니다. 자세한 내용은 웹 사이트 액세스 권한 설정을 참조하세요.
**참고:**Amazon S3 정적 웹사이트 엔드포인트를 사용하는 경우, CloudFront와 Amazon S3 간의 연결은 HTTP를 통해서만 사용할 수 있습니다. CloudFront와 Amazon S3 간의 연결에 HTTPS를 사용하려면 오리진에 대한 S3 REST API 엔드포인트를 구성합니다.

  1. Amazon S3 콘솔을 사용하여 버킷을 생성하고 해당 버킷에서 정적 웹 사이트 호스팅을 켭니다.
  2. 정적 웹 사이트 호스팅 대화 상자에서 선행 **http://**를 사용하지 않고 버킷의 엔드포인트를 복사합니다. 형식은 DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com과 비슷합니다. 이후 단계에서 이 형식의 엔드포인트가 필요합니다.
  3. 생성한 버킷에 대한 퍼블릭 읽기 액세스를 허용하는 버킷 정책을 추가합니다.
    **참고:**이 구성에서는 S3 버킷의 퍼블릭 액세스 차단 설정을 해제해야 합니다. 사용 사례에서 퍼블릭 액세스 차단 설정을 켜야 하는 경우 REST API 엔드포인트를 오리진으로 사용하십시오. 그런 다음 오리진 액세스 제어 (OAC) 또는 오리진 액세스 ID (OAI) 로 액세스를 제한합니다.
  4. CloudFront 웹 배포를 생성합니다. 사용 사례 배포 설정 외에도 다음 단계를 완료합니다.
    Origin 도메인의 경우 이전 단계에서 복사한 엔드포인트를 입력합니다.
    **참고:**드롭다운 목록에서 버킷을 선택하지 마세요. 드롭다운 목록에는 귀하가 이 구성에서 사용하지 않는 S3 Bucket REST API 엔드포인트만 포함됩니다.
  5. 배포를 만들 때는 웹 사이트에 SSL(HTTPS)을 사용하는 것이 가장 좋습니다. HTTPS와 함께 사용자 지정 도메인을 사용하려면 **사용자 지정 SSL 인증서를 선택합니다.**새 인증서를 요청하려면 인증서 요청을 선택합니다. 사용자 지정 도메인을 사용하지 않는 경우에도 배포에 cloudfront.net 도메인 이름과 함께 HTTPS 를 사용할 수 있습니다.
    **중요:**배포를 위해 대체 도메인 이름(CNAME)을 입력한 경우 CNAME은 선택한 SSL 인증서와 일치해야 합니다. SSL 인증서 관련 문제를 해결하려면 CloudFront 배포에 사용자 지정 SSL 인증서를 사용할 때 발생하는 문제를 해결하려면 어떻게 해야 하나요?를 참조하십시오.
  6. 웹 사이트 도메인이 CloudFront를 가리키도록 도메인의 DNS 레코드를 업데이트합니다. CloudFront 콘솔에서 배포의 도메인 이름을 찾습니다. 도메인 이름 형식은 d1234abcd.cloudfront.net의 예와 비슷할 것입니다.
  7. DNS 변경 내용이 전파되고 이전 DNS 항목이 만료될 때까지 기다리십시오.
    **참고:**이전 DNS 값이 만료되는 데 걸리는 시간은 호스팅 영역에 설정된 TTL 값에 따라 달라집니다. 또한 로컬 리졸버가 해당 TTL 값을 사용하는지 여부에 따라 달라집니다.

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

**중요:**이 설정에서 허용하는 액세스가 사용 사례의 요구 사항을 충족하는지 검토합니다.

이 구성은 배포에 사용자 지정 Referer 헤더를 설정하여 액세스를 제한합니다. 그런 다음 버킷 정책을 사용하여 사용자 지정 Referer 헤더가 있는 요청에만 액세스를 허용합니다.

**참고:**Amazon S3 정적 웹사이트 엔드포인트를 사용하는 경우, CloudFront와 Amazon S3 간의 연결은 HTTP를 통해서만 사용할 수 있습니다. CloudFront와 Amazon S3 간의 연결에 HTTPS를 사용하려면 오리진에 대한 S3 REST API 엔드포인트를 구성합니다.

  1. Amazon S3 콘솔을 사용하여 버킷을 생성하고 해당 버킷에서 정적 웹 사이트 호스팅을 켭니다.
  2. 정적 웹 사이트 호스팅 대화 상자에서 선행 **http://**를 사용하지 않고 버킷의 엔드포인트를 복사합니다. 형식은 DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com과 비슷합니다. 이후 단계에서 이 형식의 엔드포인트가 필요합니다.
  3. CloudFront 웹 배포를 생성합니다. 사용 사례 배포 설정 외에도 다음 단계를 완료합니다.
    Origin 도메인의 경우 이전 단계에서 복사한 엔드포인트를 입력합니다.
    **참고:**드롭다운 목록에서 버킷을 선택하지 마세요. 드롭다운 목록에는 이 구성에서 사용하지 않는 S3 Bucket REST API 엔드포인트만 포함됩니다.
    사용자 지정 헤더 추가에서 헤더 추가를 선택합니다.
    헤더 이름Referer를 입력합니다.
    에는 오리진(S3 버킷) 에 전달하려는 고객 헤더 값을 입력합니다. 오리진에 대한 액세스를 제한하려면 사용자만이 알고 있는 임의의 값 또는 비밀 값을 입력합니다.
  4. 배포를 만들 때는 웹 사이트에 SSL(HTTPS)을 사용하는 것이 가장 좋습니다. HTTPS와 함께 사용자 지정 도메인을 사용하려면 **사용자 지정 SSL 인증서를 선택합니다.**새 인증서를 요청하려면 인증서 요청을 선택합니다. 사용자 지정 도메인을 사용하지 않는 경우에도 배포에 cloudfront.net 도메인 이름과 함께 HTTPS를 사용할 수 있습니다.
    **중요:**배포를 위해 대체 도메인 이름(CNAME)을 입력한 경우 CNAME은 선택한 SSL 인증서와 일치해야 합니다. SSL 인증서 관련 문제를 해결하려면 CloudFront 배포에 사용자 지정 SSL 인증서를 사용할 때 발생하는 문제를 해결하려면 어떻게 해야 하나요?를 참조하십시오.
  5. Amazon S3 콘솔에서 웹 사이트의 버킷을 엽니다. 그런 다음 요청에 3단계에서 지정한 사용자 지정 Referer 헤더가 포함된 조건에서 S3:GetObject를 허용하는 버킷 정책을 추가합니다. 이 구성에서는 S3 버킷의 퍼블릭 액세스 차단 설정을 해제해야 합니다. Amazon S3는 Referer가 제한하는 익명 액세스를 허용하는 버킷 정책을 퍼블릭으로 간주합니다. 사용 사례에서 퍼블릭 액세스 차단 설정을 켜야 하는 경우 REST API 엔드포인트를 오리진으로 사용하십시오. 그런 다음 오리진 액세스 제어 (OAC) 또는 오리진 액세스 ID (OAI) 를 사용하여 액세스를 제한합니다.
    **참고:**사용자 지정 Referer 헤더가 포함되지 않은 요청에 대한 액세스를 차단하려면 버킷 정책에서 명시적 거부 문을 사용합니다.
  6. 웹 사이트 도메인이 CloudFront를 가리키도록 도메인의 DNS 레코드를 업데이트합니다. CloudFront 콘솔에서 배포의 도메인 이름을 찾습니다. 도메인 이름은 d1234abcd.cloudfront.net의 예와 비슷할 것입니다.
  7. DNS 변경 내용이 전파되고 이전 DNS 항목이 만료될 때까지 기다리십시오.
    **참고:**이전 DNS 값이 만료되는 데 걸리는 시간은 호스팅 영역에 설정된 TTL 값에 따라 달라집니다. 또한 로컬 리졸버가 해당 TTL 값을 사용하는지 여부에 따라 달라집니다.

CloudFormation을 사용하여 정적 웹 사이트 엔드포인트를 오리진으로 배포하고 CloudFront를 가리키는 사용자 지정 도메인을 배포합니다

이 솔루션은 웹 사이트에 다음과 같은 구성을 사용합니다.

  • CloudFormation을 사용하여 웹 사이트 배포
  • Amazon S3에서 웹 사이트 호스팅
  • CloudFront을 사용하여 웹 사이트 배포
  • AWS Certificate Manager(ACM)의 SSL/TLS 인증서 사용
  • CloudFront 응답 헤더 정책을 사용하여 모든 서버 응답에 보안 헤더 추가

이 솔루션을 배포하는 방법에 대한 지침은 GitHub 웹 사이트의 Amazon CloudFront Secure Static 웹 사이트를 참조하세요.

관련 정보

보안 정적 웹 사이트 시작

이메일 검증

DNS 확인

대체 도메인 이름 및 HTTPS 사용

AWS 공식
AWS 공식업데이트됨 8달 전
댓글 없음

관련 콘텐츠