일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- Spring
- lombok
- java
- Google OAuth
- nestjs
- 일급 객체
- OAuth 2.0
- middleware
- builder
- Dependency Injection
- spring security
- Volatile
- synchronized
- 일급 컬렉션
- factory
- Today
- Total
HJW's IT Blog
AWS VPC 구성 요소 총정리 본문
1. VPC 란 무엇인가?
AWS VPC 는 사용자의 AWS 공간 전용 가상 네트워크
이다. 이러한 가상 네트워크를 통해 사용자는 AWS 내 논리적으로 격리된 자신만의 네트워크 공간을 정의하고, VPC
안에서 안전하게 EC2 혹은 다른 AWS 리소스를 실행할 수 있다. 이러한 격리된 공간 내에선, 사용자가 리소스에 대해서 완전한 통제권을 가질 수 있게 만든다.
VPC는 기존 온 프레미스 환경과 유사하게 격리된 가상 네트워크를 프로비저닝할 수 있다. 예를 들어 IP 주소 범위, Subnet, Routing Table 등을 정의하여 사용할 수 있다.
2. VPC 구성 옵션
VPC
는 단일 구성 요소가 아닌 여러 구성요소들의 집합이다. 이러한 구성 요소들은 독립적인 역할을 수행 하면서도, 유기적으로 연결되어 하나의 안전하고 효율적인 가상 네트워크를 제공한다.
하지만 다양한 요소들이 연결되어 있는 만큼 그 구성요소간의 상호작용, 구조에 대한 이해가 필수적이다.
2.0 CIDR
Classless Inter-Domain Routing
의 약자로, 인터넷 상의 라우팅 효율성을 향상 시키는 IP 주소 할당 방법이다.
인터넷에 연결되는 모든 컴퓨터, 서버, 디바이스에는 고유한 IP 주소가 연결되어 있다. 이러한 IP 주소는 크게 두 부분으로 나뉜다. 네트워크의 고유 식별자를 가르키는 Network Address
와 네트워크 상의 개별 디바이스 식별자를 가르키는 Host Address
가 있다.
CIDR
블록은 동일한 네트워크 접두사와 비트 수를 공유하는 IP 주소의 묶음이다. CIDR
은 다음과 같은 형태로 구성된다
IP 주소 / 접두사 비트 수 : ex ) 192.168.0.0/24
위 예시의 의미는, Network Address
가 192.168.0.0 이며, 앞의 24 비트가 network 를 나타내고, 나머지 8비트는 호스트를 식별하는데에 사용된다는 뜻이다.
참고
IPv4 는 총 32 비트로 구성되며, 이는 4개의 Octet 으로 나뉜다. 각 Ocet은 8 비트이다. 예를 들어 192.168.0.0 을 비트로 바꾼다면
192 : 11000000
168 : 10101000
0 : 00000000
0 : 00000000
위 CIDR 설명과 연계를 해보자면 192.168.0.0/24
일때, 다음과 같은 의미이다.
11000000 10101000 00000000 | 00000000
[ 네트워크 부분 (24비트) ] | [ 호스트 부분 (8비트) ]
다음은 AWS 가입시 default 로 주어지는 VPC 이다
이 VPC는 총 65531 개의 ip 를 호스트 할 수 있으며 여러 서브넷으로 분할 될 수도 있다.
2.1 Subnet
Subnet
은 하나의 VPC
내부에서 IP 주소의 범위를 나눈 작은 네트워크 단위이다. 쉽게 말해, VPC
가 하나의 건물이라면, Subnet
은 해당 건물 내부의 하나의 방과 같다.
VPC
는 IP 주소 범위를 설정해 두고, 이러한 Subnet
을 통해 이 범위를 논리적으로 나누어 사용한다.
VPC
는 여러 Availability Zone
에 걸쳐 존재할 수 있는 반면, 각각의 Subnet
은 특정 Availability Zone
에 존재한다. 이처럼 세분화된 Subnet 을 통해 이용자는 세밀한 보안 설정, 가용성 확보, 네트워크 트레픽 제어 등의 이점을 얻을 수 있다.
Subnet
은 크게 두가지 종류로 나뉜다. Private Subnet
, Public Subnet
.
- Private Subnet :
Gateway
로 직접 연결되는 경로가 없다. Private Subnet 내부의 리소스를 외부 인터넷에서 접근하기 위해NAT
디바이스가 필요하다 - Public Subnet :
Gateway
로 직접 연결되는 경로가 있으며, 인터넷을 통해 리소스에 접근할 수 있다.
다음은 aws default vpc subnet 의 예시이다.
이전에 보았던 하나의 VPC 를 4090개씩 쪼개어 4개의 Subnet 을 나눈 것을 볼 수 있다.
2.1.1 Subnet 쪼개기
AWS
는 각 subnet
당 5개의 ip 를 예약해 둔다.
Subnet
의 첫번째 주소 (네트워크 주소)Subnet
의 두번째 주소 (VPC 라우터 주소)Subnet
의 세번째 주소 (DNS 주소)- AWS 예약 주소
- Broadcast 주소 (
Subnet의 마지막 주소
)
그렇기 때문에, Subnet 을 너무 잘게 쪼갠다면, 사실상 사용할 수 있는 ip 주소가 없을 수도 있다. 예를 들어 10.0.0.0/29 로 Subnet 을 설정했다면, 사실상 사용할 수 있는 ip 개수는, 2^3 = 8
, 즉 예약된 ip 를 제외하면 3개의 ip 주소만이 사용 가능한 것이다.
VPC
를 만약 다음과 같이 생성했다고 가정하자 : 10.0.0.0/16
그렇다면 총 2^16 = 65536 개의 ip 주소를 사용 가능하다. 그렇다면 개발자는 이 범위 내에서 Subnet
을 자유좁게 쪼갤 수 있다.
예를 들어 다음과 같이 public 과 private subnet 을 나눌 수도 있다.
public
:10.0.1.0/24
private
:10.0.2.0/24
2.2 Route Table
Route Table
은 VPC
내에서, 트레픽이 어떤 경로를 통해 이동할지를 결정하는 중요한 요소이다. 즉, 특정 목적지에 도달하기 위해 어떤 길로 가야 하는지를 정의한 네트워크 경로와 지도이다.
각 Subnet
은 하나의 Route Table
과 연결되어 있으며, 특정 Subnet
이 목적지인 트레픽이 Router
에 들어온다면, 해당 Router
는 Router Table
을 참조하여 해당 요청을 알맞은Subnet
에 전달한다.
Route Table
은 다음과 같이 구성된다
- CIDR 형식의 목적지
- 해당 목적지로 가기 위한 Gateway, interface, NAT 등
- Propagated Routes : VPN 등 동적으로 추가된 경로
기본 라우팅 테이블이다. 여기서 0.0.0.0/0 은 모든 IP 주소를 의미하며 igw- 는 인터넷 게이트 웨이를 뜻한다. 즉, 이 규칙으로 연결된 서브넷은 인터넷과 통신 가능한 public subnet 이 된다는 뜻이다.
또한 이전에 보았던 기본 VPC 주소가 있는데, 대상이 local 로 되어 있다. 이는 동일한 VPC 내의 서브넷간 통신이 가능하다는 뜻이다. 즉, 같은 VPC 내부에 있다면 서로 통신이 가능하다.
2.3 Internet Gateway
Internet Gateway
란 VPC
내부의 리소스가 인터넷과 양방향 으로 안전하게 통신할 수 있도록 해주는 구성 요소이다. 이를 통해 외부에서 VPC에 접근할 수도 있고, VPC 에서 외부 인터넷으로 접근할 수도 있다.
기본적으로 VPC 는 인터넷과 연결되어 있지 않다. 그렇기 때문에, IGW
를 통해 외부 인터넷에 연결을 해야만 한다.
IGW
를 통해 인터넷에 접속하려면 다음과 같은 조건들이 충족 되어야 한다.
- Public IP 가 할당된 Instance
- IGW 와 연결된 VPC
- Route Table 에 VPC -> IGW 의 경로
- Security Group 정의
여기까지의 VPC 구조를 간단하게 보자면 다음과 같이 표현할 수 있다.
2.4 NAT Gateway
기본적으로 Private Subnet 에 속한 인스턴스는 외부와의 연결이 되지 않는다(Public IP가 없기 때문). 하지만 특정 상황에선 이러한 private subnet 속의 인스턴스가 외부 인터넷에 접속해야 하는 상황이 발생하는데, 이때 사용되는 것이 NAT
이다.
NAT (Network Address Translation)
은 Private Subnet 의 인스턴스가 외부 인터넷으로 나갈 수 있게 해주는 역할을 한다. 하지만, 외부에서 내부로의 직접 접근은 차단하여 보안성과 인터넷 접근을 동시에 할 수 있도록 만들어준다.
NAT
은 Private IP 주소가 외부로 나갈 때 Public IP로 변환하여 외부 통신을 가능하게 해준다. 이러한 NAT
게이트웨이는 인바운드 트레픽은 차단하면서 아웃바운드 트레픽은 허용한다.
2.5 Elastic IP
Elastic IP
는 AWS 에서 제공하는 고정 IPv4 주소이다.
AWS 의 인스턴스, 혹은 NAT
은 Public IP 주소를 필요로 한다. 하지만, 기본적으로 인스턴스를 중지 후 시작하게 되면 IP 주소는 변경이 되는데, 외부에서 안정적으로 접속하려면 변하지 않는 static ip address 가 필요하다.
그렇기 때문에 이러한 인스턴스에 Elastic IP
를 부여하여 인스턴스가 종료되고 다시 시작되어도 항상 동일한 IP 를 유지할 수 있도록 해준다.
2.6 Security Group
Security Group
은 EC2 인스턴스, 혹은 네트워크 인터페이스 등에 적용되는 가상의 방화벽이다.
인바운드 규칙을 설정하여 어떤 트레픽이 들어오는 것을 허용할지, 아웃바운드 규칙을 설정하여 어떤 트레픽이 나가는 것을 허용할 지를 결정한다.
즉, 어떤 IP 주소에서, 어떤 포트를 이용해, 어떤 프로토콜로 요청을 주고 받을 수 있는지를 정의한 명세서와 같다.
Security Group
에 정의되지 않은 트레픽은 모두 차단된다. 즉, Blacklist 를 지정할 수 없고 오로지 Whitelist 만 존재한다.
Security Group
의 중요한 점은 Stateful 하다는 것이다. 즉, 인바운드 규칙에 의해 허용된 트레픽에 대한 응답은 자동으로 혀용된다.
VPC 내부에서 트레픽이 Elastic Network Interface 를 통해 들어올 때, 이 Security Group 의 규칙을 적용한다. 다중 보안 그룹을 하나의 인스턴스에 적용할 수도 있고, 이들의 규칙은 OR 조건으로 병합되어 동작한다.
2.7 NACL
Network Access Control List
는 Security Group
과 비슷한 기능이다. 단, 이는 VPC
내부의 Subnet
수준에서 동작하는 보안장치이다.
하지만 Security Group
과 다르게, Stateful 하지 않아, 응답에 대한 아웃바운드 규칙 또한 명시적으로 허용 해주어야 한다.
NACL
은 각각의 규칙에 번호가 할당되어 있고, 트레픽은 조건에 맞는 첫번째 규칙이 적용된다.
3. 마무리
이번 글은 단순 정보의 나열과 같았다. 하지만, VPC 는 단순한 가상 네트워크가 아닌, 보안, 가용성, 확장성 등을 모두 고려한 AWS 인프라의 설계 기초이다.
CIDR
을 통해 네트워크의 범위를 정의, Subnet
을 나누어 트래픽을 세분화, Route Table, Gateway, NAT
등을 통한 외부와의 연결 조절 그리고 Security Group, NACL
을 통해 보안 정책을 엄격하게 설정할 수 있다.
VPC
를 제대로 이해하고 구성하는 일은 단순히 외우고 끝나는 것이 아닌 서비스할 어플리케이션의 전체 아키텍처의 기반을 세우는 일과 같다. 그렇기 때문에, 각 구성 요소들의 개념과 역할을 정확히 이해하고 특정 목적에 맞도록 잘 설계하는 것이 중요하다.
'WEB' 카테고리의 다른 글
WEB: LECTURE 6 & 7 (0) | 2023.09.16 |
---|---|
Web: Lecture 2 (0) | 2023.09.04 |