AWS에서 퍼블릭 ALB(Application Load Balancer)를 활용해 프라이빗 서브넷에 있는 EC2 인스턴스를 안전하게 연결하고, CloudFront를 사용해 보안 및 성능을 최적화할 수 있다.
이 글에서는 ALB + EC2 연결, 지리적 제한(Geo Restriction), 비용 최적화(Price Class), 캐시 무효화(Cache Invalidation) 개념을 정리한다.
EC2 인스턴스는 프라이빗 서브넷에 위치하며, 외부에서 직접 접근할 수 없다.
이를 위해 퍼블릭 서브넷에 배포된 ALB를 활용하여 트래픽을 안전하게 전달할 수 있다.
1️⃣ ALB는 퍼블릭 서브넷에 위치
2️⃣ EC2는 프라이빗 서브넷에 위치
3️⃣ ALB의 보안 그룹(SG)에 EC2의 보안 그룹을 허용
4️⃣ 사용자는 CloudFront를 통해 ALB에 접근
5️⃣ CloudFront는 엣지 로케이션에서 캐싱하여 성능 최적화
📌 ALB 보안 그룹 → 인터넷에서 CloudFront IP 대역만 허용
📌 EC2 보안 그룹 → ALB에서 오는 트래픽만 허용
# ALB 보안 그룹: CloudFront에서 오는 요청 허용
aws ec2 authorize-security-group-ingress \
--group-id ALB_SG_ID \
--protocol tcp --port 80 \
--source-security-group CF_IP_RANGES
# EC2 보안 그룹: ALB에서 오는 요청만 허용
aws ec2 authorize-security-group-ingress \
--group-id EC2_SG_ID \
--protocol tcp --port 80 \
--source-group ALB_SG_ID
✅ 프라이빗 EC2는 ALB를 통해서만 접근 가능
✅ CloudFront → ALB → EC2 순서로 보안 유지
CloudFront는 특정 국가에서의 접근을 허용하거나 차단하는 기능을 제공한다.
이를 활용하면 비즈니스 요구사항에 따라 지역별 트래픽을 제어할 수 있다.
CloudFront Geo Restriction(지리적 제한) 기능을 사용하면, 특정 국가에서 콘텐츠 접근을 제어할 수 있다.
📌 허용 국가 리스트(Whitelist Mode)
📌 차단 국가 리스트(Blacklist Mode)
CloudFront 배포판에서 Geo Restriction 설정을 추가하면 된다.
aws cloudfront create-distribution \
--origin-domain-name my-origin.s3.amazonaws.com \
--geo-restriction RestrictionType=whitelist,Locations=KR,JP,US
✅ Whitelist 모드 → 한국, 일본, 미국에서만 접근 가능
✅ Blacklist 모드 → 특정 국가를 차단 가능
CloudFront는 엣지 로케이션(Edge Location)마다 데이터 비용이 다르다.
이를 최적화하기 위해 Price Class를 설정하면, 비용 효율적인 엣지 로케이션만 사용할 수 있다.
Price Class | 사용 가능 리전 | 비용 |
---|---|---|
Price Class All | 모든 리전 | 💲💲💲 (가장 비쌈) |
Price Class 200 | 주요 리전 (미국, 유럽, 아시아 일부) | 💲💲 (중간) |
Price Class 100 | 미국, 유럽 일부 | 💲 (가장 저렴) |
비용 절감을 위해 Price Class 100 또는 200을 선택할 수 있다.
aws cloudfront update-distribution \
--id DISTRIBUTION_ID \
--distribution-config PriceClass=PriceClass_100
✅ 미국과 유럽 주요 리전만 활용하여 비용 절감 가능
✅ 전 세계 배포가 필요하면 Price Class All 유지
CloudFront는 백엔드 오리진을 업데이트해도 기존 캐시를 유지한다.
따라서, 업데이트된 파일이 즉시 반영되도록 캐시를 무효화(Invalidate)하는 작업이 필요하다.
1️⃣ 각 엣지 로케이션에는 고유한 캐시가 존재
2️⃣ S3 버킷의 파일을 업데이트해도, 기존 캐시는 그대로 유지
3️⃣ 캐시를 무효화하면 CloudFront가 새로운 파일을 다시 가져옴
CloudFront에서 특정 파일 또는 전체 경로를 대상으로 캐시를 삭제할 수 있다.
aws cloudfront create-invalidation \
--distribution-id DISTRIBUTION_ID \
--paths "/images/logo.png"
✅ 특정 파일만 무효화하여 불필요한 비용 절감
✅ 전체 캐시 무효화 시 비용 증가 가능 → 주의 필요
aws cloudfront create-invalidation \
--distribution-id DISTRIBUTION_ID \
--paths "/*"
⚠ 주의: 전체 캐시를 무효화하면 요청이 모두 원본 서버로 가므로 비용이 급증할 수 있다.
AWS ALB와 CloudFront를 조합하면 보안, 성능, 비용 최적화를 동시에 달성할 수 있다.
개념 | 설명 |
---|---|
ALB + 프라이빗 EC2 | ALB는 퍼블릭, EC2는 프라이빗 서브넷에 배치하여 보안 강화 |
보안 그룹 설정 | ALB → EC2만 허용, CloudFront → ALB만 허용 |
Geo Restriction | 특정 국가에서의 접근을 허용 또는 차단 |
Price Class | 비용 최적화를 위해 특정 리전만 활용 |
Cache Invalidation | 업데이트된 파일이 즉시 반영되도록 캐시를 무효화 |
🚀 추천 전략:
- CloudFront + ALB를 조합하여 보안 및 성능 강화
- Geo Restriction을 활용하여 국가별 접근 제한
- Price Class 100 또는 200을 사용하여 비용 절감
- 필요한 경우에만 캐시 무효화 실행하여 비용 관리
이러한 설정을 적용하면 보안성을 유지하면서도 최적의 성능과 비용 절감을 동시에 실현할 수 있다. 🚀