✅ VPC (Virtual Public Cloud)란 ?
- 사용자가 정의하는 가상의 네트워크이다.
- VPC를 통해 인스턴스가 속하는 네트워크를 구분하여 각 네트워크에 맞는 설정을 부여할 수 있다.
만약 VPC가 없다면 EC2 인스턴스들이 서로 거미줄처럼 연결되고 인터넷과 연결된다.
이런 구조는 시스템의 복잡도를 매우 끌어올릴 뿐 아니라 하나의 인스턴스만 추가돼도 모든 인스턴스를 수정해야하는 불편함이 생긴다. 마치 인터넷 전용선을 다시 까는 것과 같다.
VPC를 적용하면 위 그림과 같이 VPC별로 네트워크를 구성할 수 있고 각각의 VPC에 따라 다르게 네트워크 설정을 줄 수 있다. 또한 각각의 VPC는 완전히 독립된 네트워크처럼 작용하게 된다.
✅ 기본 VPC의 구성 요소
- VPC
- 서브넷
- 라우트 테이블
- 인터넷 게이트웨이
- 네트워크 ACL
- 시큐리티 그룹
- DHCP 옵션셋
✅ VPC 구축 과정
✅ VPC
VPC는 독립된 하나의 네트워크를 구성하기 위한 가장 큰 단위이다. 각 리전에 종속된다.
VPC를 구축하기 위해서는 VPC의 아이피범위를 RFC1918이라는 사설 아이피 대역에 맞춰 구축해야 한다.
- 사설 아이피 (Private IP)란 ?
인터넷을 위해 사용하는 것이 아닌 내부 사용자들끼리 사용하는 아이피 주소 대역이다.
예를 들어 가족 중 누군가가 "안방에서 리모컨을 가져다 줘" 라고 하면 나는 옆집이 아닌 "우리집" 안방으로 찾아갈 것이다. 즉 여기서 안방이 Private IP(사설 아이피) 우리집 주소가 Public IP가 되는 것이다.
옆집도 안방이 있고 우리집에도 안방이 있지만 서로 안방을 들었을 때 헷갈리지 않는다.
안방, 작은방, 큰방처럼 내부에서 쓰는 주소를 사설 아이피 대역이라고 부르며 내부 네트워크 내에서 위치를 찾아갈 때 사용한다. 친구나 동생의 친구가 찾아올 때는 도로명 주소 (Public IP)를 알려주면 되고 같은 집에 있는 동생에게 갈 때는 동생방 (Private IP)로 찾아간다.
VPC에서 사용하는 사설 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)
✅ CIDR 블록
IP의 범위를 지정하는 방식이다.
IP 주소 + / + 넷마스크로 구성되어 있다. ex) 192.123.0.0/넷마스크 숫자
넷마스크의 숫자는 IP의 범위를 나타내며 계산 방법은 2^(32-n)이다.
예를 들어 192.123.0.0/24 면 2^(32-24) = 256, 즉 256개의 IP 주소를 의미한다.
(192.123.0.0 ~ 192.123.0.255) 여기서 "192.123.0.0"은 네트워크 주소로서 사용되고
"192.123.0.255"는 브로드캐스트 주소로 사용되므로 실제 사용가능한 주소는 254개가 된다.
한번 설정된 IP 대역은 수정할 수 없으며 각 VPC는 하나의 리전에 종속된다. 각각의 VPC는 완전히 독립적이기 때문에 만약 VPC간 통신을 원한다면 VPC Peering Service를 고려해볼 수 있다.
✅ AWS에서의 Subnet
각 서브넷 CIDR 블록에서 첫 4개의 IP 주소와 마지막 IP 주소는 사용자가 사용할 수 없으므로 인스턴스에 할당할 수 없다. 예를 들어 10.0.0.0/24 CIDR 블록의 서브넷에서 5개 IP 주소는 아래 목적으로 예약되어 있다.
10.0.0.0: 네트워크 주소.
10.0.0.1: AWS에서 VPC 라우터용으로 예약
10.0.0.2: DNS 서버의 IP 주소는 기본 VPC 네트워크 범위에 2를 더한 주소를 사용합니다
10.0.0.3: AWS에서 나중에 사용하려고 예약
10.0.0.255: 네트워크 브로드캐스트 주소. VPC에서는 브로드캐스트를 지원하지 않으므로, 이 주소를 예약합니다.
✅ 서브넷 (Subnet)
- 서브넷은 VPC의 IP 주소를 나누어 리소스가 배치되는 물리적인 주소 범위를 뜻한다.
- 하나의 VPC에 N개의 서브넷을 가질 수 있다.
- VPC를 잘게 나눈 것이 서브넷이기 때문에 VPC보다 대역폭이 낮으며 하나의 AZ(Availability Zone)에 하나의 서브넷이 연결되므로 리전의 AZ 수를 미리 확인하고 설정해야 한다.
✅ AWS Subnet의 종류
- Public Subnet
내부에 Internet Gateway, ELB, Public IP/Elastic IP를 가진 인스턴스를 내부에 생성할 수 있으며 Internet Gateway 연결을 통해 외부와 통신할 수 있다. - Private Subnet
기본적으로 외부와 차단되어 있다. Private Subnet의 인스턴스들은 Private IP만을 가지고 있으며 Internet inbound/outbound가 불가능하고 오직 다른 서브넷과의 연결만이 가능하다.
✅ 서브넷팅을 하는 이유 ?
- IP 주소를 효율적으로 사용하기 위해 서비스의 행위 별로 IP를 분리하여 효율적으로 운영할 수 있다.
- 네트워크를 분리하여 보안성을 강화하기 위해 외부에 노출되어서는 안되는 서비스를 별도로 관리할 수 있다.
✅ 라우터 & 라우트 테이블
네트워크 요청이 발생하게되면 데이터는 우선 라우터로 향한다. 라우터란 목적지이며 라우팅 테이블은 각 목적지에 대한 이정표이다.
데이터는 라우터로 향하게되며 네트워크 요청은 각각 정의된 라우팅 테이블에 따라 작동한다.
서브넷 A의 라우팅 테이블은 172.31.0.0/16 즉 VPC 안의 네트워크 범위를 갖는 네트워크 요청은 로컬에서 찾도록 되어있다. 하지만 그 외의 외부로 통하는 트래픽을 처리할 수 없다. 이 때 사용하는 것이 인터넷 게이트웨이이다.
✅ Internet Gateway
인터넷 게이트웨이는 VPC 리소스와 인터넷 간 통신을 활성화하기 위해 VPC에 연결하는 게이트웨이이다.
VPC에 생성된 인스턴스들은 격리된 환경이므로 기본적으로 인터넷을 사용할 수 없다.
인터넷에 연결하기 위해서는 인터넷 게이트웨이를 사용해 VPC에 연결해야 하고 이후 라우팅 테이블에 인터넷 게이트웨이를 향하는 적절한 규칙을 추가해주면 특정 서브넷이 인터넷과 연결된다.
서브넷 B의 라우팅 테이블을 보면 0.0.0.0/0으로 정의되어 있다. 이 뜻은 모든 트래픽에 대해 IGA(인터넷 게이트웨이) A로 향하라는 뜻이다.
라우팅 규칙을 설정하면 네트워크 요청 발생 시 목적지의 IP 주소가 172.31.0.0/16 (VPC 내부)에 해당하는지 확인한다.
해당하지 않는 모든 트래픽은 인터넷 게이트웨이를 통해 외부로 전송되어 목적지를 찾는다.
✅ Nat Gateway
Private Subnet이 인터넷과 통신하기위한 아웃바운드 인스턴스이다.
인스턴스의 펌웨어 또는 주기적인 업데이트가 필요하여 아웃바운드 트래픽만 허용해야 할 경우가 있다.
Public Subnet만 인터넷 게이트웨이를 통해 외부와 트래픽을 주고받을 수 있다고 해서 Private Subnet의 트래픽은 무조건 VPC 안에서만 처리되는 것이 아니다.
Private Subnet 역시 마찬가지로 인터넷과 통신할 수 있다. 하지만 Private Subnet에서 직접하는 것은 불가능하다.
트래픽을 Public Subnet에 속한 인스턴스에 전송해 인터넷과 통신을 해야한다. 이 역할을 하는 것이 NAT gateway이다.
Private Subnet에서 발생하는 네트워크 요청이 VPC 내부의 주소를 목적지로 하는 것이 아니라면 Public Subnet에 존재하는 NAT으로 트래픽을 전송한다. 트래픽을 받은 NAT은 Public Subnet의 라우팅 규칙에 따라 처리함으로써 Private Subnet이 인터넷과 통신할 수 있다.
✅ 네트워크ACL & 보안 그룹
네트워크 ACL은 주고(outbound) 받는(inbound) 트래픽을 제어하는 가상 방화벽이다. 하나의 네트워크 ACL은 다수의 서브넷에서 재사용할 수 있다.
- 네트워크 ACL - 서브넷 앞단에서 트래픽을 제어하는 역할
- 보안 그룹 - 인스턴스의 앞단에서 트래픽을 제어하는 가상 방화벽
따라서 네트워크 ACL의 규칙을 통과하더라도 보안 그룹의 규칙을 통과하지 못 하면 인스턴스와는 통신하지 못 할 수 있다. 이 두 가지 리소스를 통해서 안전한 네트워크 환경을 구축할 수 있다.
보안 그룹 | 네트워크 ACL |
인스턴스 레벨에서 운영됩니다. | 서브넷 레벨에서 운영됩니다. |
허용 규칙만 지원 | 허용 및 거부 규칙 지원 |
상태 저장 (stateful) 규칙에 관계없이 반환 트래픽이 자동으로 허용됨 |
상태 비저장(stateless) 반환 트래픽이 규칙에 의해 명시적으로 허용되어야 함 |
트래픽 허용 여부를 결정하기 전에 모든 규칙을 평가함 | 트래픽 허용 여부를 결정할 때 번호가 가장 낮은 규칙부터 순서대로 규칙을 처리합니다. |
인스턴스 시작 시 누군가 보안 그룹을 지정하거나, 나중에 보안 그룹을 인스턴스와 연결하는 경우에만 인스턴스에 적용됨 | 연결된 서브넷의 모든 인스턴스에 자동 적용됨 (보안 그룹 규칙이 지나치게 허용적일 경우 추가 보안 계층 제공) |
✅ VPC Endpoint (Private Link, VPC 엔드포인트)
VPC 엔드포인트는 게이트웨이 없이 AWS 서비스와 연결하여 통신할 수 있는 private connection을 제공하는 서비스이다. Private Link를 통해 AWS와 연결함으로써 데이터를 인터넷에 노출하지 않고 바로 접근할 수 있다.
또한 연결하는 서비스의 IP 주소를 바꾸는 등 네트워크 정보의 변경 등의 작업에서 불필요하게 발생하는 비용을 줄일 수 있다.
참고글
'Public Cloud > AWS' 카테고리의 다른 글
AWS EKS로 웹 앱을 배포해보자 ! - 2. Application 배포하기 (0) | 2022.03.16 |
---|---|
AWS EKS로 웹 앱을 배포해보자 ! - 1. EKS 구성하기 (0) | 2022.03.16 |
AWS EKS로 웹 앱을 배포해보자 ! - 0. 초기 설정 (0) | 2022.03.16 |
[AWS] AWS EKS란 ? (0) | 2022.03.15 |
[AWS] Amazon Compute Services (0) | 2022.03.02 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!