
사용된 AWS 요소
- Amazon Virtual Private Cloud (Amazon VPC)
- Internet Gateway (IGW)
- NAT Gateway (across all public subnets)
- Multiple Amazon VPC subnets (public & private) in 2 or 3 (if available) Availability Zones (AZs)
- Routing tables for public subnets - routing through IGW
- Routing tables for private subnets - routing through NAT Gateway
- Multiple VPC Security Groups
- Bastion Auto Scaling Group (launching no instances) - public 서브넷 내 (public)
- Amazon Relational Database Service (Amazon RDS) Aurora cluster - private 서브넷 내 (data)
- Amazon Elastic File System (Amazon EFS) file system - with mount targets in private subnets (data)
- Amazon ElastiCache cache cluster (optional) - private 서브넷 내 (data)
- Amazon Elastic Load Balancing (Amazon ELB) Application Load Balancer (ALB) - public 서브넷 내 (public)
- Web Auto Scaling Group (launching 2 instances) - private 서브넷 내 (web)
- Amazon CloudFront distribution (optional)
- Amazon Route 53 DNS record set (optional)
Bastion
AWS는 private subnet에 있는 인스턴스로의 직접 접근을 최소화하기 위해 Bastion host 방식을 사용하도록 유도한다. 물론 이는 인터넷을 통한 서버 접근이 필요하거나, 별도의 접근 제어 도구가 없는 경우에 해당한다.
이 구성에서 Bastion Auto Scaling Group은 public subnet에 배치되지만 기본적으로 인스턴스를 실행하지 않도록 설정되어 있다. 운영자가 점검이나 장애 대응을 위해 private subnet의 웹 인스턴스에 접속해야 할 때만 Bastion 인스턴스를 일시적으로 띄우고, 작업이 끝나면 다시 종료하는 방식으로 노출 시간을 줄일 수 있다.
보안 그룹도 이 구조의 핵심이다. Bastion에는 필요한 관리 포트만 제한된 출발지에서 허용하고, private subnet의 인스턴스는 Bastion 보안 그룹에서 들어오는 트래픽만 허용하도록 구성하면 인터넷에서 웹/데이터 계층으로 직접 접속하는 경로를 차단할 수 있다.