카테고리 없음
🌐 AWS S3 + CloudFront + Route 53을 활용한 정적 웹사이트 배포 & 보안 설정
bokueyo
2025. 5. 31. 10:04
안녕하세요! 이번 포스팅에서는 정적 웹사이트를 AWS 환경에서 안전하고 깔끔하게 배포하는 전체 과정을 정리해보았습니다.
React 프로젝트를 S3에 올리고, CloudFront CDN을 붙이고, 도메인 연결 + HTTPS 설정 + 보안까지 한 번에 다뤄볼게요.
🧱 아키텍처 구성도
[ 사용자 ]
│
▼
[ CloudFront (CDN) ] ← HTTPS + 도메인 연결
│
▼
[ S3 (정적 파일 저장소) ] ← 비공개 접근 + CloudFront만 접근 가능
1️⃣ S3 버킷 생성 및 정적 웹 호스팅 설정
- S3 콘솔 접속 → 버킷 만들기
- 버킷 이름 설정 (ex. my-portfolio)
- 퍼블릭 액세스 차단 해제 → 나중에 CloudFront로 보안 설정 예정
- "속성" 탭 → 정적 웹 사이트 호스팅 활성화
- 인덱스 문서: index.html
- 오류 문서(optional): error.html
🔼 정적 파일 업로드
React의 경우:
npm run build
aws s3 sync ./build s3://my-portfolio --acl public-read
⚠️ --acl public-read는 임시로만! 보안 설정 후 제거 예정
2️⃣ CloudFront 배포 생성 (CDN 설정)
- CloudFront 콘솔 → 배포 만들기
- 원본 도메인: my-portfolio.s3.amazonaws.com
- Viewer Protocol Policy: Redirect HTTP to HTTPS
- Default Root Object: index.html
- 배포 생성 (몇 분 소요)
3️⃣ 도메인 연결 (Route 53)
✅ 도메인 구매
- AWS Route 53 → 도메인 등록 → 원하는 도메인 구매
✅ CloudFront에 도메인 연결
- Alternate Domain Names (CNAMEs): www.my-site.com
- ACM에서 발급받은 인증서 적용 (필수: 버지니아 북부 리전)
✅ Route 53에서 DNS 연결
- A 레코드 추가
- 이름: www
- 값: CloudFront 도메인 (d123abc456.cloudfront.net)
- 별칭(Alias): 예
4️⃣ HTTPS 설정 (SSL 인증서 연결)
- ACM에서 SSL 인증서 발급 (www.my-site.com)
- 도메인 소유 인증(DNS 방식 추천)
- CloudFront 배포에 인증서 적용
- Viewer Protocol Policy: Redirect HTTP to HTTPS로 설정
💡 이제 내 사이트가 https://www.my-site.com으로 안전하게 접속됩니다!
5️⃣ S3 직접 접근 차단 + CloudFront 전용 보안 설정
❗왜 필요한가요?
- S3 버킷을 퍼블릭으로 두면 누구나 파일 삭제, 조회 가능성
- 따라서 S3는 비공개, CloudFront를 통한 요청만 허용합니다.
방법 1️⃣: OAI 방식 (Origin Access Identity, 구버전)
- CloudFront에서 OAI 생성 및 연결
- S3 버킷 정책:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EXAMPLE"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-portfolio/*"
}
방법 2️⃣: OAC 방식 (Origin Access Control, 신버전 / 권장)
- CloudFront에서 OAC 생성 → S3 Origin에 연결
- S3 버킷 정책:
{
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-portfolio/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/EXAMPLEDISTID"
}
}
}
6️⃣ SPA (React 등) 404 에러 대응
React처럼 라우팅을 클라이언트에서 처리하는 경우, 새로고침 시 404가 발생할 수 있습니다.
해결 방법 (CloudFront에서 설정):
- Error pages 설정:
- 404 또는 403 에러 발생 시 /index.html로 리디렉션
- 응답 코드: 200
✅ 요약
항목 설정 내용
정적 웹 호스팅 | S3 (정적 파일 저장) + 정적 호스팅 ON |
CDN | CloudFront로 글로벌 속도 최적화 |
도메인 | Route 53에서 구매하고 CloudFront에 연결 |
HTTPS | ACM 인증서 → CloudFront에 연결 |
보안 | S3는 비공개 / CloudFront를 통한 접근만 허용 |
SPA 대응 | CloudFront 에러 페이지로 index.html 리디렉션 |
✨ 마무리
- 비용은 S3 + CloudFront 기준으로 꽤 저렴
- 보안과 성능 모두 만족할 수 있는 구조
- 커스텀 도메인 + HTTPS까지 완벽