소개
클라우드 환경에서 프라이빗 리소스에 대한 안전한 접근 방식을 설계하는 것은 보안과 사용 편의성 사이의 균형을 맞추는 중요한 과제입니다. 특히 외부 고객사가 직접 AWS 리소스에 접근하여 설치 작업을 수행해야 하는 경우, 전통적인 방식으로는 보안 취약점이 발생할 수 있습니다. 이 블로그에서는 Cloudflare Tunnel을 활용하여 VPN 없이도 안전하게 프라이빗 리소스에 접근할 수 있는 아키텍처를 소개합니다.
아키텍처

아키텍처 개요
이 시스템은 크게 다음과 같은 컴포넌트로 구성되어 있습니다:
- 외부 접근 계층: Cloudflare Tunnel과 SSH 접속 관리
- 네트워크 계층: VPC, 서브넷, NAT 게이트웨이 및 라우팅
- 컴퓨팅 계층: EC2 인스턴스(애플리케이션 서버 및 bastion 호스트)
- 데이터 계층: RDS 및 ElastiCache(Redis)
- 스토리지 계층: S3 버킷
- 보안 계층: IAM 정책 및 역할
주요 구성 요소 및 흐름
1. 외부 접근 보안 계층
- Cloudflare Tunnel: 전통적인 방화벽 포트 개방 없이 안전한 터널 연결 제공
- SSH 접속:
habitap.cumybox.com
도메인을 통해 PEM 키 기반 인증으로 접근
- localhost:22 포워딩: 내부 EC2 인스턴스로 SSH 트래픽 라우팅
2. 네트워크 구성
- VPC: 전체 인프라를 포함하는 가상 네트워크
- 퍼블릭 서브넷: 로드 밸런서, NAT 게이트웨이, Bastion 호스트가 위치
- 프라이빗 서브넷: 메인 EC2 인스턴스, RDS, ElastiCache 등 핵심 리소스 위치
- Route53: DNS 관리 및 트래픽 라우팅
- 인터넷 게이트웨이: 퍼블릭 서브넷과 인터넷 연결
- NAT 게이트웨이: 프라이빗 서브넷의 리소스가 인터넷에 접근 가능하도록 지원
3. 컴퓨팅 리소스
- 메인 EC2 인스턴스: ARM64 아키텍처 기반 c6g.xlarge 타입 (비용 효율적)
- Bastion 호스트: 내부 리소스 접근을 위한 점프 서버
- 로드 밸런서: 트래픽 분산 및 SSL 종료
4. 데이터 저장 및 캐싱
- RDS: 관계형 데이터베이스 서비스
- ElastiCache(Redis): 고성능 인메모리 캐싱
- S3: 정적 파일 및 백업 저장소
기술적 이점 및 특징
1. Cloudflare Tunnel을 통한 보안 강화
구현 방식:
- Cloudflare 계정에서 터널 생성 및 설정
- EC2 인스턴스에 cloudflared 에이전트 설치
localhost:22
로 SSH 트래픽 라우팅 설정
주요 이점:
- 방화벽 포트 개방 불필요: 인바운드 포트를 열지 않아 공격 표면 감소
- IP 제한 없음: 고정 IP가 없는 고객도 안전하게 접근 가능
- 추가 인증 계층: Cloudflare 액세스 정책으로 연결 제한 가능
- 암호화된 트래픽: 엔드-투-엔드 암호화로 데이터 보호
- DDoS 보호: Cloudflare의 보안 기능 활용
2. 멀티 티어 아키텍처
구현 방식:
- 퍼블릭/프라이빗 서브넷 분리
- Bastion 호스트를 통한 제한된 접근
- 핵심 리소스는 프라이빗 서브넷에 배치
주요 이점:
- 심층 방어(Defense in Depth): 여러 보안 계층을 통해 보안 강화
- 격리된 환경: 중요 리소스는 직접적인 외부 접근에서 보호
- 세분화된 접근 제어: 필요한 리소스에만 최소 권한으로 접근
3. IAM을 통한 권한 관리
구현 방식:
- EC2 역할 및 정책 설정
- S3 버킷 접근을 위한 정책 구성
주요 이점:
- 최소 권한 원칙: 필요한 권한만 부여
- 자격 증명 관리 자동화: 정적 자격 증명 대신 역할 기반 접근
- 감사 가능성: IAM을 통한 모든 접근 기록 및 추적
4. 고가용성 및 성능 최적화
구현 방식:
- ARM64 기반 EC2 인스턴스 사용
- Redis 캐싱 레이어 구현
주요 이점:
- 비용 효율성: ARM 아키텍처를 통한 비용 절감
- 응답 시간 개선: 캐싱을 통한 성능 향상
- 확장성: 트래픽 증가에 따라 리소스 확장 가능
실제 구현 시나리오
이 아키텍처는 다음과 같은 고객사 시나리오에서 활용됩니다:
-
고객사 접근 시나리오:
- 고객사 엔지니어가 SSH 키를 발급받음
cloudfare.domain.com
을 통해 접속
- Cloudflare Tunnel이 트래픽을 EC2 인스턴스로 안전하게 라우팅
- 고객사는 필요한 설치 및 구성 작업 수행
-
내부 관리 시나리오:
- 관리자는 Bastion 호스트를 통해 프라이빗 리소스에 접근
- NAT 게이트웨이를 통해 프라이빗 리소스의 아웃바운드 트래픽 처리
- IAM 역할을 통해 S3와 같은 AWS 서비스에 안전하게 접근
구현 시 고려사항
1. Cloudflare Tunnel 설정
Cloudflare Tunnel을 설정할 때 다음 사항을 고려해야 합니다:
tunnel: your-tunnel-id
credentials-file: /path/to/credentials.json
ingress:
- hostname: cloudfare.domain.com
service: ssh://localhost:22
- service: http_status:404
이 설정은 특정 호스트명으로 들어오는 모든 트래픽을 EC2 인스턴스의 SSH 포트로 라우팅합니다.
2. 보안 강화를 위한 추가 조치
- SSH 키 교체 주기 설정: 정기적인 키 교체로 보안 강화
- CloudWatch 로깅: 모든 접근 시도 기록 및 모니터링
- 세션 타임아웃: 일정 시간 이후 자동 연결 종료
- 다중 인증(MFA): Cloudflare Access를 통한 추가 인증 계층 구현
결론
Cloudflare Tunnel을 활용한 이 아키텍처는 VPN이나 방화벽 포트 개방 없이도 외부 고객사가 AWS 리소스에 안전하게 접근할 수 있는 혁신적인 방식을 제공합니다. 이를 통해 보안성을 유지하면서도 사용자 경험을 개선하고, 운영 복잡성을 줄일 수 있습니다.
이러한 접근 방식은 특히 다양한 외부 파트너와 협업해야 하는 환경이나, 고객사가 직접 시스템에 접근하여 설치 작업을 수행해야 하는 상황에서 큰 효과를 발휘합니다. 또한 Zero Trust 보안 모델을 향한 중요한 단계로, 전통적인 네트워크 경계 기반 보안에서 벗어나 더 유연하고 안전한 접근 방식을 제공합니다.