일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- HTTP
- spring batch
- 백엔드
- spring boot
- Spring
- computer science
- 스프링
- 스프링 부트
- spring cloud
- Container
- 도커
- vm
- CS
- 웹 서버
- JPA
- CI/CD
- mysql
- 컨테이너
- 스프링 배치
- 영속성 컨텍스트
- 가상화
- 자바
- 데이터베이스
- 스프링 시큐리티
- virtualization
- Spring Security
- 배포
- Java
- ORM
- web server
- Today
- Total
개발 일기
[AWS] VPC와 Subnet 본문
VPC(Virtual Private Cloud)
우리가 흔히 사용하는 서비스들은 Public Internet에 존재하여 사용할 수 있는 것이다.
AWS DynamoDB, S3, ECR 등 VPC 외부에 있는 AWS 서비스 들 또한 Public Internet을 통해 엑세스 한다.
그러나 VPC는 Public Internet을 통해 접속할 수 있는 것이 아니기 때문에 외부에서 다이렉트로 엑세스 할 수 없다.
이때 AWS Services 또한 다이렉트로 VPC 내부에 엑세스 할 수 없는 것은 마찬가지이다.
그래서 예를 들어 VPC 내부의 한 EC2 인스턴스에서 S3에 엑세스하고자 한다면 Internet Gateway를 통해 Public Internet으로 나간 다음에 다시 AWS Services의 Amazon S3에 엑세스해야하는 것이다.
➜ VPC는 외부와 격리된 네트워크를 형성하는 것(AWS 리소스를 논리적으로 격리된 환경에서 실행)
VPC란?
- 사용자의 AWS 계정 전용 가상 네트워크
- AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있다.
- EC2와 같은 리소스를 VPC 내에서 실행할 수 있다.
- IP 주소 범위와 VPC 범위를 설정하고 서브넷을 추가하고 보안 그룹을 연결한 다음 라우팅 테이블을 구성한다.
- 가상의 데이터 센터
- 외부에 격리된 네트워크 컨테이너 구성 가능
➜ 원하는대로 사설망 구축가능(부여된 IP대역을 분할하여 사용 가능) - Region 단위 ➜ 해당 Region의 모든 AZ에 걸쳐있다.
- 사용 사례
ex) EC2, RDS, Lambda 등의 AWS 컴퓨팅 서비스 실행 & 서브넷 구성 & 보안 설정(IP Block, 인터넷에 노출되지 않는 EC2)
VPC 구성 요소
1. 서브넷(Subnet)
- VPC의 하위 단위로 VPC에 할당된 IP를 더 작은 단위로 분할한 개념
- 하나의 서브넷은 하나의 가용영역(AZ)안에 위치
- CIDR block range로 IP주소 지정
- VPC안에 구성할 수 있는 서브넷 구성으로는 퍼블릿 서브넷과 프라이빗 서브넷
- 퍼블릭 서브넷(Public Subnet)은 외부와의 자유로운 통신이 가능한, 외부 인터넷 구간과 직접적으로 통신을 할 수 있는 공공 네트워크 이다.
- 인터넷(IGW)를 통해 외부의 인터넷과 연결되어 있음.
- 안에 위치한 인스턴스에 퍼블릭 IP 부여 가능,
- 웹서버, 어플리케이션 서버 등 유저에게 노출되어야 하는 인프라 - 프라이빗 서브넷(Private Subnet)은 이름에서 유추할 수 있듯, 외부에서 인터넷을 통해직접 접근할 수 없고 NAT Gateway를 이용하면 외부로 단방향 통신(내부 -> 외부 방향)만 가능하다.
- 퍼블릭 IP 부여 불가
- 데이터베이스, 로직 서버 등 외부에 노출 될 필요가 없는 인프라
- 퍼블릭 서브넷(Public Subnet)은 외부와의 자유로운 통신이 가능한, 외부 인터넷 구간과 직접적으로 통신을 할 수 있는 공공 네트워크 이다.
CIDR 블록 사용 예
VPC CIDR: 10.0.0.0/16 (65,536개 IP)
서브넷 1: 10.0.0.0/24 (256개 IP)
서브넷 2: 10.0.1.0/24 (256개 IP)
즉, 해당 VPC에서는 256개의 서브넷이 나올 수 있다.
VPC CIDR 블록 크기 제한
최소 크기: /28 (16개 IP 주소)
최대 크기: /16 (65,536개 IP 주소)
RFC 1918기반 사설 IP 주소 대역
10.0.0.0/8: 대규모 네트워크에 적합
172.16.0.0/12: 중간 규모 네트워크에 적합
192.168.0.0/16: 소규모 네트워크에 적합
이 중 10.0.0.0/8은 가장 넓은 범위를 제공하며, AWS VPC 기본 CIDR로 자주 사용됩니다.
AWS VPC 생성 시 기본적으로 10.0.0.0/16을 사용하는데, 이는 사설 네트워크 대역 중 가장 넓은 10.0.0.0/8에서 파생된 것입니다.
2. 라우트 테이블(Route Table)
네트워크 트래픽의 경로를 정의하는 논리적 구성 요소로, VPC 내의 서브넷에서 출발하는 트래픽이 어디로 이동할지를 결정한다.
위와 같은 IP요청이 들어오면 10.0.0.0/16과 0.0.0.0/0 둘다 가능한데 이때 가장 구체적인 / 오른쪽 수가 더 큰 것에 따라 감.
즉, 위 경우 local로 간다.
이 경우에는 pcx - ~ 로 갈 것이다.
기타 매칭되지 않는 IP는 가장 아래 igw-~로 갈 것이다.
대상(Target) 유형
인터넷 게이트웨이(Internet Gateway, IGW):퍼블릭 서브넷의 트래픽을 인터넷으로 라우팅.
NAT 게이트웨이(NAT Gateway):프라이빗 서브넷이 인터넷에 액세스할 수 있도록 지원.
피어링 연결(VPC Peering):다른 VPC와의 트래픽을 라우팅.
가상 프라이빗 게이트웨이(Virtual Private Gateway, VGW):온프레미스 데이터센터와의 연결(VPN)을 위한 트래픽 라우팅.
VPC 엔드포인트(VPC Endpoint):AWS 서비스로의 트래픽을 인터넷을 거치지 않고 라우팅.
네트워크 인터페이스(ENI):특정 인스턴스나 네트워크 인터페이스로 트래픽 전달.
위 라우팅 테이믈을 기준으로 아래 10.0.1.31으로의 요청이 어떻게 처리되는지 보자.
SubnetA의 EC2에서 10.0.1.31으로 요청을 보냈다고 했을 때 Route Table을 참고하면 local이 Target이라 Subnet B로 요청이 들어간다.
3. 인터넷 게이트웨이(Internet Gateway)
- VPC가 외부의 인터넷과 통신할 수 있도록 경로를 만들어주는 리소스
- IPv4와 IPv6를 지원하는데 IPv4 NAT의 역할을 한다.
- Route Table에서 경로 설정 후 접근 가능하다.
- 즉, Public Subnet은 IGW로 연결될 수 있지만 Prviate Subnet의 Router를 보면 IGW로 향하는 경로가 없다.
- 무료
VPC를 수동으로 생성하면 자동으로 라우팅 테이블, NACL, 보안 그룹을 생성한다.
VPC 생성 후 서브넷 생성(Public, Private 가능)
10.0.0.0/16으로 VPC CIDR block을 생성했다면 Subnet은 10.0.0.0/24로 하는 것이 편하다
VPC CIDR: 10.0.0.0/16 (65,536개 IP)
서브넷 1: 10.0.0.0/24 (256개 IP) - Public
서브넷 2: 10.0.1.0/24 (256개 IP) - Private
서브넷 3: 10.0.1.0/24 (256개 IP) - Private
이렇게 생성했을때 해당 서브넷 들에 1. Network ACL(NACL)을 붙혀주고 2. 라우팅 테이블을 연결해준다.
1은 자동으로 되고
2에서
각 서브넷마다 라우팅 테이블을 생성해주고
PublicSubnet의 경우 인터넷 게이트웨이를 생성한 후 VPC와 연결해준 뒤 라우팅 테이블에 등록한다.
이때 Private Subnet에 EC2를 생성한 후 퍼블릭 IP를 할당한다고 해도 외부에서 접속하지 못한다.
예를들어 서브넷3가 DB를 위한 서브넷이라고 해서 EC2를 띄운 후 db를 install하려고할때 외부와 통신을 못한다.
그렇기 때문에 NAT Gateway를 생성해줘야 한다.
이때 NAT Gateway는 Private Subnet의 EC2 대신에 외부 Internet과 통신해줘야하기 때문에 Public Subnet에 위치시켜야한다.(연결 유형은 Public)
NAT Gateway를 생성한 후 만약 DB subnet과 대응 되는 라우팅 테이블에서 0.0.0.0/0 외부로 가는 트래픽이 있으면 NAT Gateway로 보낸다고 설정해준다.
이렇게하면 Private Subnet의 EC2에서 외부 Internet으로 요청이 나갈 수 있어 DB설치가 가능해진다.
'DevOps > AWS Services' 카테고리의 다른 글
[AWS] NAT Gateway와 Bastion Host (0) | 2024.11.23 |
---|---|
[AWS] VPC - 보안그룹과 NACL (0) | 2024.11.23 |
[AWS] Amazon Elastic Container Service 도입기 (0) | 2024.11.23 |
[AWS] 퍼블릭 IP, 프라이빗 IP 그리고 탄력적 IP (0) | 2024.06.28 |
[AWS] Region와 AZ (0) | 2024.06.25 |