티스토리 뷰

VPC에 대해 알아보겠습니다.

 

 

 

VPC 적용 전

VPC가 없다면 EC2 인스턴스들이 서로 거미줄처럼 연결되고 인터넷과 연결됩니다.

이 구조의 단점은 하나의 변경사항 OR 추가만 되도 모든 인스턴스를 수정해야하는 불상사하 펼쳐집니다.

 

 

VPC 적용 후

보기만 해도 깔끔하죠?

VPC를 적용하면 위 그림과 같이 VPC 별로 네트워크를 구성할 수 있고 각각의 VPC에 따라 다르게 네트워크 설정을 줄 수 있습니다.

 

 

VPC를 구축하는 과정

 

네트워크에서 해당 VPC를 설정합니다.

 

계정을 만들고 EC2 생성을 하면 하나의 리전에서 만들어지는 기본 리소스는 7가지가 있습니다.

 

|  VPC(Virtual Private Cloud)란?

 

- 2019년부터 모든 사용자들에게 VPC 적용이 강제적으로 부여됐기 때문에, 대부분의 서비스는 VPC 없이는 사용할 수 없습니다.

 

프라이빗 클라우드를 만드는 가장 기본이 되는 리소스입니다.


이름IPv4 CIDR 블록으로 구성되어 있습니다.

 

CIDR : 하나의 VPC 내에 있는 여러 IP 주소를 각각의 Subnet으로 분리/분해 하는 방법.

 

  • CIDP 블록
     IP의 범위를 지정하는 방식
     IP주소 + / + 넷마스크 로 구성되어 있음
    ex) 192.123.0.0/넷마스크 숫자

    - 넷마스크 숫자는 IP의 범위를 나타내며 계산 방법은 2^(32-n) 입니다.
    ex. 192.123.0.0/24 면 2^(32-24)=256, 즉 245개의 IP주소를 의미합니다. (192.123.0.0 ~ 192.123.1.255)

VPC에서 사용하는 사설 아이피 대역은 아래와같습니다.

- 10.0.0.0 ~ 10.255.255.255(10/8 prefix)

- 172.16.0.0 ~ 172.31.255.255(182.16/12 prefix)

- 192.168.0.0 ~ 192.168.255.255(192.168/16 prefix)

 

 

VPC 범위 내에서 IP를 전부 할당하면 더 이상 리소스를 만들 수 없기 때문에 적절한 크기의 VPC를 만들어야 하고, 최대크기는 16입니다.(2^(32-16)=65536)

 

 

VPC 1개에 속한 서브넷 2개로 피어링되는 VPC 2개

 

한번 설정된 아이피대역은 수정할 수 없으며 각 VPC는 하나의 리전에 종속됩니다.

각각의 VPC는 완전히 독립적이기 때문에 만약 VPC간 통신을 원한다면 VPC 피어링 서비스를 고려해볼 수 있습니다.

 

 

|  서브넷(Subnet)이란 ?

 

 

서브넷은 하나의 VPC에 여러개의 서브넷을 가질 수 있습니다.

 

서브넷을 나누는 이유는 더 많은 네트워크망을 만들기 위해서입니다.

 

인터넷과 연결되어 있는 서브넷을 public subnet, 연결되지 않은 서브넷은 private subnet이라고 합니다.

(왜 나누지? -> 보안때문입니다.)

 

public subnet

- 퍼블릭 서브넷에 존재하는 인스턴스는 인터넷에 연결되어 아웃바운드, 인바운드 트래픽을 주고 받을 수 있습니다.

 

private subnet

- 외부에 노출 X 접근 X

 

서브넷 안에 RDS, EC2와 같은 리소스들을 위치시킬 수 있습니다.

 

단, 하나의 가용존에 하나의 서브넷이 연결되기 때문에, 특정 리전에서 사용 가능한 가용존의 갯수를 미리 확인해야 합니다.

 

 

|  라우팅 테이블(Routing table) & 라우터(Router)

 

 

라우터(Router)

- 요청이 발생하면 가장 먼저 라우터로 트래픽을 전송합니다.(일반적으로는 VPC 내부 네트워크에 해당하는 주소는 local로 향합니다.)

- VPC 안에서 발생한 네트워크 요청을 처리하기 위해 어디로 트래픽을 전송해야 하는지 알려주는 역할입니다.

- 각각의 서브넷은 네트워크 트래픽 전달 규칙에 해당하는 라우팅 테이블을 갖고 있습니다.

 

위 그림에서 서브넷 A의 라우팅 테이블(목적지에 대한 이정표)은 범위에 명시된 172.31.0.0/16으로 VPC안의 network 범위를 갖습니다.

또, 이 요청은 타겟에 명시된 local에서 찾도록 되어있습니다.

 

즉, 전체적인 과정은 네트워크 요청이 들어오면 라우팅 테이블에 정의되어 있는 내용에 따라 data를 라우터(목적지)까지 전달합니다.

 

다만 치명적인 단점은 그 이외 외부로 통하는 트래픽은 처리할 수 없습니다.

이런 단점을 극복하기 위하여 인터넷 게이트웨이가 등장합니다.

 

|  인터넷 게이트웨이(IGA)

인터넷 게이트웨이는 VPC와 internet을 연결해주는 통로입니다.

서브넷B의 라우팅 테이블에서는 0.0.0.0/0으로 정의되어 있습니다.

이 뜻은 모든 트래픽에 대해 타겟에 정의된 IGA A(인터넷 게이트웨이를 통해 외부로 전송)로 향하라는 뜻입니다.

가장 먼저 라우팅 테이블은 목적지의 주소가 172로 시작되는 주소로 매칭이 되는지 확인 후 매칭이 되지 않는다면, IGA A로 보냅니다.

 

 

여기서, 인터넷과 연결되어 있는 서브넷을 퍼블릭 서브넷(publick subnet)

인터넷과 연결되어 있지 않은 서브넷을 프라이빗 서브넷(private subnet)이라고 합니다.

 

 

|  NAT Gateway(NAT 게이트웨이)

 

의문이 생겼습니다.

 

public subnet만 IGA를 통해 외부와 트래픽을 주고 받을 수 있다면 private subnet의 트래픽은 무조건 VPC 안에서만 처리될까?

 

정답은 아닙니다.

 

 

private subnet 역시 인터넷과 통신을 할 수 있습니다.

단, 직접 접근은 불가능합니다.

 

private subnet에서 발생하는 네트워크 요청이 VPC 내부의 주소를 목적지로 하는 것이 아니라면 ?

 

NAT 게이트웨이를 통하여 접속을합니다.

NAT 게이트웨이는 private subnet이 인터넷과 통신하기 위한 아웃바운드 인스턴스 입니다.

 

 

public subnet에 존재하는 NAT로 트래픽을 전송합니다.

 

 

트래픽을 받은 NAT은 public subnet의 라우팅 규칙에 따라 처리함으로써 private subnet이 인터넷과 통신할 수 있도록 합니다.

(라우팅 테이블의 타겟 부분을 보시면 NAT-Gateway가 적혀있습니다.)

 

 

 

 

예를들어, private 네트워크가 외부에서 요청되는 인바운드는 필요없더라도 인스턴스의 펌웨어나 혹은 주기적인 업데이트가 필요하여 아웃바운드 트래픽만 허용되야 할 경우가 있습니다.

 

이때, public subnet상에서 동작하는 Nat gateway는 private subnet 에서 외부로 요청하는 아웃바운드 트래픽을 받아 인터넷 게이트웨이와 연결합니다. (오른 쪽 그림 참고)

 

 

 

 

|  네트워크 NACL & 시큐리티(Security) 그룹

 

AWS에서 보안 설정하는 방법은 크게 NACLSecurity Group으로 나누어진다.

 

공통점

- 서브넷 앞단에서 트래픽을 제어하는 가상 방화벽입니다.

- 인바운드 트래픽과 아웃바운드 트래픽 보안정책을 설정할 수 있습니다.

 

 

차이점

 

 

Secutiry Group

 

 

먼저 사진부터 이해를 해보자면, ec2라는 인스턴스를 보안그룹(시큐리티 그룹)으로 감쌌습니다.

 

Request 입장에서, Response에게source의 175.34.136.133의 주소로 destination 까지의 1025포트로 요청을 보냅니다.

Response 입장에서는 13.120.100.100의 주소와 80포트로 다시 request destination으로 보냅니다.

 

옵션에는 Inbound로 80포트를, Outbound로 어떤 port도 밖으로 나가는 것을 허용하지 않는 설정을 했습니다.

 

이렇게 되면, 일반적으로 Outbound가 none이기 때문에 1025 port로 다시 쏴줄 수 없습니다.

 

하지만?

 

시큐리티 그룹은 다릅니다. 왜냐하면 Stateful 하기 때문입니다.

 

Stateful이라는 건 이전 상태(정확히는 Request port) 를 기억한다고 생각하시면 됩니다.

따라서 다시 Response 응답을 보낼 수 있습니다.

 

- stateful하다.

- 보안그룹은(Stateful) 모든 허용을 차단하도록 default 설정이 되어있습니다. (필요 시 허용으로 변환)

- 네트워크 ACL과 차이점은,  각각의 보안그룹별 트래픽을 설정할 수 있습니다.(특정 그룹을 지정시에만 인스턴스에 적용)

- 서브넷에서도 설정이 가능하며, EC2 인스턴스에서도 적용이 가능합니다.

 

 

NACL

 

 

- NACL은 Stateless 하기 때문에 이전상태가 필요없고 오직 Rule에 따라 행동합니다.

- 모든 트래픽을 기본설정되어있기때문에 불필요한 트래픽을 막도록 적용해야합니다

- 서브넷단위로 적용되며 리소스별로는 설정할 수 없습니다. (NACL이 설정된 서브넷 안의 모든 인스턴스에 적용)

- NACL은 여러개의 서브넷에 적용 가능합니다.

- 서브넷에 있는 모든 인스턴스에 자동으로 적용됩니다.

 

 

우선순위 : 보안그룹 > 네트워크 ACL

 

NACL과 가장 큰 차이점을 본다면 NACL은 네트워크 방화벽이고, Security Group은 인스턴스 방화벽입니다.

 

같은 서브넷끼리 통신할 때 : Security Group 정책을 거치면서 통신

 

다른 서브넷끼리 통신할 때 : NACL의 정책을 먼저 거친 후 , Security Group의 정책을 거치면서 통신

 

 

1차적 보안은 Security Group이고 더 나아가 2차 보안까지 하고자 한다면 NACL 까지 설정해주면 됩니다.

 

 

|  VPC Endpoint(Private Link, VPC 엔드포인트)

 

VPC 엔드 포인트는 IGA OR NAT Gateway 와 같은 다른 게이트웨이 없이 AWS 서비스와 연결하여 통신할 수 있는 private connection을 제공하는 서비스입니다.

 

Private link를 통해 AWS Service와 연결함으로써 data를 인터넷에 노출하지 않고 바로 접근할 수 있습니다.

또한 연결하는 Service의 IP Address를 바꾸는 등 정보의 변경 등 작업에서 불필요한 비용을 줄일 수 있습니다.

 

 

 

 

다시 전체 흐름도 살펴보겠습니다.

 

 

 

전체 흐름도

 

 

 

정리

action이 들어오면, IG를 통하여 data가 Router로 향하게 됩니다.

 

이때, 데이터의 방향은 Route table에 명시되어 있는데

Route table은 범위안에 알맞는 주소(ex 172.31.0~~) & target에서 local(private)에서 사용할 것 인지 외부(public)에서 사용할 것 인지 알려줍니다.

 

NAT 게이트웨이를 통하여 private subnet에서 외부로 트래픽 전송이 필요하다면 처리를 해줍니다.

 

 

 

 

보안 그룹은 방화벽 같은 역할이기 때문에 인바운드 트래픽과 아웃 바운드 트래픽 보안 정책을 설정할 수 있습니다.

NAT Gateway OR 게이트웨이가 존재하지 않는 경우 VPC End Point를 통하여 AWS 서비스와 연결(S3등)하여 통신할 수 있는 private connetction을 제공하는 서비스를 통하여 접근합니다.




Region안에 VPC는 여러개의 Region으로 확장할 수 없습니다.

Region 안에 VPC가 존재하며, VPC 안에는 AZ1(availability zone)이, AZ1안에는 Subnet이 존재합니다.
(Subnet안에는 여러개의 ec2 instance가 존재하죠)


VPC의 목적은 다양하지만, AWS 리소스간 허용을 최소화하고 그룹별로 묶어 구성하기 위해 사용합니다.
이외에도 독립적인 VPC간 네트워크 통신을 위한 VPC 피어링, 온프레미스와 VPC를 연결하는 AWS Diarect Connect, VPC에서 발생하는 로그를 기록하는 VPC Flow logs와 같은 서비스가 존재합니다.

 

 

참고) AZ1이란 밑에 그림과 같이 availabilty Zone(가용영역) 입니다