vpc와 subnet은 aws에서 만든 가상 네트워크 개념.
즉 (가상의) 컴퓨터 간의 망분리/ 네트워크 설정을 통해 보안을 구축하는 거라고 보면된다.
이를 위해서는 기본적으로 IP와 네트워크에 대한 개념도 이해하는 것이 좋아서 차례대로 정리해보려 한다.
IP 주소(IP Address)와 네트워크
IP = Internet Protocol
인터넷에서 데이터를 주고받을 때의 통신 규약.
OSI계층(이것이 뭐냐? 몰라도 되지만 궁금하면 해당 링크 , 링크2 참고!)에서 IP계층은 호스트의 주소지정과 패킷분할 및 조립 기능을 담당한다.
IP Address
인터넷 상에서 데이터를 주고받기 위해 모든 컴퓨터들이 가지는 각자의 주소.
IP와 IP주소는 다르다. IP주소는 IP에 의한 패킷 교환을 위한 컴퓨터의 네트워크 상의 고유주소이다.
IP주소를 부여하는 방식(대표적으로 두가지)
1️⃣ IPv4(IP version 4)
- 우리가 일반적으로 사용하는 주소. 32비트/8비트씩 4개의 구간으로 나누어서 나타낸다. 각 자릿수는 0~255의 범위로 표현이 가능하다.
여기서 잡고 넘어가면 좋을 개념으로 옥텟(Octet)이 있다. 사전적의미로는 컴퓨터에서 8개의 비트가 한데 모인 것을 말한다. IPv4 주소에서의 옥텟이라는 말의 의미는 32비트의 IP주소를 8비트로 나누는 단위라고 할 수 있다. 즉 IP주소는 32비트로 이루어져 있고, 그것을 옥텟단위로 끊어서 표현한다. 아래의 그림처럼 실제 IP주소는 컴퓨터에 저장될 때 비트단위로 저장되어 있을 것이며, 그것을 옥텟단위로 구분하여 10진수의 정수로 표현하고 각 옥텟사이를 마침표(.)로 구분해주면 우리가 일상적으로 사용하는 IPv4주소가 된다.
2️⃣ IPv6(IP version 6)
- IPv4방식의 IP주소의 고갈로 인해 등장한 IP주소 방식
- IPv4에서 32비트를 사용한 것과 달리, IPv6에서는 128비트다.
- 바로 해당 방식으로 IP주소를 변환하지 못하는 이유는 IPv6를 위한 인프라/보안 대책이 많이 약한 상태이다.
네트워크 클래스
- 이미 구성된 인프라를 최대한 활용하기 위해서, IPv4체계의 IP주소를 사용하는 네트워크 규모에 따라 관리하기 쉽도록 클래스라는 이름으로 나누기 시작했고, 이것이 네트워크 클래스의 등장 배경이다.
- 우리가 일반적으로 사용하는 IP주소는 A,B,C class 네트워크에 포함된다.
- IP 주소 = 네트워크 주소(인터넷 상에서 네트워크를 구분하는 역할) + 호스트 주소(특정 네트워크 안에 존재하는 기기들을 구분하는 역할)
- OSI 계층에서 라우터의 경우, 네트워크 주소만으로 판별하여 라우팅 해준다. 즉 호스트 주소는 라우터에게 별로 중요하지 않은 정보이다.
- 이후 네트워크 주소를 통해 해당 네트워크를 찾아가게 되면 그 네트워크 내에 여러개의 장치들이 연결되어 있을 것이다. 바로 네트워크 내에서 장치들을 구분하기 위해 존재하는 주소가 호스트 주소이다.
- D,E 클래스는 A,B,C 클래스 주소와는 다른 용도로 쓰인다. 일반 IP주소처럼 동일하게 사용할 수 없으며, 따라서 네트워크 주소, 호스트 주소로 나눠져있지 않은 특수용도 IP주소이다.
- D클래스 네트워크는 한 번의 메시지 송신으로 특정 네트워크 안에 있는 두 개 이상의 컴퓨터에게 전송할 수 있도록 하는 기술인 멀티캐스트를 위해 존재하는 네트워크이다.
- E클래스 네트워크는 예약된 주소로 미래에 사용될 용도로 구분해 놓은 네트워크이다.
Subnet
클래스 단위로 네트워크를 분류하다보니 어떤 기업에서는 적은양의 호스트 주소가 필요한데 B Class 네트워크를 할당받아서 IP주소에 여유가 생기고, 어떤 기업에서는 많은 양의 호스트 주소가 필요한데 C Class 네트워크를 할당받아서 IP주소가 부족해지는 현상이 생기게 된다.
따라서 좀 더 적절한 단위로 네트워크를 분할해야할 필요성이 생기면서 서브넷의 개념이 탄생했다.
- subnet은 즉 말그대로 subnetwork로 하나의 네트워크가 분할되어 나눠진 작은 네트워크이다.
네트워크를 분할하는 것을 서브네팅이라고 하는데, 서브넷 마스크를 통해 수행될 수 있다.
이에 대해서는 해당 블로그를 참고하는 것을 추천
VPC
VPC전에 VPN에 대해서 이해하고 넘어가기
VPN은 Virtual Private Network의 약자로 가상의 사설망(사설네트워크)이다. 실제로 컴퓨터 간의 네트워크를 분리하여 보안을 구축하려면 연결 선을 직접 다 수리해야하는 수고가 생기는데, 이러한 가상사설망을 활용해주면, 어떠한 물리적 공사없이 네트워크를 분리할 수있다.
실질적으로 VPN과 VPC는 같은 개념이며, aws에서 제공하는 VPN서비스를 VPC라고 생각하면 된다.
VPC란?
사용자만의 가상 사설 네트워크를 구성할수 있게 aws에서 제공하는 서비스이다.
VPC를 따로 쓴다 = 다른 네트워크다 = 통신이 인지하기에 다른 장소에 있다.
그리고 이러한 VPC의 IP대역을 쪼개서 구성하는 것을 서브넷이라고 한다.(VPC는 Network, subnet은 말그대로 subnetwork)
망분리가 된 aws 네트워크 구성도
VPC구성요소
1. 리전
전 세계에 위치해있는 각 aws 데이터 센터의 물리적 위치. 실제로 aws리전은 세계 각지 여러곳에서 호스팅하고 있으며 이를 통해 최종 사용자에게 가까운 여러 위치에 컴퓨팅 및 리소스를 배치할 수 있다.
2. 가용영역(Availability Zone)
각 리전은 가용영역이라고 알려진 격리된 위치를 여러 개의 IDC센터를 가지고 있다.
3. VPC
aws vpc를 시작하기 위해서는 vpc와 서브넷을 만들어야 한다. 생성에 허용된 블록크기는 /16넷마스크(IP 주소 65,536개) ~ / 28 넷마스크(IP주소 16개)입니다. VPC 주소 범위를 CIDR 블록형태로 지정
4. CIDR
aws에서 ip주소를 표현할 때 CIDR(사이더)라는 국제적인 표준을 사용한다. 사이더는 ip주소의 영역을 여러 네트워크영역과 호스트영역으로 나눌 때 유연하게 사용할 수 있다.
5. Subnet
subnet이 다르더라도 같은 VPC 내에 있는 PC끼리는 통신할 수 있다. (라우팅의 기본규칙인 local routing 때문)
(특별하게 ACL차단 설정을 하지 않았다면, 기본적으로 A서버에서 B서버로 접속이 가능하다.)
- 거대한 네트워크 대역의 VPC 주소를 잘개 쪼갠 네트워크 주소를 이야기함.
- 서브넷 생성시에는 해당 서브넷에 대한 사이더 블록을 지정해야 하며 한개의 가용영역 내에서만 존재해야 한다.
- 하나의 subnet은 하나의 zone내부에만 구성가능함. 하나의 subnet이 여러개의 zone에 걸쳐서 구성될 수 없음.
- default subnet은 public 서브넷임. default subnet을 사설 서브넷으로 변경 가능함.
- VPC는 암시적인 라우터를 가지고 있음.
- VPC는 자동으로 메인 라우팅 테이블을 가지고 있고, 이 라우팅 테이블은 사용자가 변경가능함.
- route table을 추가할수도 있음.
- 각 subnet은 라우팅을 조절하는 route table에 연결되어 있어야 한다. 따로 명시하지 않으면 메인 라우팅 테이블과 연결됨.
- 각 route는 목적지 CIDR과 target을 명시해야 한다.
a. Public Subnet
Internet Gateway연결을 통해서 외부와 통신할 수 있다. 내부에 Internet Gateway, ELB, Public IP/Elastic IP를 가진 인스턴스를 내부에 생성할 수 있다. 특히, Public Subnet 내에 있는 Nat Instance를 통하여 Private Subnet내에 있는 instances에 인터넷 접속이 가능하게 한다.
b. Private Subnet
기본적으로 외부와 차단되어 있다. Private IP만을 가지며, Internet inbound/outnound가 불가능하고 오직 다른 서브넷과의 연결만이 가능합니다. 오직 다른 subnet과만 연결이 가능하다.
Nat instance를 Public Subnet에 위치 생성하여 Private Subnet 내에 있는 instances이 인터넷을 가능하게 합니다.
NAT Instances
- private subnet에 있는 인스턴스들은 인터넷에 접근할수 없지만, private subnet에서 접근할 수 있는 NAT(Network Address Translation)용 인스턴스를 public subnet에 만들어서 private subnet에 있는 인스턴스들은 인터넷에 접근할 수 있게 된다.
[접근 방법]
private subnet에 있는 인스턴스들에서 나가는 트래픽은 우선 라우트 테이블로 가게되고 라우트 테이블은 그 트래픽들을 NAT로 보냄. 그러면 NAT는 그 트래픽들을 인터넷게이트웨이로 보내서 외부통신이 가능하게 됨. 인터넷에서 들어오는 트래픽은 NAT 인스턴스를 통해서 private subnet으로 가게 됨.
NAT인스턴스는 ec2 인스턴스 생성할때 community AMIs에 있는 Amazon Linux용 AMI중에서 NAT 관련한 AMI를 이용하여 생성하면 됨.
NAT 인스턴스가 만들어지면 management console에서 우클릭해서 “Change Source/Dest. Check”메뉴를 선택해서 disable해 주어야함.
ec2 인스턴스는 기본적으로 source, destination을 확인하는데, 이걸 확인하지 않도록해서 source나 destination이 자기자신이 아닌 트래픽을 주고받을수 있게 해줌.
6. Routing(라우팅)
라우팅 테이블을 사용하여 네트워크 트래픽이 전달되는 위치(경로)를 제어한다.
Route table
- 네트워크 트래픽을 라우트(route)하는 규칙들을 가지고 있음.
- 각 subnet마다 route table이 있음. 여러 subnet이 동일한 route table을 가질 수 있음.
7. InternetGateway
- VPC가 기본생성되었을때는 인터넷에 연결이 안되어 있음.
- 라우팅 테이블에 인터넷 게이트웨이를 향하는 적절한 규칙을 추가해주면 특정 서브넷이 인터넷과 경결된다.
- VPC에 Internet gateway를 연결해줘야지 VPC내부 인스턴스들에서 인터넷으로 접근할 수 있음.
- 외부와 직접 연결할 수 있는, Public IP 통신이 가능한 곳을 Public Subnet 또는 DMZ 라고 부른다. 비록 외부에서 연결 가능한 DMZ(public subnet)내의 PC이지만, ACL이나 Security Group 을 통해 접근제어를 설정 할 수 있다.(아무튼 외부와 연결가능한 곳을, 비무장지대, DMZ 라고 부른다. 외부와 handshake를 해야하는 곳이다.)
8. 네트워크 ACL과 보안그룹
- 서브넷 레벨에서 운영
- 서브넷에 연결되어서 인바운드/아웃바운드 트래픽을 조절할 수 있는 방화벽.
- 1개 이상의 서브넷 내부와 외부의 트래픽을 제어하기 위한 방화벽 역할을 하는 선택적 보안 계층이다.
- allow, deny 규칙 설정가능함.
- stateless한 방화벽. 그렇기 때문에 ephemeral port를 직접 열어줘야 함.
- 규칙에 대한 번호가 있어서 작은 번호부터 정해진 순서대로 규칙이 적용됨.(번호가 낮은 것부터 우선으로 적용)
- 최대 32766개의 규칙순서가 있고, AWS 기본권장은 규칙번호를 정할때 100단위로 정하는 것임.
- 인스턴스 레벨에서 운영
- EC2 인스턴스에 직접 연결되서 인바운드, 아웃바운드 트래픽을 조절할수 있는 방화벽.
- allow 규칙만 설정가능함.
- VPC당 100개까지만 생성할수 있고, 하나의 security group에는 50개까지의 룰만 설정가능함.
- 인스턴스 하나에 5개까지 security group을 설정할 수 있음.
- stateful(상태저장)한 방화벽 / 규칙에 관계없이 반환 트래픽이 자동으로 허용
- 트래픽 허용 여부를 결정하기 전에 모든 규칙을 평가
9. 기타
a. Network Interfaces
기본적으로 인스턴스(서버)마다 vpc 대역내의 사설 IP가 할당된 network interface가 있으며 사용자가 원한다면 ENI(Elastic Network Interface)를 추가할 수있다.
b. DHCP options set
- DHCP(Dynamic Host Configuration Protocol)은 TCP/IP 네트워크 상의 호스트 설정 정보를 전달할 때 표준을 제공함.
- DHCP 메세지의 options 필드는 도메인 이름, DNS, netbios-node-type같은 파라메터들을 포함하고 있음.
c. virtual private gateway
- AWS에 있는 VPN 커넥션.
- AWS VPC와 외부 사용자가 이용하고 있는 내부 네트워크 간의 연결에 이용
d. customer gateway
- VPN 커넥션에 사용되는 사용자측 물리적 장비나 소프트웨어
- AWS VPC와 외부 사용자가 이용하고 있는 내부 네트워크 간의 연결에 이용

- 일반적인 EC2 인스턴스들은 다른사용자와 하드웨어 자원을 공유하지만 VPC안에서 dedicated 옵션을 이용하면 전용 하드웨어를 이용할 수 있음.
- VPC에 강제로 전체 설정할수도 있고, 필요한 EC2 인스턴스에만 지정하게 할수도 있음.
- 몇몇 AWS 서비스에는 적용할수 없음. ex) RDS, EBS
- 2개의 VPC간에 사설IP를 이용해서 통신가능하게하는 커넥션.
- 같은 region안에 있는 다른 AWS 계정에 속한 VPC들을 같은 네트워크에 있는것으로 인식하게 함.
VPC와 보안
망분리에 관련된 금융업쪽의 법규와 ISMS 같은 보안인증을 받기 위한 사항들이 차곡차곡 생겼는데 그 중 하나가 고객의 개인정보가 든 DB서버의 경우 망을 분리 해야한다는 것이었다. 즉 Web 애플리케이션 서버가 외부의 침입으로 해킹되면 데이터베이스에도 피해가 간다.
그래서 db를 연결하는 ec2와 db를 각각 private 에 넣어 인터넷 연결을 끊어버리는 것이다.
-> RDS와 EC2 VPC를 분리해서 네트워크를 구성해야 하는 이유
Reference
[매뉴얼][초보자를 위한 AWS웹구축] 4. 네트워크 구성하기(VPC, Subnet, Route Table, Internet Gateway)
이번 페이지에서는 네트워크 구성에 대한 VPC, Subnet, Route Table, Internet Gateway 구축에 대해 알아보고자 합니다. 그전에 먼저 AWS에서 제공하는 VPC와 Subnet의 개념에 대해 간단히 살펴 보도록 하겠습니
tech.cloud.nongshim.co.kr
https://hyoje420.tistory.com/32
[Network]서브넷(Subnet)
이 글을 읽기전에 IP주소의 개념과 네트워크 클래스를 알 필요가 있다. 따라서 이 글을 읽기 전에 링크를 참고하기를 추천한다. [Network]IP주소(IP Address) http://hyoje420.tistory.com/10 [Network]네트워크..
hyoje420.tistory.com
[AWS] 가장쉽게 VPC 개념잡기
가장쉽게 VPC 알아보기
medium.com
https://arisu1000.tistory.com/27744
AWS VPC 개념 정리
Virtual Private Could 사용자만의 가상 사설 네트워크를 구성할수 있게 해주는 서비스. 서비스 이용에 추가 비용은 없음. security group에서 outbound 관련 제한 설정도 가능함. vpc가 아닌 경우에는 inbound만
arisu1000.tistory.com
https://memory-hub.tistory.com/11
[AWS] VPC 란
VPC 란? Amazon Virtual Private Cloud (VPC)는 AWS 클라우드에서 다른 고객과 완벽하게 논리적으로 격리된 네트워크 공간을 제공하여 프로비저닝하여 가상 네트워크에서 AWS 리소스를 만드는데 사용하는 리
memory-hub.tistory.com
https://blog.lael.be/post/9534
아마존 서버 네트워크 망분리 구축하기 (VPC, DMZ)
SA(솔루션 아키텍트)의 범위중 하나인 네트워크 망 설계에 대해 알아보도록 하자. 대기업의 보안 기준을 지키기 위하거나, ISMS 인증 등을 받기 위해 반드시 해야하는 작업이다. 그리고 굳이 이런
blog.lael.be
'CS STUDY > Computer Science' 카테고리의 다른 글
[Network]로드밸런서란? (0) | 2022.05.17 |
---|---|
Disk I/O 기반 VS 인메모리 기반 (0) | 2022.03.07 |
프로세스 교착상태 (0) | 2022.03.01 |
CPU bound VS I/O bound (0) | 2022.03.01 |
프로세스 VS 스레드 (1) | 2021.03.20 |