3-Tier 아키텍처 구축기: Bastion Host부터 Dual NAT까지

정성헌·2026년 4월 2일
post-thumbnail

📝 Velog 포스팅 목차 및 핵심 내용

1. Bastion Host: 보안의 시작이자 끝

  • Bastion Host의 정의: 외부 인터넷에서 프라이빗 서브넷에 있는 자원에 안전하게 접근하기 위한 '프록시(Proxy)' 역할의 서버.
  • 필요성: 프라이빗 서브넷은 공인 IP가 없어 직접 접속이 불가능하다. 하지만 관리자는 패치나 설정을 위해 접속해야 하므로, 퍼블릭에 '대문(Bastion)'을 하나 두고 이를 통해서만 들어가게 설계한다.

2. 아키텍처 설계: Multi-AZ 3-Tier 구성

오늘 구축한 네트워크의 핵심 설계를 공유합니다.

  • VPC CIDR 설계: 10.0.0.0/20을 사용하여 총 4,096개의 IP 확보.
  • 서브넷 전략: * Public: 로드밸런서(ALB), NAT 게이트웨이, Bastion 배치.
    • App Private: 애플리케이션 서버 배치. EKS 파드 확장을 고려해 /22(1024개 IP)로 넉넉하게 할당.
    • DB Private: 외부와 완전히 차단된 Isolated 영역.
  • 고가용성(HA): 가용 영역(AZ) 1, 2에 각각 NAT 게이트웨이를 배치하여 데이터센터 장애에 대비.

3. 오늘의 삽질: 트러블슈팅 리포트 (핵심 섹션)

이슈 1: "서브넷은 퍼블릭인데, 인스턴스는 퍼블릭이 아니다?"

  • 상황: Bastion 호스트에 접속하려니 "퍼블릭 서브넷에 있지 않다"는 에러 발생.
  • 원인: CloudFormation의 경쟁 상태(Race Condition). 인터넷 게이트웨이(IGW)가 VPC에 완전히 붙기 전에 인스턴스가 먼저 생성되면서 경로를 찾지 못한 것.
  • 해결: DependsOn: VPCGatewayAttachment 속성을 통해 리소스 생성 순서를 명시적으로 제어.

이슈 2: error in libcrypto SSH 접속 실패

  • 상황: Bastion에서 프라이빗 서버로 접속 시 .pem 키 로드 에러 발생.
  • 원인: 키 파일의 권한(chmod 400) 미비 및 복사 과정에서의 포맷 손상.
  • 해결: PuttyGen을 통한 올바른 OpenSSH 포맷 변환 및 권한 설정의 중요성 확인.

4. 아키텍처적 고찰: ALB는 왜 퍼블릭에 있는가?

  • 로드밸런서(ALB)는 사용자를 맞는 '정문'이므로 퍼블릭에 위치해야 한다.
  • 하지만 실제 데이터가 있는 서버는 '안방(Private)'에 숨긴다.
  • 결론: 로드밸런서가 퍼블릭에서 트래픽을 받아 프라이빗 타겟 그룹으로 넘겨주는 구조가 보안의 정석임을 실습으로 증명.

profile
develop myself

0개의 댓글