AWS #3 / TIL

VPC

Featured image

VPC (Vertual Private Cloud)

AWS에서 제공하는 가상의 데이터 센터 서비스.

인터넷에 연결된 VPC 만들기


1. 내부적으로 사용할 수 있는 Private IP 주소 선택

CIDR (Classless Inter Domain Routing)
국제적인 표준으로 IP 주소를 표현하는 방식인 32비트의 주소 체계 (ex. 172.31.0.0/16)

RFC1918 에 명시되어 있는 IP 주소를 VPC의 Private IP주소로 쓰는 것을 권장한다. 그 이유는 연결할 수 있는 다른 네트워크가 겹치는 범위는 피해야하기 때문이다.

CIDR 블록 IP 주소의 수
/28 16
/24 254
/20 4,094
/18 16,382
/16 65,536
# 권장 IP 주소 범위
- 10.0.0.0 ~ 10.255.255.255 (10/8 prefix)
- 172.16.0.0 ~ 172.31.255~255 (172.16/12 prefix)
- 192.168.0.0 ~ 192.168.255.255 (192.168/16 prefix)

# VPC 서브넷 권고사항
- /16 VPC (64K address)
- /24 subnets (251 address) : 나머지 5개(0, 1, 2, 3, 255)의 IP주소는 네트워킹을 위해 예약되어 있기 때문에 사용할 수 없다.
- 1개의 가용 영역 내에 한 개의 서브넷

IPv4 Class

IP가 1.2.3.4/5 형식일 경우

나머지는 호스트 주소로 사용한다.


2. 가용 영역(AZ) 별 서브넷 설정

AWS에서는 리전 내에 복수 개의 가용 영역을 운영하며 애플리케이션의 가용성을 극대화할 수 있도록 지원한다.

따라서 IP 주소 설정을 마치고 나면 서브넷이라는 작은 공간을 가용 영역 내에 만든다.

Subnet
서브 네트워크의 줄임말로, IP 네트워크의 논리적인 하위 부분을 가리키며, VPC를 사용하여 다양한 서브넷을 생성할 수 있다.

서브넷은 AZ당 최소 하나를 사용할 수 있고, 여러 개의 AZ에 연결되는 서브넷은 만들 수 없다. 서브넷은 VPC의 CIDR 블록을 이용해 정의되며, 최소 크기의 서브넷은 /28이다.


3. 인터넷과 통신할 수 있는 라우팅 테이블 설정

라우팅 테이블이란, 네트워크에서 라우터가 사용하는 데이터베이스로, 목적지 IP 주소에 대한 경로 정보를 포함하고 있다. 서브넷 별로 원하는 라우팅 테이블을 설정할 수 있다.

VPC를 만들고나면 생성되는 Default 라우팅 테이블은 172.31.0.0/16 의 목적지 IP 주소와 Target이 local로 부여되어 있다. 이 테이블은 외부로 패킷을 보내지 말고 내 VPC 내로 라우팅을 하라고 설정되는 기본적인 라우팅 테이블이다.

Internet Gateway를 만들어서 해당 VPC에 연결을 하면 특정 ID를 가지는 Gateway가 만들어진다. 특정 서브넷에 존재하는 EC2 인스턴스에서 인터넷으로 트래픽을 보내기 위해서는 Internet Gateway라는 라우팅 테이블을 만들어 경로를 열어주어야 한다.

IGW라는 라우팅 테이블을 만들게 되면, Target이 Gateway를 만들 때 생성된 ID, 그리고 목적지 IP 주소가 0.0.0.0/0 (anywhere)로 생성이 된다.


4. VPC로부터의 트래픽 설정(방화벽, 보안 정책)

AWS에서는 사용자가 무언가를 허용하기 전까지는 모든 것을 불허하는 정책을 가지고 있다. 따라서 허용하는 방화벽 설정을 하지 않고 VPC를 구동시키면 외부에서 접속을 할 수 없다. 따라서 방화벽 설정을 통해 접속의 문을 열어주어야 한다.

Security groups : 애플리케이션 구조
Stateful 방식으로 작동한다. Security 그룹은 모든 것을 불허하게 만들어져 있기 때문에 트래픽을 외부로 보낼 수도 외부에서 들어올 수도 없게 만들어져 있다. 대부분 프론트 웹 서버는 모든 트래픽을 허용하고, 백엔드는 모든 트래픽을 불허하는 방식으로 방화벽을 설정한다.

웹 서버에서 허용하기 위해서 HTTP TCP 프로토콜의 80포트 0.0.0.0/0(anywhere)에서 오는 트래픽을 허용하는 security group을 만들어준다.

백 엔드 Security group은 웹 서버에 할당된 Security group에 속한 인스턴스만 접근할 수 있도록 설정한다. 따라서, 원하는 곳에서 원하는 포트로 들어오는 트래픽만 허용을 하고 나머지 트래픽은 모두 불허할 수 있는 방화벽을 설정할 수 있다.

Network Access Control List (NACL)
서브넷 단위로 적용 가능하며, Stateless 방식으로 작동 한다. NACL은 VPC를 생성하게 되면 모든 것을 허용하도록 만들어져 있다.


VPC 연결 옵션


서브넷 별로 각기 다른 라우팅 가능

NAT(Network Address Translation) gateway : 아웃바인드 전용 인터넷 허용

웹 서버는 인터넷 게이트웨이가 허용되어 있어 정보를 받아오고 인터넷 연결이 가능하지만, 백엔드 서버는 안되어 있기 때문에 여러가지 기능을 사용하기 어렵다. 그래서 사용하는 것이 NAT gateway이다.

백엔드 서버들은 NAT gateway를 통해 public하게 정보를 전달할 수 있는 경로가 만들어진다. 이 gateway는 public IP주소를 가지고 있지 않기 때문에 이 경로를 통해 외부에서는 접속을 할 수 없다.

따라서 이 NAT gateway를 설정하기 위해서 NAT gateway라는 라우팅 테이블을 만든 후 Target을 만든 라우팅 테이블의 ID로 설정을 해주면 된다.

VPC peering
각 기업의 서로 다른 VPC를 연결해서 레퍼런싱할 수 있는데, 그러기 위해서는 요청과 수락이 필요하고, 경로를 생성해야 한다. peering을 위해 요청과 수락이 이루어지면 ID가 생성되는데, Target을 그 ID로 지정하면 경로가 생성된다.

아래의 목적으로 공통적인 VPC를 만들어 사용한다.

VPN - Virtual Private Network
개인의 VPN 장비를 하나 마련하면, AWS에서는 그것을 Gateway라고 한다. AWS에서 그 Gateway를 통해 IPSec tunnels라는 경로를 생성한다.

DX - Direct Connect
VPN은 전용 망을 사용하는 것이 아니기 때문에 인터넷 품질이 랜덤적일수 있다. 인터넷 품질을 위해 Direct Connect를 사용한다.