CDN? CloudFront? (2)

이유성·2025년 5월 27일

CloudFront 도입 및 S3 정적 이미지 HTTPS 배포 구성


목적

  • S3에 저장된 이미지 파일들을 CloudFront를 통해 CDN으로 제공하고,
  • 커스텀 도메인(cdn.example.com)을 통해 HTTPS로 안전하게 접근할 수 있도록 구성

전체 구성도

  1. 사용자 요청 → https://cdn.example.com/파일경로
  2. CloudFront가 요청을 받고, S3에서 이미지 Fetch
  3. 캐시 적용 → 빠른 응답 제공
  4. CloudFront가 S3 Presigned URL 없이도 이미지 전달

1. 도입 배경

1.1 S3 과금 폭증 이슈

  • 특정일 부하 테스트 도중 S3 직접 접근으로 요청이 급증
  • CDN 미도입 상태라 모든 요청이 S3까지 도달 → 비용 급등
  • CloudWatch 및 비용 대시보드에서 요청 수/비용 급증 패턴 확인


1.2 보안상의 문제

  • S3 버킷명이 URL에 노출
  • 퍼블릭 버킷으로 오인 가능
  • 크롤링 및 불법 접근 위험
  • Presigned URL 기반 접근 제어 한계 존재

1.3 성능 최적화 필요성

  • S3는 정적 파일 저장소이지만 다음과 같은 단점 존재:
    • 응답 지연 (원본까지 매번 도달)
    • 글로벌 요청 시 네트워크 레이턴시 증가
    • 기본 압축/헤더 없음

CloudFront 도입 시 기대 효과:

  • 엣지 로케이션 캐싱 → 응답 속도 향상
  • Brotli/GZIP 압축
  • HTTPS 지원
  • 헤더 제어

2. CloudFront 구성 요약

항목설정 내용
CDN 서비스Amazon CloudFront
Originyour-bucket-name.s3.region.amazonaws.com
접근 제어OAC (Origin Access Control) 사용
압축 설정Brotli, GZIP 자동 활성화
HTTPS 설정Redirect HTTP to HTTPS
허용 메서드GET, HEAD, OPTIONS
캐싱 정책CachingOptimized
TTL 설정기본 24시간
보안 정책TLSv1.2_2021

3. 구성

1) S3 버킷 구성

  • 퍼블릭 액세스 전체 차단
  • 버킷 정책(OAC용) 추가:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudFrontOAC",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::<account-id>:distribution/<distribution-id>"
        }
      }
    }
  ]
}

2) CloudFront 배포 생성

  • Origin Domain: your-bucket-name.s3.region.amazonaws.com
  • Origin Access Control (OAC): 새로 생성 또는 기존 항목 선택
  • Viewer Protocol Policy: Redirect HTTP to HTTPS
  • HTTP Methods: GET, HEAD, OPTIONS
  • Caching Policy: CachingOptimized 사용
  • 보안정책: TLSv1.2_2021 이상 설정 (Chrome 호환 보장)

3) ACM 인증서 발급

  • 리전: us-east-1 (CloudFront 전용)
  • 도메인: cdn.example.com
  • 인증 방식: DNS(CNAME)
  • DNS 관리자에 CNAME 추가
타입이름
CNAME_abc123.cdn_xyz456.acm-validations.aws.

. 포함 필수


4) CloudFront에 커스텀 도메인 등록

  • Alternate Domain Names (CNAMEs): cdn.example.com
  • SSL 인증서: 위에서 발급받은 ACM 인증서 선택

5) DNS 설정

타입호스트
CNAMEcdnxxxxxxxxxxxx.cloudfront.net.

cloudfront.net. 마침표 포함 필수


4. 테스트

curl -I https://cdn.example.com/photos/user1/sample-image.png

정상 출력 예시:

HTTP/2 200
content-type: image/png
via: CloudFront

5. 참고 오류 및 해결

오류원인해결책
ERR_SSL_VERSION_OR_CIPHER_MISMATCHTLS 설정 낮음TLSv1.2_2021 이상 설정
403 ForbiddenS3 정책 누락OAC + 버킷 정책 확인
연결 안 됨DNS 미설정CNAME 값 재확인

최종 결과 요약

  • https://cdn.example.com/이미지경로 형식으로 HTTPS 정적 이미지 접근 가능
  • S3는 비공개 유지, CloudFront만 접근 허용
  • 비용 절감, 보안 강화, 성능 최적화 달성
  • 향후 WAF, Lambda\@Edge, Signed URL 등 고도화 가능성 확보

profile
Cloud Engineer

0개의 댓글