VPC

AWS VPC (Virtual Private Cloud)

VPC 란, 클라우드 환경에서의 "가상사설망" 이라고 생각할 수 있다.

공인 IP 를 사용해 내부망을 구성하게 되는데, VPC 내부에서 다시 서브넷으로 분리된다. 이 서브넷은 공개/비공개 서브넷으로 분류할 수 있다.

서브"넷" 이기 때문에 각자에게 IP 를 부여해야 한다. 원천 IP 는 하나이고 이것을 CIDR 라는 기준으로 서브넷 마스킹을 해서 프라이빗 IP 를 부여하게 된다. 예를 들면 134.25.35.17 이라는 공인 IP 를 가지고 있다고 하면, CIDR 이 134.25.35.0/24 일 경우 서브넷 A 는 134.25.35.3 이런 식으로 부여받는다.

CIDR 규칙

IPv4 클래스 주소를 클래스(Class A,B,C) 없이 표기하는 규칙이다.

마스킹 되지 않는 공인 IPv4 주소의 비트 수를 '/' 뒤에 붙인다.

ex) 134.25.35.0/24 (8*3 bit = 24)

VPC 는 내부에 가상 라우터를 가지고 있고, 가상 라우터는 라우팅 테이블을 확인해서 내부 서브넷의 통신을 처리한다. 라우팅 테이블은 기본적으로 1개가 존재하고, 커스텀 라우팅 테이블을 각 서브넷에 붙일 수 있다.

AWS 는 리전에서 자체적으로 1개의 Default VPC 를 기본 자원과 함께 설치한다. 사용자 VPC 는 리전별 최대 5개 까지 사용이 가능하다.

서브넷은 리전 별 가용영역 하나에 속해있다. 예를 들어 서울 리전의 경우 ap-northease-2(a~d) 중 하나에 서브넷이 속해 있어야 한다.

서브넷은 네트워크 ACL 을 통해 1차적으로 네트워크 트래픽 방화벽 역할을 수행하고, 인스턴스로 들어오는 트래픽은 보안 그룹(Security Group) 이 방화벽 역할을 수행한다. 네트워크 ACL 이나 보안 그룹이나, 인바운드(서버로 들어오는 방향) 및 아웃바운드(서버에서 인터넷으로 나가는 방향) 라는 트래픽 방향 정책을 설정할 수 있고, 각기 다르게 동작하므로 적절한 설정이 필요하다.

VPC 가 통신하는 네트워크 트래픽 Log 를 확인하려면 Amazon VPC Flow Logs 서비스로 확인할 수 있다.

보안 그룹과 네트워크 ACL 의 상태

보안 그룹은 Stateful 방식으로 동작한다. 이는 만약 인바운드로 Request 트래픽이 통과했다면, 아웃바운드로 Response 를 전달할 때는 인바운드 트래픽을 기억하고 있기 때문에 그냥 Bypass 한다.

네트워크 ACL 은 Stateless 방식으로 동작한다. 이는 인바운드, 아웃바운드 트래픽이 매번 정책을 확인한다는 뜻으로, 인바운드로 통과되었다고 하더라고 아웃바운드에서 허용되어 있지 않으면 반환이 막히게 된다.

보안 그룹과 네트워크 ACL 의 정책 테이블

보안 그룹, 네트워크 ACL 은 모두 위→아래 방향으로 테이블에서 허용 여부를 확인한다는 공통점이 있다.

보안 그룹은 정책 테이블의 마지막 행 까지 일치하지 않으면 암묵적으로 트래픽을 거부한다.

네트워크 ACL 은 트래픽 거부 정책이 기본적으로 맨 아래에 명시적으로 정의되어 있고, 명시적으로 정의되어 있어야한다.

VPC 에서 서브넷이 외부 인터넷과 통신하려면 반드시 인터넷 게이트웨이를 거쳐야 한다. 여기서 IP 를 변환해서 통신하려면 NAT 게이트웨이 라는 VPC 요소를 거쳐 인터넷 게이트웨이를 통해 인터넷과 통신할 수 있다.

NAT 게이트웨이 (Network Address Translation Gateway) ***

프라이빗 서브넷 => 외부 인터넷으로 통신하기 위해, 프라이빗 IP 를 퍼블릭 IP 로 변환하는 장치

커스텀 라우팅 테이블에는 [0.0.0.0/0, NAT Gateway] 로 등록하여 사용한다.

주의할 사항은 NAT Gateway 는 Public Subnet 에 위치해야 한다.

VPC 내에 속한 서브넷이 외부 인터넷에 데이터를 전송하는 흐름

  1. 서브넷이 데이터(IP, 즉 L3 계층 이기 때문에 패킷을 의미)를 가상 라우터에 전달

  2. 가상 라우터는 라우팅 테이블을 확인하고 인터넷 게이트웨이에 데이터를 전달

  3. 인터넷 게이트웨이는 인터넷 구간과 통신

  4. "프라이빗” 서브넷의 경우 가상 라우터에 데이터를 전달하여도 인터넷 게이트웨이로 전달하지 않는다.

VPC 설정 예시

VPC 가 사용하는 IP 가 10.0.0.0/16 일때 이 내부에 서브넷 마스크는 3 Octet (x.x.0.0~x.x.256.256) 부터 이므로 서브넷 IP 는 10.0.x.x/24 이상 이다.

0.0.0.0/0 으로 라우팅 테이블에 추가하면, 게이트웨이로 통신 한다는 뜻이다. (인터넷, NAT 공통, 타깃 설정)

10.0.0.0/16 으로 라우팅 테이블에 추가하면, VPC 로컬 통신이 가능하다는 뜻이다.

프라이빗 서브넷은 인터넷과 직접 통신을 할 수 없기 때문에, 통신 타겟을 인터넷 게이트웨이가 아닌, NAT 게이트웨이로 설정해야 한다.

Last updated