[AWS] EC2 직접 접속(HTTP) 차단하고 CloudFront 트래픽만 허용하기
2025년 9월 26일
현재 아키텍처는 CloudFront를 앞단에 두고, 오리진 서버인 EC2와 HTTP(80) 포트로 통신한다. EC2 내부에서는 Nginx가 리버스 프록시로 3000번 포트의 Next.js 서버와 연결하는 구조다.
문제: 도메인(CloudFront)을 거치지 않고 EC2의 Public IP로 직접 접속이 가능하다. CloudFront의 캐싱이나 WAF 설정을 그대로 우회할 수 있어 보안상 취약하다.
해결: AWS Security Group 설정을 변경해 CloudFront를 경유한 요청만 EC2에 허용한다.
AWS Managed Prefix List 활용
AWS는 CloudFront의 전 세계 IP 대역을 묶어 관리하는 Managed Prefix List를 제공한다. IP 대역을 직접 입력하지 않아도 보안 그룹에서 이 리스트를 소스로 지정하면 된다.
1단계 EC2 보안 그룹 이동
- AWS 콘솔에서 EC2 서비스로 이동한다.
- 왼쪽 메뉴 보안 그룹(Security Groups) 클릭.
- 운영 중인 EC2 인스턴스에 적용된 보안 그룹을 선택한다.
- 인바운드 규칙(Inbound rules) 탭 > 인바운드 규칙 편집(Edit inbound rules) 클릭.
2단계 기존 규칙 삭제 및 Prefix List 추가
포트 80에 0.0.0.0/0으로 설정된 기존 규칙을 삭제한다.
새 인바운드 규칙 설정:
- 유형(Type): HTTP
- 프로토콜(Protocol): TCP
- 포트 범위(Port range): 80
- 소스(Source): 사용자 지정(Custom) > 검색창에
cloudfront입력 >com.amazonaws.global.cloudfront.origin-facing선택
소스에 pl-xxxxxxx 형태의 Prefix List ID가 입력된다. 규칙 저장(Save rules) 클릭.
com.amazonaws.global.cloudfront.origin-facing: CloudFront가 오리진 서버로 요청을 보낼 때 사용하는 IP 대역 목록이다.
3단계 적용 결과 확인
- EC2 Public IP 직접 접속:
http://13.x.x.x입력 시 무한 로딩 후 "사이트에 연결할 수 없음" 오류 발생. - CloudFront 도메인으로 접속: 정상 작동 확인.
- 인바운드 규칙 소스를
0.0.0.0/0대신 CloudFront Managed Prefix List(com.amazonaws.global.cloudfront.origin-facing)로 교체한다. - CloudFront를 우회한 직접 접속이 차단되어 WAF, 캐싱 등의 설정이 실질적으로 적용된다.