AWS VPC와 서브넷 구성
VPC는 AWS의 시작점에 있는 서비스이다. EC2, RDS 등의 많은 서비스가 VPC 위에서 동작한다. 그리고 AWS 계정을 생성하면 기본적으로 인터넷 망과 연결된 VPC가 제공된다. AWS는 리소스를 외부와 격리시키기 위해 퍼블릭 서브넷과 프라이빗 서브넷으로 구분해서 격리하는 것을 권장하는데, 그러려면 VPC, Subnet, 인터넷 게이트웨이와 NAT 게이트웨이에 대해 이해해야 한다.
VPC와 서브넷
VPC는 가상 네트워크이다. 논리적으로 다른 네트워크와 논리적으로 분리되어 있다. AWS 리소스는 VPC 위에서 실행할 수 있다. VPC는 Region 단위이고 하나의 VPC는 한 리전 내의 Availability Zone을 관통한다. 현재 서울리전은 3개의 AZ가 존재한다. 서울리전에서 VPC를 생성하면 모든 AZ에 리소스를 둘 수 있다. VPC는 CIDR 블록의 IP 주소 범위를 가진다. 모든 리소스는 VPC가 가진 IP 범위 내의 주소를 가지게 된다.
서브넷은 VPC 하위의 IP 주소 범위를 가진 논리 개념이다. 서브넷은 AZ를 지정해야 한다.
AWS는 고가용성을 위해 각 AZ에 리소스를 분산하는 것을 권장한다. 그리고 보안을 위해 각 AZ에 퍼블릭 서브넷과 프라이빗 서브넷을 분리하고 프라이빗 서브넷에 리소스를 위치시키고 퍼블릭 서브넷에 로드밸런서와 같은 리소스로 프라이빗 리소스에 대한 직접 접근을 통제할 것을 권장한다.
Internet Gateway
인터넷 게이트웨이는 VPC의 인스턴스와 외부 인터넷을 연결한다. 퍼블릭 IP가 있는 인스턴스의 요청을 인터넷 망으로 전달한다.
NAT Gateway
퍼블릭 IP 주소가 없는 프라이빗 서브넷 내의 인스턴스는 퍼블릭 IP가 없기 때문에 인터넷과 통신할 수 없다. 퍼블릭 IP와 NAT 기능을 가진 게이트웨이 혹은 인스턴스가 프라이빗 서브넷의 요청을 받아 인터넷 게이트웨이르 요청을 전달한다.
e.g. CIDR 10.0.100.0/24 블록을 가진 프라이빗 서브넷 A의 라우팅테이블
Destination | Target |
---|---|
10.0.100.0/24 | local |
0.0.0.0/0 | NAT Gateway |
+-----+ +-----+ +------+
| EC2 | -> | NAT | -> | I.G. |
+-----+ +-----+ +------+
10.0.0.24 52.12.42.59
결론적으로 프라이빗 서브넷은 NAT 장비가 있어야 인터넷 망으로 나갈 수 있다. 여태까지 서브넷만 나누고 NAT 구성을 하지 않아서 인터넷 엑세스가 안됐는데 이번 기회에 확실히 알았다.