AWS 에서 VPC 마법사로 생성할 수 있는 VPC 시나리오로 다음의 4가지를 제공한다.
public 서브넷만 있는 VPC
public 및 private 서브넷이 있는 VPC
public 및 private 서브넷이 있고 VPN 액세스를 제공하는 VPC
private 서브넷만 있고 VPN 액세스를 제공하는 VPC
이 4가지의 VPC 구성을 알고나면 어떤 커스텀 VPC 구성도 가능하다. 하나씩 살펴보자.
1. public 서브넷만 있는 VPC
위 그림에는 다음 정보가 포함된다.
vpc : 10.0.0.0/16
public subnet : 10.0.0.0/24
ec2 : 10.0.0.6 (EIP: 198.51.100.2)
router : 10.0.0.0/16(local), 0.0.0.0/0(igw-id)
internet gateway
ec2 가 인터넷에 오픈되어 있는 웹서비스 등에 알맞는 구성이다. 서브넷은 모두 private 형태이므로 외부와의 통신이 가능하려면 internet gateway 를 두어야 하며, 나가는 트래픽에 대하여 routing table 에 올바르게 설정해야 한다. 10.0.0.0/16(local) 은 해당 vpc 의 다른 서브넷으로의 통신을 가능하게 하며, 0.0.0.0/0(igw-id) 는 외부 모든 트래픽은 igw-id 로 보낸다는 설정이다. 외부에서 해당 서비스(EC2 등) 에 접근할 수 있도록 Public IP 주소도 연결해야 한다. Public IP 주소가 없다면 외부로부터 요청을 받을 수가 없을 것이고, router 에 igw 로의 설정이 없다면 외부로 응답이나 요청을 할 수 없을 것이다. 보안적인 측면에서 보안그룹(security group) 과 network acl 로도 ip/port 에 대하여 허용/거부를 설정할 수 있는데 network acl 은 보통 다 열어놓고 보안그룹만 이용한다. 모든 포트가 차단된 상태에서 웹서비스시 80, 443 포트로 들어오는 요청은 모두 열어주고, 22 포트는 개발자 ip 정도만 열어주는 형태를 추천한다. 이것이 일반적인 public 서브넷의 형태이다.
2. public 및 private 서브넷이 있는 VPC
위 그림에는 다음 정보가 포함된다.
vpc : 10.0.0.0/16
public subnet : 10.0.0.0/24
private subnet : 10.0.1.0/24
ec2(web) : 10.0.0.5~7 (EIP: 198.51.100.1~3)
ec2(db) : 10.0.1.5~7
router1 : 10.0.0.0/16(local), 0.0.0.0/0(igw-id)
router2 : 10.0.0.0/16(local), 0.0.0.0/0(nat-gw-id)
internet gateway
nat gateway
프론트엔드와 백엔드로 나누어 일반적으로 웹서버만 public 서브넷에 두고 DB 는 private 서브넷에 두어, 외부에서는 웹서버와 접근 가능하게 하고 DB 는 웹서버에서만 접근 가능하게 하는 구성이다. 굳이 노출할 필요없는 백엔드를 외부와 차단시키는 것에 중점을 둔 구성이다. public/private 구분을 위해 igw(인터넷 게이트웨이) 로 향하지 않도록 router 를 하나 더 추가해야 한다. 옵션이지만 private 서브넷에서 일방적으로 외부와 통신을 해야 한다면 nat 게이트웨이를 생성하고 router 에 nat 게이트웨이로 트래픽을 보내도록 routing 을 추가한다. igw 가 public 서브넷과 외부와의 양방향 통신이 가능하게 한다면, nat 게이트웨이는 public 서브넷에 위치하면서 private 서브넷에 대하여 외부로 단방향 통신(요청/응답) 이 가능하게 하며 응답을 받을 수 있도록 public IP 할당이 필요하다. 외부에서는 여전히 nat 게이트웨이로 서브넷과 통신할 수 없다. (nat 게이트웨이는 유료) 웹서버의 보안그룹 설정은 시나리오1과 동일, DB 보안그룹 설정은 웹서버 보안그룹ID 로부터 오는 해당 DB 전용포트만 열어주면 된다. 예로 mysql 의 경우 3306 포트.
3. public 및 private 서브넷이 있고 VPN 액세스를 제공하는 VPC
위 그림에는 다음 정보가 포함된다.
vpc : 10.0.0.0/16
public subnet : 10.0.0.0/24
private subnet : 10.0.1.0/24
ec2(web) : 10.0.0.5~7 (EIP: 198.51.100.1~3)
ec2(db) : 10.0.1.5~7
router1 : 10.0.0.0/16(local), 0.0.0.0/0(igw-id)
router2 : 10.0.0.0/16(local), 0.0.0.0/0(vgw-id)
internet gateway
vpn (virtual private gateway, customer gateway)
시나리오2번과 비슷하지만 private subnet 을 외부는 여전히 차단하고 특정 네트워크(customer gateway)와만 통신할 수 있도록 하는 구성이다. vpn 이라고 하는 가상 비공개 네트워크를 구현하여 vpn 에 연결되어야만 private subnet 과의 통신이 가능하다. vpc 콘솔에서 private 서브넷과 연결할 네트워크(customer gateway) 를 ip 와 함께 지정하고 virtual private gateway 생성, 그리고 그 둘을 이어주는 Site-to-Site VPN 연결을 구성하면 된다. (vpn 도 역시 유료) 서브넷의 보안그룹 설정은 vpn 으로 연결되는 네트워크 ip 대역으로부터 필요한 포트만 열어주면 된다.
4. private 서브넷만 있고 VPN 액세스를 제공하는 VPC
위 그림에는 다음 정보가 포함된다.
vpc : 10.0.0.0/16
private subnet : 10.0.0.0/24
ec2(web) : 10.0.0.5~7 (EIP: 198.51.100.1~3)
router : 10.0.0.0/16(local), 0.0.0.0/0(vgw-id)
vpn (virtual private gateway, customer gateway)
시나리오3번에서 public 서브넷만 제외한 구성이다. public 서브넷이 없으므로 igw 도 없다. vpn 과 연결된 특정 네트워크에서만 private 서브넷과 통신이 가능하며, 외부가 차단된 구성이다보니 서비스보다는 사내 인트라넷이나 개발 서버 등이 필요할 때 사용 가능한 구성이다.
이 중에 그나마 유용하게 쓸 수 있는 것이 2번이나 3번 시나리오 이다. 내가 선호하는 구성은 소규모 웹서비스의 경우 2번과 흡사하게. 더 큰규모의 웹서비스는 3번 시나리오에서 public subnet 에는 elb 만 두고 모든 자원을 private 서브넷으로, private 서브넷은 vpn 연결로 관리하는 것이 즐겨 사용하는 시나리오 이다. ^^
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.