Terraform을 사용하여 AWS에 보안 및 확장 가능한 정적 웹사이트 배포

발행: (2025년 12월 13일 오후 07:27 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Overview

이 미니 프로젝트는 Terraform을 사용하여 AWS에 보안 정적 웹사이트를 배포하는 과정을 보여줍니다. Amazon S3를 정적 콘텐츠 저장소로, Amazon CloudFront를 전 세계 콘텐츠 전송망으로 활용하여 고가용성, 향상된 성능, 그리고 커스텀 도메인을 통한 HTTPS 접근을 제공하는 엔드‑투‑엔드 인프라‑코드 솔루션입니다.

Architecture

프로젝트 아키텍처

Implementation Steps

Step 1 – Provision S3 bucket

정적 웹사이트 파일을 저장할 S3 버킷을 생성하고 모든 퍼블릭 접근을 차단하여 버킷이 인터넷에서 직접 접근되지 않도록 했습니다.

S3 버킷 구성

Step 2 – Upload website assets

로컬 www/ 디렉터리의 모든 파일을 자동으로 S3 버킷에 업로드하고 적절한 MIME 콘텐츠 타입(HTML, CSS, JS, 이미지)을 설정했습니다.

S3에 파일 업로드

Step 3 – Retrieve Route 53 hosted zone

도메인에 대한 기존 퍼블릭 Route 53 호스티드 존을 조회했습니다.

Route 53 호스티드 존 조회

Step 4 – Request SSL certificate

AWS Certificate Manager를 통해 SSL 인증서를 요청했습니다(CloudFront에 필요). 인증서는 Route 53을 이용한 DNS 검증으로 발급되었습니다.

ACM 인증서 요청

Step 5 – Create CloudFront Origin Access Control (OAC)

CloudFront만 HTTPS를 통해 S3 버킷의 콘텐츠를 읽을 수 있도록 OAC를 생성했으며, 버킷에 대한 직접 퍼블릭 접근은 차단된 상태를 유지했습니다.

CloudFront OAC 구성

Step 6 – Configure CloudFront distribution

Terraform 리소스를 사용해 CloudFront 배포를 정의했습니다. 이 배포는 전 세계 CDN을 통해 사용자와 콘텐츠를 연결하고, 엣지 로케이션에 자산을 캐시함으로써 지연 시간을 감소시킵니다.

CloudFront 배포 설정

Step 7 – Apply S3 bucket policy

SourceArn 조건을 사용해 CloudFront 배포에서만 s3:GetObject 권한을 허용하는 버킷 정책을 추가했습니다.

S3 버킷 정책

Step 8 – Create Route 53 alias record

커스텀 도메인(예: www.example.com)을 CloudFront 배포에 연결하는 Route 53 별칭 레코드를 생성해, 커스텀 도메인을 통한 HTTPS 접근을 가능하게 했습니다.

Route 53 별칭 레코드

Additional Resources

  • YouTube 동영상:
  • GitHub 저장소:

Tags: Terraform AWS DevOps

Back to Blog

관련 글

더 보기 »

S3에 Terraform 상태 저장

S3를 Terraform 백엔드로 구성하기 Terraform은 상태를 S3 버킷에 저장할 수 있습니다. 아래는 S3 백엔드를 설정하는 최소 구성 예시입니다: hcl terrafor...